kafka - docker opt

一、docker compose

Kafka 单机docker-compose.yml

version: "3.8"
services:
  kafka:
    image: bitnami/kafka:4.0.0
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      - KAFKA_ENABLE_KRAFT=yes
      - KAFKA_KRAFT_CLUSTER_ID=4L6g3nShT-eMCtK--X86sw
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      - KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.200:9092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
      - KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data
    volumes:
      - kafka-data:/bitnami/kafka
volumes:
  kafka-data:

启动:

docker compose up -d
docker compose logs -f kafka
  • version: "3.8": 使用 Compose 文件规范 3.8 版本。
  • services: 定义要运行的服务集合。
  • kafka: 服务名(同时也是默认的内部 DNS 名称)。
  • image: bitnami/kafka:4.0.0: 使用 Bitnami 的 Kafka 4.0.0 镜像(KRaft 模式支持)。
  • container_name: kafka: 指定容器名为 kafka(便于管理)。
  • ports: "9092:9092": 将宿主机 9092 暴露到容器 9092(客户端用 9092 连接 Kafka)。未暴露 9093,因为控制面只在容器网络内通信。
  • environment: Kafka 配置(通过环境变量注入)
  • KAFKA_ENABLE_KRAFT=yes: 启用 KRaft 模式(不使用 Zookeeper)。
  • KAFKA_KRAFT_CLUSTER_ID=...: KRaft 集群 ID,需固定不变(初始化生成一次即可复用)。
  • KAFKA_CFG_NODE_ID=1: 当前节点 ID(单节点可为 1)。
  • KAFKA_CFG_PROCESS_ROLES=broker,controller: 同一进程同时扮演 broker 与 controller。
  • KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093: 定义监听端口
  • PLAINTEXT://0.0.0.0:9092:客户端监听在所有网卡 9092。
  • CONTROLLER://:9093:控制面监听在 9093(对容器网络可见)。
  • KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.200:9092: 对客户端“宣告”的地址,客户端拿到元数据后按此地址回连;需填宿主机可达的 IP/域名与端口。
  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT: 将自定义监听名映射到安全协议(此处均为明文,无 TLS/SASL)。
  • KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER: 控制面使用名为 CONTROLLER 的监听器。
  • KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093: KRaft 控制器投票者列表(节点 ID@地址);单节点为 1@kafka:9093,其中 kafka 为 Compose 内部主机名。
  • KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data: Kafka 数据目录(分区/段文件等)在容器内的路径。
  • volumes: kafka-data:/bitnami/kafka: 将命名卷 kafka-data 挂载到容器路径 /bitnami/kafka,持久化数据与配置。
  • volumes: kafka-data: 定义命名卷 kafka-data(使用默认本地驱动)。
    补充要点:
    外部客户端应使用 bootstrap.servers=192.168.10.200:9092
    确认宿主机防火墙放行 TCP 9092;若 IP/域名变更,记得同步更新 KAFKA_CFG_ADVERTISED_LISTENERS

二、docker run(Kafka 单容器)

docker run -d --name kafka \
  -p 9092:9092 \
  -e KAFKA_ENABLE_KRAFT=yes \
  -e KAFKA_KRAFT_CLUSTER_ID=4L6g3nShT-eMCtK--X86sw \
  -e KAFKA_CFG_NODE_ID=1 \
  -e KAFKA_CFG_PROCESS_ROLES=broker,controller \
  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
  -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
  -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
  -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@127.0.0.1:9093 \
  -e KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data \
  -v kafka-data:/bitnami/kafka \
  bitnami/kafka:4.0.0

创建主题:

docker exec -it kafka /opt/bitnami/kafka/bin/kafka-topics.sh \
  --create --topic test --bootstrap-server localhost:9092 \
  --replication-factor 1 --partitions 1

生产者:

docker exec -it kafka /opt/bitnami/kafka/bin/kafka-console-producer.sh \
  --bootstrap-server localhost:9092 --topic test

消费者:

docker exec -it kafka /opt/bitnami/kafka/bin/kafka-console-consumer.sh \
  --bootstrap-server localhost:9092 --topic test --from-beginning

列出主题:

docker exec -it kafka /opt/bitnami/kafka/bin/kafka-topics.sh \
  --bootstrap-server localhost:9092 --list

评论

暂无

添加新评论