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-23
    目录

    一共有3个broker,一个topic有10个分区,副本数最大为3?分区又是怎么分布在3个broker上的?用的什么算法

    在包含 3 个 Broker 的 Kafka 集群中,一个 Topic 的分区分布和副本分配遵循特定的算法规则,以下是详细解析:


    # ⚙️ 一、副本数限制与分布逻辑

    1. 副本数上限

      • 副本数(Replication Factor)不能超过 Broker 数(此处最大为 3)。
      • 若副本数 > 3(如 4),Kafka 会报错,因无法为每个副本分配独立的 Broker。
    2. 副本分配目标
      Kafka 会均匀分散副本到所有 Broker 上,确保:

      • 每个分区的 Leader 副本分布在不同的 Broker(负载均衡)。
      • 同一分区的多个副本分散在不同 Broker(容错性)。

    # 🔢 二、分区分布算法

    Kafka 默认使用 Round-Robin(轮询)策略分配分区到 Broker。
    以 10 分区、3 Broker 为例:

    1. 分区分配过程:
      • 分区 0 → Broker 0
      • 分区 1 → Broker 1
      • 分区 2 → Broker 2
      • 分区 3 → Broker 0(轮询回到 Broker 0)
      • 依此类推,直到分配完 10 个分区。
    2. 结果分布示例:
      Broker 分配的分区编号(Leader)
      Broker0 0, 3, 6, 9
      Broker1 1, 4, 7
      Broker2 2, 5, 8

    ✅ 特点:

    • 分区数无法整除 Broker 数时,部分 Broker 可能多分配 1 个分区(如 Broker0 分配 4 个)。

    # 🔄 三、副本分配算法

    在分区 Leader 分配完成后,副本(Follower)按偏移量规则分配,确保与 Leader 不在同一 Broker。
    分配逻辑:

    1. 首个副本(Leader):通过轮询确定位置(如分区 0 的 Leader 在 Broker0)。
    2. 后续副本(Follower):
      • 第 j 个副本位置 = (Leader位置 + j) % Broker总数
      • 例如分区 0(Leader 在 Broker0)的副本分配:
        • 副本 1(Follower1)→ (0 + 1) % 3 = 1 → Broker1
        • 副本 2(Follower2)→ (0 + 2) % 3 = 2 → Broker2

    # 📊 完整分配表示例(分区 0~2)

    分区 Leader 副本位置 Follower1 位置 Follower2 位置
    0 Broker0 Broker1 Broker2
    1 Broker1 Broker2 Broker0
    2 Broker2 Broker0 Broker1

    💡 关键点:

    • 每个 Broker 既是某些分区的 Leader,又是其他分区的 Follower(负载均衡)。
    • 同一分区的多个副本绝不共存于同一 Broker(容错性)。

    # ⚠️ 四、算法优化与注意事项

    1. 机架感知策略(Rack Awareness)

      • 若 Broker 跨机架部署,可配置 broker.rack 参数,确保同一分区的副本分布在不同机架(避免机架故障导致数据丢失)。
      • 未启用时:副本仅按 Broker ID 轮询分配。
    2. 分区扩容限制

      • 分区数可增加(如从 10 扩容到 15),但不可减少。
      • 扩容后新分区按轮询重新分配,旧分区位置不变。
    3. 生产环境建议

      • 副本数:固定为 3(容忍 1 个 Broker 故障)。
      • 监控命令:查看分区分布详情:
        kafka-topics.sh --describe --topic your-topic --bootstrap-server localhost:9092
        
        1

    # 💎 总结

    • 副本数上限:受限于 Broker 数量(3 Broker → 最大副本数=3)。
    • 分区分布:Round-Robin 轮询分配 Leader 到各 Broker。
    • 副本分配:Follower 按 (Leader位置 + j) % Broker数 分散,避免单点集中。
    • 设计目标:通过均匀分布 Leader 和隔离副本,实现负载均衡和高可用性。
      实际部署时,可通过机架感知策略进一步优化容灾能力。
    编辑 (opens new window)
    上次更新: 2025/06/24, 00:41:57
    一个topic一般创建几个分区,几个副本数,只有三个broker的话又是怎么分布的
    副本数和分区数什么区别

    ← 一个topic一般创建几个分区,几个副本数,只有三个broker的话又是怎么分布的 副本数和分区数什么区别→

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