Docker Compose 部署 Kafka的KRaft模式 不用依赖 Zookeeper
前言
从 Kafka 2.8 开始,KRaft 模式允许 Kafka 在没有 Zookeeper 的情况下运行。本文将部署单机模式
1.新建 docker-compose.yml
vim docker-compose.yml
services:
kafka:
image: bitnami/kafka:3.6
container_name: kafka
ports:
- "19092:9092"
environment:
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_NODE_ID=1
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@localhost:9093
- KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka: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_LOG_DIRS=/opt/kafka-logs
- KAFKA_CFG_NUM_PARTITIONS=1
- KAFKA_CFG_DEFAULT_REPLICATION_FACTOR=1
- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=1
- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1
- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=1
- KAFKA_CFG_MIN_INSYNC_REPLICAS=1
- ALLOW_PLAINTEXT_LISTENER=yes
volumes:
- kafka-data:/opt/kafka-logs
networks:
- kafka-network
networks:
kafka-network:
driver: bridge
volumes:
kafka-data:
name: my-kafka-data
2.启动 Kafka
docker compose -f docker-compose.yml up -d
首次运行会拉取镜像,耐心等待…
3.验证 Kafka 启动
3.1 查看 Kafka 的日志:
docker logs kafka
有以下报错(如果没有报错 则略过此步骤)
查看 宿主机 数据卷地址
docker inspect kafka |grep -i Mounts -A 10
确认宿主机上挂载的数据卷目录的权限
sudo ls -ld /var/lib/docker/volumes/my-kafka-data/_data
调整宿主机权限
sudo chown -R 1001:1001 /var/lib/docker/volumes/my-kafka-data/_data
sudo chmod -R 755 /var/lib/docker/volumes/my-kafka-data/_data
再次启动
docker compose -f docker-compose.yml up -d
3.2 查看容器
docker ps
4.测试
4.1 进入 Kafka 容器
docker exec -it --user root kafka bash
4.2 创建 Kafka 主题
使用 kafka-topics.sh 命令来创建主题。假设我们创建一个名为 test-topic 的主题:
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-topic --partitions 1 --replication-factor 1
4.3 查看现有的 Kafka 主题
kafka-topics.sh --bootstrap-server localhost:9092 --list
4.4 生产消息到 Kafka 主题
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test-topic
4.5 消费 Kafka 主题
加一个新的终端,再进容器
docker exec -it --user root kafka bash
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning
切换之前的终端,输入比如
a
b
c
d
下图所示成功消费
至此 部署完成