3.4. 在 KRaft 模式下运行 Kafka 集群
在 KRaft 模式中配置和运行 Kafka。您可以将 Kafka 作为单节点或多节点 Kafka 集群运行。至少运行三个代理和三个控制器节点,在代理间复制主题,以实现稳定性和可用性。
Kafka 节点执行代理、控制器或两者的角色。
- 代理角色
- 代理( broker)有时被称为节点或服务器,编配存储并传递信息。
- 控制器角色
- 控制器协调集群并管理用于跟踪代理和分区状态的元数据。
集群元数据存储在内部 __cluster_metadata
主题中。
您可以使用组合代理和控制器节点,但您可能希望分隔这些功能。在简单的部署中,执行组合角色的代理更为方便。
要识别集群,您可以创建一个 ID。该 ID 用于为添加到集群中的节点创建日志。
在每个节点的配置中指定以下内容:
- 节点 ID
- 代理角色
-
用作控制器的节点列表
(
或票数)
您可以使用每个控制器的节点 ID 和连接详情(主机名和端口)指定控制器列表,配置为 voters
。
您可以使用配置属性文件应用代理配置,包括角色设置。代理配置根据角色的不同而有所不同。KRaft 提供三个代理配置属性文件示例。
-
/opt/kafka/config/kraft/broker.properties
具有代理角色配置示例 -
/opt/kafka/config/kraft/controller.properties
具有控制器角色的示例配置 -
/opt/kafka/config/kraft/server.properties
具有组合角色配置示例
您可以在这些示例属性文件中构建代理配置。在此过程中,使用了示例 server.properties
配置。
先决条件
- 每个主机上安装了 Apache Kafka 的流,且配置文件可用。
流程
为 Kafka 集群生成唯一 ID。
您可以使用
kafka-storage
工具进行此操作:/opt/kafka/bin/kafka-storage.sh random-uuid
/opt/kafka/bin/kafka-storage.sh random-uuid
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该命令返回一个 ID。KRaft 模式需要一个集群 ID。
为集群中的每个节点创建一个配置文件。
您可以在 Kafka 提供的示例上构建该文件。
将角色指定为
代理
、控制器
或代理、控制器
例如,为组合角色指定
process.roles=broker
。从
0
开始,为集群中的每个节点指定唯一的node.id
。例如,
node.id=1
。以 <
node_id>@<hostname:port> 格式指定
controller.quorum.voters
列表。例如,
controller.quorum.voters=1@localhost:9093
.指定监听程序:
为每个监听程序配置名称、主机名和端口。
例如:
listeners=PLAINTEXT:localhost:9092,CONTROLLER:localhost:9093
。配置用于代理间通信的监听程序名称。
例如,
inter.broker.listener.name=PLAINTEXT
。配置控制器仲裁使用的监听程序名称。
例如,
controller.listener.names=CONTROLLER
。为每个监听程序配置名称、主机名和端口,这些监听程序公告给客户端以连接到 Kafka。
例如,
advertised.listeners=PLAINTEXT:localhost:9092
。
为 Kafka 集群中的每个节点设置日志目录:
/opt/kafka/bin/kafka-storage.sh format -t <uuid> -c /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-storage.sh format -t <uuid> -c /opt/kafka/config/kraft/server.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 返回:
Formatting /tmp/kraft-combined-logs
Formatting /tmp/kraft-combined-logs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 <uuid> 替换为您生成的集群 ID。对集群中的每个节点使用相同的 ID。
使用您为代理创建的属性文件应用代理配置。
默认情况下,
server.properties
配置文件中指定的日志目录(log.dirs
)设置为/tmp/kraft-combined-logs
。/tmp
目录通常会在每次系统重启时清除,使其仅适用于开发环境。您可以添加以逗号分隔的列表来设置多个日志目录。
启动每个 Kafka 节点。
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Kafka 是否正在运行:
jcmd | grep kafka
jcmd | grep kafka
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 返回:
process ID kafka.Kafka /opt/kafka/config/kraft/server.properties
process ID kafka.Kafka /opt/kafka/config/kraft/server.properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查每个节点的日志,以确保它们已成功加入 KRaft 集群:
tail -f /opt/kafka/logs/server.log
tail -f /opt/kafka/logs/server.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以创建主题,并从代理发送和接收信息。
对于传递消息的代理,您可以在集群中的代理间使用主题复制,以实现数据持久性。将主题配置为至少三个复制因素,最小同步副本设置为复制因素少 1 个。如需更多信息,请参阅 第 9.7 节 “创建主题”。