最近项目中需要用到kafka集群,于是便试着用docker-compose容器编排试试部署,里面有些内容和之前的部署不一样,希望我微不足道的经验可以帮朋友们解决一点问题!
第一步:docker基础环境以及docker-compose不可少,可以自行下载,我们直接进入环节
su root
docker pull bitnami/kafka:3.9
docker images
docker network create mynetwork
如果下载畅通无阻,就ok!否则去 vi /etc/docker/daemon.json 下更换镜像下载地址;
第二步:在本地创建目录并赋予权限,以下以我的为例
mkdir -p /data/mycontainers/
chmod a+rwx /data/mycontainers/
## 给予权限为后续做铺垫,或者 chmod 777 /data/mycontainers/
## 创建docker-compose.yml文件
mkdir -p /usr/docker-compose-kafka
cd /usr/docker-compose-kafka
vim docker-compose.yml
第三步:在创建的docker-compose.yml里写入以下内容
version: "3"
services:
kafka1:
image: 'bitnami/kafka:3.9'
network_mode: mynetwork
container_name: kafka11
user: root
ports:
- 9192:9092
- 9193:9093
environment:
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_KRAFT_CLUSTER_ID=jkUlhzQmQkic54LMxrB1oV
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka11:9093,2@kafka22:9093,3@kafka33:9093
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://youip:9192
- KAFKA_CFG_NODE_ID=1
volumes:
- /data/mycontainers/kafka1/kafka/kraft:/bitnami/kafka
kafka2:
image: 'bitnami/kafka:3.9'
network_mode: mynetwork
container_name: kafka22
user: root
ports:
- 9292:9092
- 9293:9093
environment:
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_KRAFT_CLUSTER_ID=jkUlhzQmQkic54LMxrB1oV
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka11:9093,2@kafka22:9093,3@kafka33:9093
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://youip:9292
- KAFKA_CFG_NODE_ID=2
volumes:
- /data/mycontainers/kafka2/kafka/kraft:/bitnami/kafka
kafka3:
image: 'bitnami/kafka:3.9'
network_mode: mynetwork
container_name: kafka33
user: root
ports:
- 9392:9092
- 9393:9093
environment:
- KAFKA_ENABLE_KRAFT=yes
- KAFKA_CFG_PROCESS_ROLES=broker,controller
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_KRAFT_CLUSTER_ID=jkUlhzQmQkic54LMxrB1oV
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka11:9093,2@kafka22:9093,3@kafka33:9093
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://youip:9392
- KAFKA_CFG_NODE_ID=3
volumes:
- /data/mycontainers/kafka3/kafka/kraft:/bitnami/kafka
**特别说明以下**
注意:修改youid为服务器的宿主机IP
volume的挂载内容可以自己选择;
如果有多台ECS,可以额外添加以下配置:
extra_hosts:
- "kafka1:云服务器IP"
- "kafka2:云服务器IP"
- "kafka3:云服务器IP"
PS:最新版以下内容搭建kafka集群必不可少:
##集群唯一ID(生成22字节的UUID,用我的也可以)
## 也可以进入到容器直接生成
kafka-storage.sh random-uuid
KAFKA_KRAFT_CLUSTER_ID=jkUlhzQmQkic54LMxrB1oV
KAFKA_CFG_NODE_ID=1
## 检查docker日志是否报错
docker logs kafka11
第四步:把镜像启动为容器
cd /usr/docker-compose-kafka
docker-compose up -d
## 或者 docker-compose -f docker-compose.yml up
## 查看日志是否报错
docker logs kafka11
## 如果出现错误删除容器,重新开始!
docker-compose down
**若出现以下错误是由于旧版使用KAFKA_BROKER_ID,而新版本使用KAFKA_CFG_NODE_ID,并且新版本不再强依赖于zookeeper而是通过内部灵活地集成KRaft;
ERROR ==> KRaft mode requires an unique node.id, please set the environment variable KAFKA_CFG_NODE_ID
**若出现以下内容则成功!
Picked up JAVA_TOOL_OPTIONS:
Formatting metadata directory /bitnami/kafka/data with metadata.version 3.9-IV0.
kafka 13:08:30.79 INFO ==> ** Kafka setup finished! **
kafka 13:08:30.80 INFO ==> ** Starting Kafka **
第五步:测试生产者与消费者的消息传输
## 进入到容器
docker exec -it kafka1 /bin/bash
## 创建一个demo的topic
kafka-topics.sh --create --topic demo --partitions 3 --replication-factor 3 --bootstrap-server kafka11:9092,kafka22:9092,kafka33:9092
## 查看所有topic
kafka-topics.sh --bootstrap-server kafka11:9092 --list
## 查看完整消息
/kafka-topics.sh --describe --topic demo --bootstrap-server kafka11:9092, kafka22:9092, kafka33:9092
## 创造一个消费者
kafka-console-producer.sh --bootstrap-server kafka11:9092 --topic demo
## 创造一个生产者
kafka-console-consumer.sh --bootstrap-server kafka11:9092 --topic demo
## 另外起开一个同样的控制台
## 验证消息交换成功
## 控制台1
root@bb68f22d1b29:/# kafka-console-producer.sh --bootstrap-server kafka11:9092 --topic demo
>hello
>sucee^H^H^H
>nihao
>sucessful
## 控制台2
root@bb68f22d1b29:/# kafka-console-consumer.sh --bootstrap-server kafka11:9092 --topic demo
hello
sucee
nihao
sucessful
PS:如果大家还有其他问题可以关注留言哦!
3223

被折叠的 条评论
为什么被折叠?



