摘要:4节点部署Kafka
部署配置
node1部署配置如下:
version: '3.8'
services:
kafka:
image: bitnami/kafka:3.9.0-debian-12-r3
ports:
- "9092:9092" # PLAINTEXT
- "9093:9093" # CONTROLLER
- "9094:9094" # EXTERNAL
- "9095:9095" # EXTERNAL_SASL
volumes:
- /kafka/data1:/kafka/data1
- /kafka/data2:/kafka/data2
- /kafka/data3:/kafka/data3
- /kafka/data4:/kafka/data4
- /kafka/data5:/kafka/data5
- /kafka/data6:/kafka/data6
extra_hosts:
- "kafka1:{ip}"
- "kafka2:{ip}"
- "kafka3:{ip}"
- "kafka4:{ip}"
environment:
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka1:9093,1@kafka2:9093,2@kafka3:9093,3@kafka4:9093
- KAFKA_CFG_BROKER_ID=0
- KAFKA_CLIENT_USERS=user
- KAFKA_CLIENT_PASSWORDS=
- KAFKA_CLIENT_LISTENER_NAME=EXTERNAL_SASL
- KAFKA_CONTROLLER_USER=controller_user
- KAFKA_CONTROLLER_PASSWORD=
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094,EXTERNAL_SASL://:9095
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka1:9092,EXTERNAL://{ip}:9094,EXTERNAL_SASL://{ip}:9095
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT,EXTERNAL_SASL:SASL_PLAINTEXT
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_KRAFT_CLUSTER_ID=cluster-id-default
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
- KAFKA_CFG_LOG_RETENTION_HOURS=168
- KAFKA_CFG_LOG_RETENTION_BYTES=1073741824
- KAFKA_CFG_LOG_SEGMENT_BYTES=134217728
- KAFKA_CFG_LOG_RETENTION_CHECK_INTERVAL_MS=300000
- KAFKA_LOG_DIRS=/kafka/data1,/kafka/data2,/kafka/data3,/kafka/data4,/kafka/data5,/kafka/data6
其它3节点
(Node ID 1):
Replace
KAFKA_CFG_NODE_ID=0
withKAFKA_CFG_NODE_ID=1
.Replace
KAFKA_CFG_BROKER_ID=0
withKAFKA_CFG_BROKER_ID=1
.Replace
kafka1
inKAFKA_CFG_ADVERTISED_LISTENERS
withkafka2
.Replace
<Machine1_IP>
with the IP address of Machine 2.
(Node ID 2):
Replace
KAFKA_CFG_NODE_ID=0
withKAFKA_CFG_NODE_ID=2
.Replace
KAFKA_CFG_BROKER_ID=0
withKAFKA_CFG_BROKER_ID=2
.Replace
kafka1
inKAFKA_CFG_ADVERTISED_LISTENERS
withkafka3
.Replace
<Machine1_IP>
with the IP address of Machine 3.
(Node ID 3):
Replace
KAFKA_CFG_NODE_ID=0
withKAFKA_CFG_NODE_ID=3
.Replace
KAFKA_CFG_BROKER_ID=0
withKAFKA_CFG_BROKER_ID=3
.Replace
kafka1
inKAFKA_CFG_ADVERTISED_LISTENERS
withkafka4
.Replace
<Machine1_IP>
with the IP address of Machine 4.
参数说明
以下是对提供的 Kafka Docker Compose 配置文件中各参数的详细解释:
---
基础配置
1. `image: bitnami/kafka:3.9.0-debian-12-r3`
- 指定使用的 Kafka 镜像及其版本(基于 Bitnami 的 Kafka 3.9.0)。
2. `ports`
- 映射 Kafka 监听的端口到主机:
- 9092:9092
:PLAINTEXT 明文通信端口。
- 9093:9093
:CONTROLLER 控制器通信端口。
- 9094:9094
:EXTERNAL 外部通信端口。
- 9095:9095
:EXTERNAL_SASL 外部 SASL 认证通信端口。
3. `volumes`
- 将 Kafka 的日志目录挂载到主机的指定路径(`/kafka/data1` 到 /kafka/data6
),用于持久化数据。
4. `environment`
- Kafka 的环境变量配置,具体如下:
---
Kafka 节点配置
1. `KAFKA_CFG_NODE_ID=3`
- 当前 Kafka 节点的唯一标识符(ID 为 3)。
2. `KAFKA_CFG_PROCESS_ROLES=controller,broker`
- 当前节点的角色:既是控制器(controller)也是代理(broker)。
3. `KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka1:9093,1@kafka2:9093,2@kafka3:9093,3@kafka4:9093`
- 定义 Kafka 集群中所有控制器的投票者列表,格式为 节点ID@节点地址:端口
。
4. `KAFKA_CFG_BROKER_ID=3`
- 当前 Kafka 代理的唯一标识符(ID 为 3)。
---
认证配置
1. `KAFKA_CLIENT_USERS=user`
- 定义客户端连接 Kafka 时使用的用户名。
2. `KAFKA_CLIENT_PASSWORDS=`
- 定义客户端连接 Kafka 时使用的密码。
3. `KAFKA_CLIENT_LISTENER_NAME=EXTERNAL_SASL`
- 指定客户端连接时使用的监听器名称(EXTERNAL_SASL)。
- Kafka 配置中的一个环境变量,用于指定客户端(生产者、消费者等)连接 Kafka 时使用的监听器名称。它的作用是告诉 Kafka 客户端应该通过哪个监听器进行通信
4. `KAFKA_CONTROLLER_USER=controller_user`
- 定义控制器用户(用于控制器之间的通信)。
5. `KAFKA_CONTROLLER_PASSWORD=`
- 定义控制器用户的密码。
---
监听器配置
Broker(代理) 是 Kafka 集群的核心组件之一,负责存储、管理和处理消息
1. `KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094,EXTERNAL_SASL://:9095`
- 定义 Kafka 监听的协议和端口:
- PLAINTEXT://:9092
:明文通信。
- CONTROLLER://:9093
:控制器通信。
- EXTERNAL://:9094
:外部通信。
- EXTERNAL_SASL://:9095
:外部 SASL 认证通信。
指定 Kafka 服务器(broker)监听的网络地址和端口
2. `KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka4:9092,EXTERNAL://30.0.237.12:9094,EXTERNAL_SASL://30.0.237.12:9095`
- 定义 Kafka 对外发布的监听器地址,供客户端连接:
- PLAINTEXT://kafka4:9092
:明文通信地址。
- EXTERNAL://30.0.237.12:9094
:外部通信地址。
- EXTERNAL_SASL://30.0.237.12:9095
:外部 SASL 认证通信地址。
指定 Kafka 服务器(broker)向客户端公开的连接地址
3. `KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT,EXTERNAL_SASL:SASL_PLAINTEXT`
- 定义监听器的安全协议映射:
- CONTROLLER:PLAINTEXT
:控制器使用明文通信。
- EXTERNAL:PLAINTEXT
:外部通信使用明文。
- PLAINTEXT:PLAINTEXT
:明文通信使用明文。
- EXTERNAL_SASL:SASL_PLAINTEXT
:外部 SASL 认证通信使用 SASL 明文协议。
4. `KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER`
- 指定控制器监听器的名称。
5. `KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT`
- 指定代理之间通信的监听器名称。Kafka Broker 之间通信所使用的监听器名称
---
日志配置
1. `KAFKA_CFG_LOG_RETENTION_HOURS=168`
- 定义日志保留时间(168 小时,即 7 天)。
2. `KAFKA_CFG_LOG_RETENTION_BYTES=1073741824`
- 定义日志保留的最大字节数(1 GB)。
3. `KAFKA_CFG_LOG_SEGMENT_BYTES=134217728`
- 定义每个日志段的最大字节数(128 MB)。
4. `KAFKA_CFG_LOG_RETENTION_CHECK_INTERVAL_MS=300000`
- 定义日志保留检查的时间间隔(300000 毫秒,即 5 分钟)。
5. `KAFKA_LOG_DIRS=/kafka/data1,/kafka/data2,/kafka/data3,/kafka/data4,/kafka/data5,/kafka/data6`
- 定义 Kafka 日志存储的目录。
评论区