当前位置: 首页 > news >正文

Docker 运行 Kafka 4.0+

文章目录

  • 一、单节点Docker 运行 Kafka 4.0+
    • docker run 单机快速(测试用)
    • docker‑compose 完整模板(单机KRaft,4.0.0)
    • 进入容器测试命令
    • SpringBoot application.yml 连接配置
    • 重点注意事项
    • 搭配kafka‑ui可视化(扩展compose片段)
  • 二、Kafka4.0.x KRaft 三节点高可用集群(Docker Compose)
    • docker‑compose.yml
    • 启动步骤
    • SpringBoot 连接配置
    • 集群测试命令
    • 关键特性说明
    • 高频踩坑
    • 停止&清理

一、单节点Docker 运行 Kafka 4.0+

Kafka 4.0彻底删除 Zookeeper 模式,只支持 KRaft,不再支持 zk。
官方镜像:apache/kafka,没有 zk 相关任何配置。

docker run 单机快速(测试用)

dockerrun-d\--namekafka4\--restartalways\-p9092:9092\-p9093:9093\-v/data/kafka4/kraft-data:/tmp/kraft-combined-logs\-eKAFKA_NODE_ID=1\-eKAFKA_PROCESS_ROLES=broker,controller\-eKAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093\-eKAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.100:9092\-eKAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER\-eKAFKA_CONTROLLER_QUORUM_VOTERS=1@kafka4:9093\-eKAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1\apache/kafka:4.0.0

⚠️ 修改192.168.1.100为你的宿主机真实IP,SpringBoot业务连接用这个IP:9092。

docker‑compose 完整模板(单机KRaft,4.0.0)

version:'3.8'services:kafka:image:apache/kafka:4.0.0container_name:kafka4restart:alwaysports:-"9092:9092"-"9093:9093"volumes:-./kraft-data:/tmp/kraft-combined-logsenvironment:KAFKA_NODE_ID:1KAFKA_PROCESS_ROLES:'broker,controller'KAFKA_LISTENERS:'PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093'KAFKA_ADVERTISED_LISTENERS:PLAINTEXT://192.168.1.100:9092KAFKA_CONTROLLER_LISTENER_NAMES:'CONTROLLER'KAFKA_CONTROLLER_QUORUM_VOTERS:'1@kafka:9093'KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:1KAFKA_LOG_RETENTION_HOURS:72KAFKA_LOG_DIRS:'/tmp/kraft-combined-logs'

启动

docker-composeup-d

进入容器测试命令

# 进入容器dockerexec-itkafka4bash# 创建topickafka-topics.sh--create--topicdemo --bootstrap-server127.0.0.1:9092--partitions2--replication-factor1# 列表kafka-topics.sh--list--bootstrap-server127.0.0.1:9092# 生产者kafka-console-producer.sh--topicdemo --bootstrap-server127.0.0.1:9092# 消费者kafka-console-consumer.sh--topicdemo --bootstrap-server127.0.0.1:9092 --from-beginning# 查看kafka版本kafka-topics.sh--version

SpringBoot application.yml 连接配置

spring:kafka:bootstrap-servers:192.168.1.100:9092producer:key-serializer:org.apache.kafka.common.serialization.StringSerializervalue-serializer:org.apache.kafka.common.serialization.StringSerializerconsumer:key-deserializer:org.apache.kafka.common.serialization.StringDeserializervalue-deserializer:org.apache.kafka.common.serialization.StringDeserializer

重点注意事项

  1. Kafka4.x 完全没有Zookeeper,不要再写任何zk连接参数
  2. 镜像:apache/kafka:4.0.0,不要用confluentinc/cp‑kafka,cp还没有4.0大版本。
  3. 数据目录权限:挂载宿主机目录报权限拒绝
chmod-R777./kraft-data
  1. 升级提醒:旧的kafka3.x zookeeper集群不能直接升级到4.0
    • 3.x zk集群 → 先升级到3.5+/3.6+,执行迁移工具切换KRaft;迁移完成后,再升级到4.0。
    • 不能直接把zk的数据目录直接给kafka4使用,元数据格式完全不一样。
  2. 单机生产注意:单机同时做broker+controller,replication‑factor=1,不能高可用,仅测试/小规模使用;真正生产集群至少3节点controller。

搭配kafka‑ui可视化(扩展compose片段)

kafka-ui:image:provectuslabs/kafka-ui:latestcontainer_name:kafka-uirestart:alwaysports:-"8081:8080"environment:KAFKA_CLUSTERS_0_NAME:local‑kraft‑40KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS:kafka:9092

