5.3. 配置 Kafka
Kafka 使用属性文件来存储静态配置。配置文件的建议位置为 /opt/kafka/config/kraft/
。该配置文件必须可由 kafka
用户读取。
Apache Kafka 的流包括示例配置文件,它突出显示了该产品的基本和高级功能。您可以在 Apache Kafka 安装的 Streams 中的 config/kraft/
下找到,如下所示:
-
(默认)在组合模式下运行的节点的
config/kraft/server.properties
-
用于作为代理运行的节点的
config/kraft/broker.properties
-
config/kraft/controller.properties
,用于作为控制器运行的节点
本章解释了最重要的配置选项。
5.3.1. 监听器 复制链接链接已复制到粘贴板!
监听器用于连接到 Kafka 代理。每个 Kafka 代理都可以配置为使用多个监听程序。每个侦听器都需要不同的配置,以便它可以侦听不同的端口或网络接口。
要配置监听程序,请编辑 Kafka 配置属性文件中的 listeners
属性。以逗号分隔列表的形式将 监听程序添加到监听程序
属性。配置每个属性,如下所示:
<listener_name>://<hostname>:<port>
<listener_name>://<hostname>:<port>
如果 <hostname>
为空,则 Kafka 将使用 java.net.InetAddress.getCanonicalHostName()
类作为主机名。
多个监听器的配置示例
listeners=internal-1://:9092,internal-2://:9093,replication://:9094
listeners=internal-1://:9092,internal-2://:9093,replication://:9094
当 Kafka 客户端连接到 Kafka 集群时,它首先连接到 bootstrap 服务器,这是集群节点之一。bootstrap 服务器为客户端提供集群中所有代理的列表,客户端会单独连接到每个代理。代理列表基于配置 的监听程序
。
advertised 监听程序
另外,您可以使用 advertised.listeners
属性为客户端提供不同于监听程序属性中给出的一系列不同的监听程序
地址。如果其他网络基础架构(如代理)在客户端和代理之间,或者会使用外部 DNS 名称而不是 IP 地址,这很有用。
advertised.listeners
属性的格式与 listeners
属性相同。
公告监听程序的配置示例
listeners=internal-1://:9092,internal-2://:9093 advertised.listeners=internal-1://my-broker-1.my-domain.com:1234,internal-2://my-broker-1.my-domain.com:1235
listeners=internal-1://:9092,internal-2://:9093
advertised.listeners=internal-1://my-broker-1.my-domain.com:1234,internal-2://my-broker-1.my-domain.com:1235
公告的监听程序的名称必须与监听程序
属性中列出的名称匹配。
inter-broker 监听程序
inter-broker 监听程序 用于 Kafka 代理之间的通信。需要代理间通信:
- 在不同代理间协调工作负载
- 在存储在不同代理中的分区间复制消息
inter-broker 侦听器可以分配给您选择的端口。当配置了多个监听程序时,您可以在代理配置的 inter.broker.listener.name
属性中定义 inter-broker 监听程序的名称。
在这里,inter-broker 侦听器被命名为 REPLICATION
:
listeners=REPLICATION://0.0.0.0:9091 inter.broker.listener.name=REPLICATION
listeners=REPLICATION://0.0.0.0:9091
inter.broker.listener.name=REPLICATION
控制器监听程序
控制器配置用于连接和与协调集群的控制器通信,并管理用于跟踪代理和分区状态的元数据。
默认情况下,控制器和代理之间的通信使用专用的控制器监听程序。控制器负责协调管理任务,如分区领导变化,因此需要一个或多个这些监听器。
使用 controller.listener.names
属性指定用于控制器的监听程序。您可以使用 controller.quorum.voters
属性指定控制器投票的仲裁。仲裁(仲裁)为管理任务启用领导后续结构,领导人主动管理操作,并将后续者作为热待机,确保内存中的元数据一致性并促进故障转移。
listeners=CONTROLLER://0.0.0.0:9090 controller.listener.names=CONTROLLER controller.quorum.voters=1@localhost:9090
listeners=CONTROLLER://0.0.0.0:9090
controller.listener.names=CONTROLLER
controller.quorum.voters=1@localhost:9090
控制器 voters 的格式是 < cluster_id>@<hostname>:<port>
。
5.3.2. 数据日志 复制链接链接已复制到粘贴板!
Apache Kafka 将从生成者接收的所有记录存储在日志中。日志包含 Kafka 需要交付的实际数据,格式为记录。请注意,这些记录与应用程序日志文件不同,该文件详细说明了代理的活动。
日志目录
您可以使用服务器配置属性文件中的 log.dirs
属性配置日志目录,将日志存储在一个或多个日志目录中。它应设置为在安装过程中创建的 /var/lib/kafka
目录:
数据日志配置
log.dirs=/var/lib/kafka
log.dirs=/var/lib/kafka
出于性能考虑,您可以将 log.dirs
配置为多个目录,并将它们分别放在不同的物理设备中,以提高磁盘 I/O 性能。例如:
配置多个目录
log.dirs=/var/lib/kafka1,/var/lib/kafka2,/var/lib/kafka3
log.dirs=/var/lib/kafka1,/var/lib/kafka2,/var/lib/kafka3
5.3.3. 元数据日志 复制链接链接已复制到粘贴板!
控制器在每个节点上使用作为单分区主题(__cluster_metadata
)存储的元数据日志。它记录集群的状态,在代理、副本、主题和分区上存储信息,包括不同步副本和分区领导状态。
元数据日志目录
您可以使用 metadata.log.dir
属性配置用于存储元数据日志的目录。默认情况下,如果没有设置此属性,Kafka 使用 log.dirs
属性来决定数据日志和元数据日志的存储目录。元数据日志放置在为 log.dirs
指定的第一个目录中。
从数据操作隔离元数据操作可以提高可管理性,并可能导致性能提高。要为元数据日志设置特定的目录,请在服务器配置属性文件中包含 metadata.log.dir
属性。
例如:
元数据日志配置
log.dirs=/var/lib/kafka metadata.log.dir=/var/lib/kafka-metadata
log.dirs=/var/lib/kafka
metadata.log.dir=/var/lib/kafka-metadata
Kafka 工具可用于检查和调试元数据日志。如需更多信息,请参阅 Apache Kafka 文档。
5.3.4. 节点 ID 复制链接链接已复制到粘贴板!
节点 ID 是集群中每个节点的唯一标识符(代理或控制器)。您可以分配一个大于或等于 0 的整数作为节点 ID。节点 ID 用于在重启或崩溃后识别节点,因此 ID 稳定,且不会随时间变化。
节点 ID 在 Kafka 配置属性文件中配置:
node.id=1
node.id=1