KafKa 集群【docker compose】

文章目录

主机准备

IP controller id broker id
192.168.142.157 1 5
192.168.142.156 2 6
192.168.142.155 3 7
192.168.142.158 4 8

部署

创建文件夹

复制代码
mkdir -p /docker/kafka/{data,data1,data2}

chmod 777 -R {data,data1,data2}

编辑 docker-compose.yml

controller

docker-compose.yml

复制代码
services:
  controller:
    image: bitnami/kafka:3.8.0
    container_name: controller
    network_mode: host
    restart: always
    volumes:
      - /docker/kafka/data:/data
      - /etc/localtime:/etc/localtime:ro
    environment:
      KAFKA_CFG_NODE_ID: 1
      KAFKA_CFG_PROCESS_ROLES: controller
      KAFKA_CFG_LISTENERS: CONTROLLER://192.168.142.157:9093
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@192.168.142.157:9093,2@192.168.142.156:9093,3@192.168.142.155:9093,4@192.168.142.158:9093
      KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_CFG_LOG_DIRS: /data

broker

复制代码
image: bitnami/kafka:3.8.0
    container_name: broker
    network_mode: host
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /docker/kafka/data1:/data1
      - /docker/kafka/data2:/data2
    environment:
      KAFKA_CFG_NODE_ID: 5
      KAFKA_CFG_PROCESS_ROLES: broker
      KAFKA_CFG_LISTENERS: PLAINTEXT://192.168.142.157:9092
      KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://192.168.142.157:9092
      KAFKA_CFG_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@192.168.142.157:9093,2@192.168.142.156:9093,3@192.168.142.155:9093,4@192.168.142.158:9093
      KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_CFG_LOG_DIRS: "/data1,/data2"

所有的主机这一段基本都是一样的 只有 id 不同,id 可以根据上面表格进行修改

生成cluster_id

复制代码
root@master:/docker/kafka# docker run -it --rm bitnami/kafka:3.8.0 kafka-storage.sh random-uuid
kafka 06:43:36.79 INFO  ==>
kafka 06:43:36.80 INFO  ==> Welcome to the Bitnami kafka container
kafka 06:43:36.80 INFO  ==> Subscribe to project updates by watching https://github.com/bitnami/containers
kafka 06:43:36.80 INFO  ==> Submit issues and feature requests at https://github.com/bitnami/containers/issues
kafka 06:43:36.80 INFO  ==> Upgrade to Tanzu Application Catalog for production environments to access custom-configured and pre-packaged software components. Gain enhanced features, including Software Bill of Materials (SBOM), CVE scan result reports, and VEX documents. To learn more, visit https://bitnami.com/enterprise
kafka 06:43:36.80 INFO  ==>

PavLImfXSqaOOdrMgq1teA

拿到 id

PavLImfXSqaOOdrMgq1teA

新增到 docker-compose.yml 文件中

一篇完整的 docker-compose.yml 文件

复制代码
services:
  controller:
    image: bitnami/kafka:3.8.0
    container_name: controller
    network_mode: host
    restart: always
    volumes:
      - /docker/kafka/data:/data
      - /etc/localtime:/etc/localtime:ro
    environment:
      KAFKA_CFG_NODE_ID: 1
      KAFKA_CFG_PROCESS_ROLES: controller
      KAFKA_CFG_LISTENERS: CONTROLLER://192.168.142.157:9093
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@192.168.142.157:9093,2@192.168.142.156:9093,3@192.168.142.155:9093,4@192.168.142.158:9093
      KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_CFG_LOG_DIRS: /data
      KAFKA_KRAFT_CLUSTER_ID: PavLImfXSqaOOdrMgq1teA
  broker:
    image: bitnami/kafka:3.8.0
    container_name: broker
    network_mode: host
    restart: always
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /docker/kafka/data1:/data1
      - /docker/kafka/data2:/data2
    environment:
      KAFKA_CFG_NODE_ID: 5
      KAFKA_CFG_PROCESS_ROLES: broker
      KAFKA_CFG_LISTENERS: PLAINTEXT://192.168.142.157:9092
      KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://192.168.142.157:9092
      KAFKA_CFG_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@192.168.142.157:9093,2@192.168.142.156:9093,3@192.168.142.155:9093,4@192.168.142.158:9093
      KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_CFG_LOG_DIRS: "/data1,/data2"
      KAFKA_KRAFT_CLUSTER_ID: PavLImfXSqaOOdrMgq1teA