访问:http://宿主机IP:8081

二、Kafka4.0.x KRaft 三节点高可用集群(Docker Compose)

Kafka4.0+彻底移除Zookeeper,仅KRaft模式
3个节点全部同时充当broker + controller,控制器仲裁quorum=3,挂掉任意1台集群依然正常工作,满足生产高可用基础条件。
注意:下面是单机docker模拟3节点集群(同一台宿主机),用于开发测试;真正生产要部署在三台不同物理服务器

docker‑compose.yml

version:"3.8"services:kafka‑1:image:apache/kafka:4.0.0container_name:kafka‑1restart:alwaysports:-"9092:9092"# broker端口对外-"9093:9093"# controller内部仲裁端口volumes:-./data‑1:/tmp/kraft‑combined‑logsenvironment:KAFKA_NODE_ID:1KAFKA_PROCESS_ROLES:"broker,controller"KAFKA_LISTENERS:"PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093"# 👉 修改为你的宿主机IP,外部业务程序连接KAFKA_ADVERTISED_LISTENERS:"PLAINTEXT://192.168.1.100:9092"KAFKA_CONTROLLER_LISTENER_NAMES:"CONTROLLER"KAFKA_CONTROLLER_QUORUM_VOTERS:"1@kafka‑1:9093,2@kafka‑2:9093,3@kafka‑3:9093"KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:3KAFKA_DEFAULT_REPLICATION_FACTOR:3KAFKA_LOG_DIRS:"/tmp/kraft‑combined‑logs"kafka‑2:image:apache/kafka:4.0.0container_name:kafka‑2restart:alwaysports:-"9094:9092"-"9095:9093"volumes:-./data‑2:/tmp/kraft‑combined‑logsenvironment:KAFKA_NODE_ID:2KAFKA_PROCESS_ROLES:"broker,controller"KAFKA_LISTENERS:"PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093"KAFKA_ADVERTISED_LISTENERS:"PLAINTEXT://192.168.1.100:9094"KAFKA_CONTROLLER_LISTENER_NAMES:"CONTROLLER"KAFKA_CONTROLLER_QUORUM_VOTERS:"1@kafka‑1:9093,2@kafka‑2:9093,3@kafka‑3:9093"KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:3KAFKA_DEFAULT_REPLICATION_FACTOR:3KAFKA_LOG_DIRS:"/tmp/kraft‑combined‑logs"kafka‑3:image:apache/kafka:4.0.0container_name:kafka‑3restart:alwaysports:-"9096:9092"-"9097:9093"volumes:-./data‑3:/tmp/kraft‑combined‑logsenvironment:KAFKA_NODE_ID:3KAFKA_PROCESS_ROLES:"broker,controller"KAFKA_LISTENERS:"PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093"KAFKA_ADVERTISED_LISTENERS:"PLAINTEXT://192.168.1.100:9096"KAFKA_CONTROLLER_LISTENER_NAMES:"CONTROLLER"KAFKA_CONTROLLER_QUORUM_VOTERS:"1@kafka‑1:9093,2@kafka‑2:9093,3@kafka‑3:9093"KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:3KAFKA_DEFAULT_REPLICATION_FACTOR:3KAFKA_LOG_DIRS:"/tmp/kraft‑combined‑logs"kafka-ui:image:provectuslabs/kafka-ui:latestcontainer_name:kafka-uirestart:alwaysports:-"8081:8080"environment:KAFKA_CLUSTERS_0_NAME:kafka4‑3node‑kraftKAFKA_CLUSTERS_0_BOOTSTRAPSERVERS:kafka‑1:9092,kafka‑2:9092,kafka‑3:9092

启动步骤

# 创建数据目录mkdir-pdata‑1 data‑2 data‑3# 解决容器挂载目录权限问题chmod-R777data‑1 data‑2 data‑3# 启动集群docker-composeup-d# 查看容器状态docker-composeps

访问UI:http://宿主机IP:8081

SpringBoot 连接配置

spring:kafka:bootstrap-servers:192.168.1.100:9092,192.168.1.100:9094,192.168.1.100:9096producer:key-serializer:org.apache.kafka.common.serialization.StringSerializervalue-serializer:org.apache.kafka.common.serialization.StringSerializerconsumer:key-deserializer:org.apache.kafka.common.serialization.StringDeserializervalue-deserializer:org.apache.kafka.common.serialization.StringDeserializer

