目 录CONTENT

文章目录

docker install Kafka cluster

Administrator
2025-03-20 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

摘要: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 with KAFKA_CFG_NODE_ID=1.

  • Replace KAFKA_CFG_BROKER_ID=0 with KAFKA_CFG_BROKER_ID=1.

  • Replace kafka1 in KAFKA_CFG_ADVERTISED_LISTENERS with kafka2.

  • Replace <Machine1_IP> with the IP address of Machine 2.

(Node ID 2):

  • Replace KAFKA_CFG_NODE_ID=0 with KAFKA_CFG_NODE_ID=2.

  • Replace KAFKA_CFG_BROKER_ID=0 with KAFKA_CFG_BROKER_ID=2.

  • Replace kafka1 in KAFKA_CFG_ADVERTISED_LISTENERS with kafka3.

  • Replace <Machine1_IP> with the IP address of Machine 3.

(Node ID 3):

  • Replace KAFKA_CFG_NODE_ID=0 with KAFKA_CFG_NODE_ID=3.

  • Replace KAFKA_CFG_BROKER_ID=0 with KAFKA_CFG_BROKER_ID=3.

  • Replace kafka1 in KAFKA_CFG_ADVERTISED_LISTENERS with kafka4.

  • 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 日志存储的目录。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区