《Docker 单机部署 Kafka + Zookeeper:入门消息队列必看》
核心:docker-compose 一键启动,内外网访问配置

一、为什么需要这套组合?

Kafka 作为分布式消息队列的标杆,通常需要配合 Zookeeper 来管理集群元数据。虽然 Kafka 3.x 开始尝试去 ZK,但生产环境最成熟的方案依然是 ZK + Kafka。本文教你用 Docker 一键搭建,特别解决内外网访问这个痛点。

二、准备工作

确保服务器已安装 Docker 和 Docker Compose:

docker --version
docker-compose --version

三、docker-compose.yml 完整配置

创建项目目录并编写配置文件:

mkdir kafka-docker && cd kafka-docker
vim docker-compose.yml

内容如下:

version: '3.8'

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    container_name: zookeeper
    restart: always
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - "2181:2181"
    networks:
      - kafka-net

  kafka:
    image: confluentinc/cp-kafka:latest
    container_name: kafka
    restart: always
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"      # 内网访问端口
      - "9093:9093"      # 外网访问端口(可选)
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      # 内外网地址配置(核心)
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://内网IP:9092,EXTERNAL://外网IP:9093
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,EXTERNAL://0.0.0.0:9093
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
    volumes:
      - ./kafka-data:/var/lib/kafka/data
    networks:
      - kafka-net

networks:
  kafka-net:
    driver: bridge

四、启动与验证

# 启动服务
docker-compose up -d

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f kafka

测试生产者:

# 进入 Kafka 容器
docker exec -it kafka bash

# 创建 topic
kafka-topics --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

# 启动生产者
kafka-console-producer --topic test-topic --bootstrap-server localhost:9092

测试消费者(新开终端):

docker exec -it kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092 --from-beginning

五、内外网访问说明

**内网访问:**应用部署在同一台服务器或内网环境,使用 内网IP:9092 连接。

**外网访问:**如果你在云服务器上,需要从本地电脑连接,使用 外网IP:9093,记得在云防火墙开放 9093 端口。

关键环境变量解释:

KAFKA_ADVERTISED_LISTENERS:告诉客户端用哪个地址连接,这是内外网访问的核心

KAFKA_LISTENERS:Kafka 进程监听的地址

KAFKA_INTER_BROKER_LISTENER_NAME:Broker 之间通信使用的监听器

六、常用管理命令

# 查看所有 topics
docker exec -it kafka kafka-topics --list --bootstrap-server localhost:9092

# 查看 topic 详情
docker exec -it kafka kafka-topics --describe --topic test-topic --bootstrap-server localhost:9092

# 删除 topic
docker exec -it kafka kafka-topics --delete --topic test-topic --bootstrap-server localhost:9092

更多推荐