启动

复制代码
docker compose up -d

查看启动状态

复制代码
docker ps -a | grep Up | wc -l
2

查看集群状态

使用 kafka-ui 查看

拉取 kafka-ui

只需要在一台主机上部署 ui 就可以了

复制代码
docker run -d -p 8080:8080 -e DYNAMIC_CONFIG_ENABLED=true provectuslabs/kafka-ui:v0.7.1 

通过 ip + 8080 端口访问

添加集群


查看集群状态

使用命令行查看

复制代码
root@master:/docker/kafka# docker exec -it broker ./opt/bitnami/kafka/bin/kafka-metadata-quorum.sh --bootstrap-controller 192.168.142.157:9093,192.168.142.156:9093,192.168.142.155:9093,192.168.142.158:9093 describe --status
ClusterId:              PavLImfXSqaOOdrMgq1teA
LeaderId:               1
LeaderEpoch:            22
HighWatermark:          7695
MaxFollowerLag:         0
MaxFollowerLagTimeMs:   0
CurrentVoters:          [1,2,3,4]
CurrentObservers:       [5,6,7,8]

到此集群搭建完成

配置讲解

controller

参数 解释
KAFKA_CFG_NODE_ID 节点 id
KAFKA_CFG_PROCESS_ROLES 节点角色
KAFKA_CFG_LISTENERS 节点监听的 ip 和端口,并且标记为 controller
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP 定义不同监听器使用的加密协议
KAFKA_CFG_CONTROLLER_LISTENER_NAMES 控制器(Controller)用于接收来自其他控制器节点和 broker 节点请求的监听器(Listener)的名称
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS 添加集群节点
KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS 当一个新的消费者加入到一个空的消费组时,协调者(Coordinator)将延迟多长时间再开始重新平衡(Rebalance)的过程
KAFKA_CFG_LOG_DIRS 日志目录
KAFKA_KRAFT_CLUSTER_ID 集群 id

broker

参数 解释
KAFKA_CFG_NODE_ID 节点 id
KAFKA_CFG_PROCESS_ROLES 节点角色
KAFKA_CFG_LISTENERS 节点监听的 ip 和端口,并且标记为 broker
KAFKA_CFG_INTER_BROKER_LISTENER_NAME 集群中 broker 之间通信所使用的监听器名称
KAFKA_CFG_CONTROLLER_LISTENER_NAMES 监听器的名称
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP 定义不同监听器使用的加密协议
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS 添加集群节点
KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS 当一个新的消费者加入到一个空的消费组时,协调者(Coordinator)将延迟多长时间再开始重新平衡(Rebalance)的过程
KAFKA_CFG_LOG_DIRS 日志目录
KAFKA_KRAFT_CLUSTER_ID 集群 id
相关推荐
SunnyRivers5 天前
LangChain中间件详解
中间件·langchain
金刚猿5 天前
06_虚拟机中间件部署_xxl-job 部署
中间件·xxl-job·xxl-job-admin
Loo国昌7 天前
【AI应用开发实战】Guardrail风险控制中间件:Agent系统的安全防线
人工智能·python·安全·自然语言处理·中间件·prompt
键盘鼓手苏苏7 天前
Flutter for OpenHarmony: Flutter 三方库 ntp 精准同步鸿蒙设备系统时间(分布式协同授时利器)
android·分布式·算法·flutter·华为·中间件·harmonyos
Coder_Boy_7 天前
Java后端核心技术体系全解析(个人总结)
java·开发语言·spring boot·分布式·spring cloud·中间件
CN-David8 天前
CentOS搭建Mycat中间件
linux·mysql·中间件·centos·mariadb
三水不滴9 天前
消息队列消费性能优化:批量消费 + 手动 ACK 提升吞吐量
经验分享·笔记·中间件·性能优化
nix.gnehc9 天前
Go进阶攻坚+专家深耕级学习清单|聚焦高并发、高性能中间件/底层框架开发(Java开发者专属)
学习·中间件·golang
金刚猿10 天前
05_虚拟机中间件部署_ubuntu 系统 安装 Redis 7.0.15
redis·ubuntu·中间件
GEM的左耳返10 天前
Java面试深度剖析:从JVM到云原生的技术演进
jvm·spring boot·云原生·中间件·java面试·分布式架构·ai技术