容器化部署Kafka的最佳实践:基于KRaft模式的无ZooKeeper方案
一、docker 部署kafka单节点
1.1安装docker
可以参考这篇CentOS 7安装docker并配置镜像加速
1.3 运行kafka(注意修改zookeeper,kafka地址)
docker run -d --name kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.10.180:9092 -p 9092:9092 -v /home/application/Middleware/kafka/data:/var/lib/kafka/data --restart=always docker.cnb.cool/srebro/docker-images/kafka-kraft:3.7.2
1.4 登录kafka容器,创建topic
docker exec -it kafka bash
cd /opt/kafka/bin./kafka-topics.sh --create --topic my_topic_srebro.cn --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
1.5 登录kafka容器,启动一个生产者
docker exec -it kafka bash
cd /opt/kafka/bin./kafka-console-producer.sh --topic my_topic_srebro.cn --bootstrap-server localhost:9092
1.6 新开一个终端窗口,登录kafka容器,启动一个消费者
docker exec -it kafka bash
cd /opt/kafka/bin./kafka-console-consumer.sh --topic my_topic_srebro.cn --bootstrap-server localhost:9092 --from-beginning
1.7 模拟在生产者上,测试几条数据,观察消费者上有没有收到数据
1.8 kafka map 管理工具
A beautiful, concise and powerful kafka web management tool. 一个美观简洁且强大的kafka web管理工具。
- 官方帮助手册: https://github.com/dushixiang/kafka-map/blob/master/README-zh_CN.md
docker run -d \-p 8080:8080 \-v /opt/kafka-map/data:/usr/local/kafka-map/data \-e DEFAULT_USERNAME=admin \-e DEFAULT_PASSWORD=admin \--name kafka-map \--restart always dushixiang/kafka-map:latest
二、docker-compose 部署kafka单节点
2.1 安装docker-compose
可以参考这篇Cenotos7 安装docker-compose
2.2 编排docker-compose文件
注意先要创建docker 单独的网络
创建自定义网络 : docker network create -d bridge --subnet “192.168.10.0/24” --gateway “192.168.10.1” srebro.cn
version: '3'services:kafka:image: docker.cnb.cool/srebro/docker-images/kafka-kraft:3.7.2container_name: kafkanetworks:- srebro.cnenvironment:#KAFKA_LISTENERS: PLAINTEXT://:9092 # Kafka 监听端口配置KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.16.10.180:9092 # Kafka 对外公布的地址#KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT # 监听器与安全协议的映射#KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT # Broker 间通信使用的监听器ports:- "9092:9092"volumes:- /home/application/Middleware/kafka/data:/var/lib/kafka/datarestart: alwayskafka-map: #image: dushixiang/kafka-map:latestimage: docker.cnb.cool/srebro/docker-images/dushixiang-kafka-map:latest #加速地址container_name: kafka-mapnetworks:- srebro.cnvolumes:- "/home/application/Middleware/kafka/kafka-map/data:/usr/local/kafka-map/data" ports:- 19006:8080environment:DEFAULT_USERNAME: adminDEFAULT_PASSWORD: 123456depends_on:- kafkarestart: 'unless-stopped'networks:srebro.cn:external: true