问
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
讲
这是一个 Kafka KRaft 模式(无 ZooKeeper)的配置。让我逐一解释这些环境变量的含义:
配置详解
1. 节点身份配置
bash
KAFKA_CFG_NODE_ID=0
- 设置 Kafka 节点的唯一标识符为 0
2. 节点角色配置
bash
KAFKA_CFG_PROCESS_ROLES=controller,broker
- 该节点同时担任 控制器(controller) 和 代理(broker) 角色
- 在 KRaft 模式中,控制器负责元数据管理,代理负责消息存储和传输
3. 监听器配置
bash
KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- 定义两个监听器:
PLAINTEXT://:9092:客户端通信端口(broker 功能)CONTROLLER://:9093:控制器间通信端口(controller 功能)
4. 安全协议映射
bash
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- 指定各监听器使用的安全协议
- 这里都使用明文协议(PLAINTEXT),生产环境应使用 SSL/SASL
5. 控制器集群配置
bash
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
- 定义控制器投票成员
- 格式:
节点ID@主机:端口 - 这里只有一个控制器节点(0)在
kafka:9093
6. 控制器监听器名称
bash
KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- 指定用于控制器通信的监听器名称
架构特点
这是一个 单节点 KRaft 集群:
- 集成了控制器和代理功能
- 使用 KRaft 共识算法替代 ZooKeeper
- 适用于开发和测试环境
生产环境建议
对于生产环境,建议:
bash
# 多节点配置示例
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka1:9093,1@kafka2:9093,2@kafka3:9093
# 启用安全协议
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:SSL,PLAINTEXT:SASL_SSL
这种配置简化了 Kafka 架构,减少了外部依赖,提高了部署效率。