2025版基于docker-compose部署kafka集群

最近项目中需要用到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:如果大家还有其他问题可以关注留言哦!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值