集群测试命令

# 进入kafka‑1容器dockerexec-itkafka‑1bash# 创建topic,3分区,3副本kafka-topics.sh--create--topictest3 --bootstrap-server127.0.0.1:9092--partitions3--replication-factor3# 查看topic详细信息kafka-topics.sh--describe--topictest3 --bootstrap-server127.0.0.1:9092# 查看集群版本kafka-topics.sh--version

关键特性说明

  1. 3个controller节点,quorum=3,挂掉任意一台,集群控制器依然正常工作;挂2台控制器集群元数据不可用。
  2. default.replication.factor=3,新建topic默认3副本。
  3. 同一台宿主机docker模拟仅用于开发测试;真正生产三台物理服务器部署:
    • 每台机器只跑一个kafka容器
    • KAFKA_CONTROLLER_QUORUM_VOTERS填写三台机器ip+controller端口
    • KAFKA_ADVERTISED_LISTENERS填写各自机器外网/内网IP

高频踩坑

  1. KAFKA_ADVERTISED_LISTENERS:必须填写宿主机真实内网IP,不能写127.0.0.1,否则外部业务连接失败。
  2. 容器内部之间通信,使用容器名kafka‑1:9093,不要用宿主机IP。
  3. 数据目录权限报错:chmod -R 777 data‑*
  4. replication‑factor不能大于broker节点数。
  5. 旧Zookeeper的kafka数据不能直接迁移到此集群,需要重新搭建或使用官方迁移工具。

停止&清理

# 停止集群docker-composedown# 彻底删除数据(测试重置集群用)rm-rfdata‑1 data‑2 data‑3mkdir-pdata‑1 data‑2 data‑3chmod-R777data‑1 data‑2 data‑3
http://www.jsqmd.com/news/1402638/

相关文章:

  • POC 正常文章-可分发
  • 中小企如何低成本做数据治理?数据治理专家实战经验有哪些?
  • 2026年8月大连消防维保检测灭火器充粉维修/大连消防维保检测隐患排查整改专业公司_连山安全产业集团(大连)有限公司 - 品牌宣传支持者
  • OpenClaw v2026.3.28:从工具到伙伴的AI Agent范式跃迁
  • 电商竞品分析接口实战指南:从数据采集到决策洞察的全链路方案
  • 从Demo到上线:大模型岗位到底在筛掉哪批人?
  • 基于Nemotron 3.5 Lightning与Agent API构建AI智能体应用实战指南
  • Linux运维进阶:高效命令组合与系统管理技巧
  • 论文降AI率怎么用才合规?靠谱工具选择全指南
  • Playwright如何成为多智能体平台的Web自动化核心技能
  • 口碑好的杭州园林绿化排名靠前的公司哪家好
  • 不写代码,用公众号智能回复+ima 做 24h 智能体 !
  • OpenAI API 与 Python SDK 实战指南:从环境配置到代码助手开发
  • 知漫剧如何把商品介绍生成短剧?操作步骤详解
  • 特朗普的孙女童声诵经典:一曲蒙学,让世界看见中国文明的厚重
  • 2026年8月花键环规/渐开线花键环规厂家精选榜_海盐卡思机械制造有限公司 - 品牌宣传支持者
  • 2026办公效率指南:四大在线表格工具深度横评与选型建议
  • 矩阵转置算子优化-利用padding 解决 bank conflict
  • 2026年8月西安美发理发店/陕西美发染发本地热门推荐_西安徐东美容美发服务有限公司 - 品牌宣传支持者
  • OpenClaw技能系统配置全解析:从架构设计到生产部署实战
  • OpenClaw版本更新与重新部署法,TopClaw一键完成保留全部已有配置
  • IntelliJ IDEA快捷键实战指南:从核心操作到自定义恢复
  • 蚂蚁集团Ling 3.0 Tiny模型解析:MoE架构实现轻量化大模型部署
  • 知漫剧小说转漫剧教程:从原文导入到视频成片
  • Kubernetes kubectl 命令完全指南:从入门到精通
  • 开源Verilog-PCIe核心库:从协议原理到FPGA高速接口实战
  • 车联网+AI一体化协同优化系统:架构设计与实践
  • 深入解析IEEE 754浮点数内存存储:从原理到实践与问题排查
  • IntelliJ IDEA中Spring Boot项目启动与调试全流程详解
  • 2026年8月无锡超轻帐篷/登山帐篷厂家深度推荐_无锡图橙户外用品有限公司 - 品牌宣传支持者