Docker—部署kafka

1、部署

version: '3.9'

services:
  broker:
    image: xxxxx/library/apache/kafka:4.3.0
    container_name: broker
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      # KRaft 必要配置
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      
      # 监听器配置
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      # 一定要注意,这个ip地址一定要写你对外服务的ip地址,这里是vpn的
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.88.1:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      
      # ⭐ 关键修复:使用 controller.quorum.voters 的正确格式
      KAFKA_CONTROLLER_QUORUM_VOTERS: "1@localhost:9093"
      
      # 集群 ID(KRaft 必须)
      KAFKA_CLUSTER_ID: "5L6g3nShT-eMCtK--X86sw"
      
      # 单节点配置
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 3
      
      # 数据目录
      KAFKA_LOG_DIRS: /tmp/kraft-combined-logs

    networks:
      - kafka-net


networks:
  kafka-net:
    driver: bridge

2、测试

docker exec -it broker /bin/bash

kafka的命令所在的目录是:/opt/kafka/bin/

(1)查看topic

kafka-topics.sh \
  --bootstrap-server localhost:9092 \
  --list

(2)创建topic

kafka-topics.sh \
  --bootstrap-server localhost:9092 \
  --create \
  --topic test-topic \
  --partitions 1 \
  --replication-factor 1