Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

    • Kafka的架构
    • docker搭建Kafka集群
      • spring关于kafka的最全配置
      • kafka分主副节点吗
      • kafka的 topic, key , 分区的关系,以及数量对应关系,以及默认值
      • spring项目是事先创建topic还是代码里创建
      • 一个topic一般创建几个分区,几个副本数,只有三个broker的话又是怎么分布的
      • 一共有3个broker,一个topic有10个分区,副本数最大为3?分区又是怎么分布在3个broker上的?用的什么算法
      • 副本数和分区数什么区别
      • 我还是不明白副本数,请画出具体的分布图,3个broker,某个topic10个分区
      • Leader+​​Follower = 副本数?
      • ​​ISR(In-Sync Replicas)是什么,最多有多少个,这个数量怎么得来的
      • 在 Spring Kafka 中发送消息
      • 向kafka中发送重复的数据会怎么样
      • send消息时,key有什么用?
    • 数据结构

    • 算法

    • OJ

    • 从道家哲学看计算机?
    • 后端
    • Kafka
    plantre
    2025-06-19
    目录

    docker搭建Kafka集群

    基于已有的三台物理机(10.143.143.101-103)和ZooKeeper集群,以下是通过Docker搭建Kafka集群的完整方案:


    # 一、部署架构设计

    1. 节点分配

      • 每台物理机部署一个Kafka Broker容器,组成3节点集群。
      • 使用host网络模式(性能最佳)或bridge模式(需端口映射)。
      • ZooKeeper集群复用现有环境,无需额外部署。
    2. 关键配置原则

      • KAFKA_BROKER_ID:每台机器唯一(如101/102/103)。
      • KAFKA_ADVERTISED_LISTENERS:必须设置为宿主机的真实IP(否则外部客户端无法连接)。
      • KAFKA_ZOOKEEPER_CONNECT:指向现有ZooKeeper集群地址(如zk1:2181,zk2:2181,zk3:2181)。

    # 二、单台机器部署步骤(以10.143.143.101为例)

    # 1. 拉取镜像

    docker pull wurstmeister/kafka
    
    1

    # 2. 启动Kafka容器

    docker run -d --name kafka101 \
      --network host \  # 推荐host模式避免端口映射问题
      -e KAFKA_BROKER_ID=101 \  # 与宿主机末三位一致
      -e KAFKA_ZOOKEEPER_CONNECT=10.143.143.101:2181,10.143.143.102:2181,10.143.143.103:2181 \  # 替换为实际ZK地址
      -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.143.143.101:9092 \  # 当前宿主机IP
      -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \  # 容器内监听所有IP
      -e KAFKA_LOG_DIRS=/kafka/logs \  # 日志目录
      -v /data/kafka/logs:/kafka/logs \  # 挂载日志目录持久化
      wurstmeister/kafka
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    参数说明:

    • KAFKA_BROKER_ID:集群内唯一标识(102/103机器分别设为102/103)。
    • KAFKA_ADVERTISED_LISTENERS:客户端使用的通信地址,必须为物理机IP。
    • 若ZooKeeper使用非2181端口,需调整连接字符串。

    # 3. 重复操作

    在102、103机器执行相同命令,仅修改以下参数:

    • --name kafka102 / kafka103
    • KAFKA_BROKER_ID=102 / 103
    • KAFKA_ADVERTISED_LISTENERS中的IP为当前宿主机IP。

    # 三、集群验证

    # 1. 创建测试Topic

    进入任意容器执行:

    docker exec -it kafka101 sh
    cd /opt/kafka/bin
    # 创建Topic(3分区、3副本)
    ./kafka-topics.sh --create \
      --bootstrap-server 10.143.143.101:9092 \
      --replication-factor 3 \
      --partitions 3 \
      --topic test
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 2. 查看Topic状态

    ./kafka-topics.sh --describe \
      --bootstrap-server 10.143.143.101:9092 \
      --topic test
    
    1
    2
    3

    预期输出:

    • Partition信息显示3个分区均匀分布在101/102/103节点。
    • Replicas显示每个分区有3个副本。

    # 3. 生产消费测试

    • 生产者(10.143.143.101):
      ./kafka-console-producer.sh \
        --broker-list 10.143.143.101:9092,10.143.143.102:9092,10.143.143.103:9092 \
        --topic test
      
      1
      2
      3
    • 消费者(10.143.143.102):
      ./kafka-console-consumer.sh \
        --bootstrap-server 10.143.143.101:9092,10.143.143.102:9092,10.143.143.103:9092 \
        --topic test \
        --from-beginning
      
      1
      2
      3
      4
      若生产者输入消息后消费者能实时接收,则集群工作正常。

    # 四、运维优化建议

    1. 数据持久化
      挂载宿主机目录存储日志(如-v /data/kafka:/kafka),避免容器重启数据丢失。

    2. 资源限制
      启动时添加--memory=2g --cpus=2限制容器资源,防止单节点过载。

    3. 监控方案

      • Kafka Manager:通过Docker部署可视化管控平台:
        kafka-manager:
          image: sheepkiller/kafka-manager
          ports: ["9000:9000"]
          environment: 
            ZK_HOSTS: "10.143.143.101:2181,10.143.143.102:2181,10.143.143.103:2181"
        
        1
        2
        3
        4
        5
    4. 安全加固

      • 生产环境启用SASL认证(参考的KAFKA_CFG_SASL_ENABLED_MECHANISMS)。
      • 限制ZooKeeper访问IP(如防火墙规则)。

    # 常见问题解决

    • Broker无法注册到ZooKeeper:
      检查KAFKA_ZOOKEEPER_CONNECT地址是否正确、网络是否互通。
    • 客户端连接超时:
      确认KAFKA_ADVERTISED_LISTENERS设置为物理机IP(非localhost)。
    • 数据未持久化:
      挂载目录后需确保容器用户有写权限(可添加--user root临时解决)。

    部署完成后,建议通过kafka-consumer-groups.sh验证集群负载均衡状态。如需更简化的管理,可改用Docker Compose编排(参考的yml模板)。

    编辑 (opens new window)
    上次更新: 2025/06/24, 00:41:57
    Kafka的架构
    spring关于kafka的最全配置

    ← Kafka的架构 spring关于kafka的最全配置→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式