《Docker 单机部署 Kafka + Zookeeper:入门消息队列必看》
·
《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
更多推荐
所有评论(0)