Kafka Docker 配置文档
服务概览
服务 | 容器名称 | 端口 | 镜像 |
---|---|---|---|
Zookeeper | zookeeper | 2181 | confluentinc/cp-zookeeper:latest |
Kafka | kafka | 9092, 9101 | confluentinc/cp-kafka:latest |
认证配置
SASL/PLAIN 认证
- 协议: SASL_PLAINTEXT
- 机制: PLAIN
用户账号
用户名 | 密码 | 用途 |
---|---|---|
admin | admin123 | 管理员账号 |
kafka | kafka123 | 应用账号 |
连接配置
Kafka 客户端配置
bootstrap.servers=localhost:9092
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin123";
服务访问地址
- Kafka:
localhost:9092
- Zookeeper:
localhost:2181
使用命令
启动服务
docker compose up -d
停止服务
docker compose down
查看日志
docker compose logs -f kafka
删除卷
docker compose down -V
示例操作
进入 docker exec -it kafka bash
创建主题
kafka-topics --create \
--topic text_topic \
--partitions 9 \
--replication-factor 1 \
--bootstrap-server localhost:9092 \
生产消息
kafka-console-producer --topic text_topic --bootstrap-server localhost:9092
消费消息
kafka-console-consumer --topic text_topic --from-beginning --bootstrap-server localhost:9092
# 带消费组
kafka-console-consumer --topic text_topic --from-beginning --bootstrap-server localhost:9092 --group my-consumer-group
查看主题列表
kafka-topics --list --bootstrap-server localhost:9092
查看主题未消费数量 (消费者组 Lag)
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-consumer-group
配置文件
docker-compose.yml
主服务配置文件,包含所有环境变量和端口映射。
kafka_server_jaas.conf
SASL 认证配置文件,定义用户和密码:
- 路径:
./kafka_server_jaas.conf
- 挂载到容器:
/etc/kafka/kafka_server_jaas.conf
数据持久化
使用 Docker volumes 进行数据持久化:
zookeeper_data
: Zookeeper 数据zookeeper_logs
: Zookeeper 日志kafka_data
: Kafka 数据
网络配置
所有服务运行在自定义的 kafka-network
网络中,确保容器间通信。
Docker-compose
version: "3.8"
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
volumes:
- zookeeper_data:/var/lib/zookeeper/data
- zookeeper_logs:/var/lib/zookeeper/log
networks:
- kafka-network
kafka:
image: confluentinc/cp-kafka:7.4.0
hostname: kafka
container_name: kafka
depends_on:
- zookeeper
ports:
- "9092:9092"
- "9101:9101"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
# 明确监听所有接口的 9092 端口,并使用 PLAINTEXT 协议
KAFKA_LISTENERS: "PLAINTEXT://0.0.0.0:9092"
# 广告给客户端的地址:外部通过 FRP 访问 8951,内部服务访问 kafka:29092
KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://frpc_host:frpc_port"
# 安全协议映射(虽然只用了一个,但保持清晰)
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "PLAINTEXT:PLAINTEXT"
# 指定 broker 间通信使用的监听器名称
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
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_JMX_PORT: 9101
KAFKA_JMX_HOSTNAME: localhost
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
KAFKA_DELETE_TOPIC_ENABLE: "true"
KAFKA_HEAP_OPTS: "-Xmx1G -Xms1G"
volumes:
- kafka_data:/var/lib/kafka/data
# 不再挂载 JAAS 文件,因为我们是 PLAINTEXT 模式
networks:
- kafka-network
volumes:
zookeeper_data:
driver: local
zookeeper_logs:
driver: local
kafka_data:
driver: local
networks:
kafka-network:
driver: bridge
kafka_server_jaas.conf
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin123"
user_admin="admin123"
user_kafka="kafka123";
};
Client {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="admin"
password="admin123";
};
本文由 邓尘锋 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 1, 2025 at 10:51 am