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

我如何控制新增的节点是 leader 还是follower呢?

目录
  • 背景和价值
      • 一、新增节点时的关键配置
      • 二、通过分区重分配让新增节点成为更多 Leader
        • 1. 为现有主题新增分区,并优先分配到新增节点
        • 2. 重新分配原有分区的副本,让新节点成为 Leader
      • 三、确保新节点稳定成为 Leader 的关键设置
      • 总结
  • xxx
      • 一、新增节点时的关键配置
      • 二、通过分区重分配让新增节点成为更多 Leader
        • 1. 为现有主题新增分区,并优先分配到新增节点
        • 2. 重新分配原有分区的副本,让新节点成为 Leader
      • 三、确保新节点稳定成为 Leader 的关键设置
      • 总结
  • 参考资料

背景和价值

在 Kafka 中,不存在固定的“1 个 Leader 节点管理所有分区”的架构,而是每个分区独立选举 Leader(每个分区的 Leader 可以分布在不同节点上)。你的需求本质上是希望新增的 3 个节点能承担更多分区的 Leader 角色,形成“负载均衡的多 Leader 分布”,而非仅作为原有 Leader 的 Follower。

要实现这一目标,核心是通过分区副本分配策略Leader 选举机制,让新增节点成为更多分区的 Leader,具体操作如下:

一、新增节点时的关键配置

确保新增节点与原有节点地位平等(均为“可参与 Leader 选举的节点”):

  1. 配置新增节点为“全能节点”(KRaft 模式):

    # 新增节点的 server.properties
    process.roles=controller,broker  # 同时作为控制器和消息节点(可参与 Leader 选举)
    broker.id=3  # 4、5(与原有节点 ID 不重复)
    controller.quorum.voters=0@old1:9093,1@old2:9093,2@old3:9093,3@new1:9093,4@new2:9093,5@new3:9093  # 包含所有节点
    

    (若使用 ZooKeeper 模式,无需配置 controller 参数,但需保证新增节点能正常连接 ZooKeeper)

  2. 避免“节点角色隔离”
    Kafka 不支持将节点划分为“独立的 Leader 组”和“Follower 组”,但可通过副本分配让新增节点承担更多 Leader 职责。

二、通过分区重分配让新增节点成为更多 Leader

1. 为现有主题新增分区,并优先分配到新增节点

当原有分区数量不足时,新增分区并指定副本分布,让新增节点成为这些分区的首选 Leader(Preferred Leader):

# 创建一个分区分配计划文件(例如 add_partitions.json)
{"version": 1,"partitions": [{"topic": "your_topic", "partition": 3, "replicas": [3,0,1]},  # 新增分区 3,首选 Leader 为新节点 3{"topic": "your_topic", "partition": 4, "replicas": [4,1,2]},  # 新增分区 4,首选 Leader 为新节点 4{"topic": "your_topic", "partition": 5, "replicas": [5,2,0]}   # 新增分区 5,首选 Leader 为新节点 5]
}# 执行分区新增
kafka-topics.sh --bootstrap-server old1:9092 \--alter \--topic your_topic \--partitions 6  # 假设原有 3 个分区,新增到 6 个# 应用自定义副本分配(让新增分区的首选 Leader 为新节点)
kafka-reassign-partitions.sh --bootstrap-server old1:9092 \--execute \--reassignment-json-file add_partitions.json
  • 上述配置中,replicas 列表的第一个节点即为首选 Leader,新增分区的 Leader 会优先落在新节点 3、4、5 上。

2. 重新分配原有分区的副本,让新节点成为 Leader

对于已有的旧分区,通过重分配使其副本包含新节点,并触发 Leader 重选举,让新节点成为 Leader:

# 1. 生成分区重分配计划(包含原有分区)
# 创建 topics.json 指定需要重分配的主题
{"version": 1,"topics": [{"topic": "your_topic"}]
}# 生成重分配建议(指定包含新节点 ID 3、4、5)
kafka-reassign-partitions.sh --bootstrap-server old1:9092 \--generate \--topics-to-move-json-file topics.json \--broker-list "0,1,2,3,4,5"  # 包含所有节点# 2. 编辑生成的计划,手动调整副本分配(示例):
# 将原有分区 0 的副本改为 [3,0,1](新节点 3 作为首选 Leader)
# 将原有分区 1 的副本改为 [4,1,2](新节点 4 作为首选 Leader)
# 将原有分区 2 的副本改为 [5,2,0](新节点 5 作为首选 Leader)# 3. 执行重分配
kafka-reassign-partitions.sh --bootstrap-server old1:9092 \--execute \--reassignment-json-file adjusted_plan.json# 4. 触发 Leader 重选举(让新节点成为首选 Leader)
kafka-leader-election.sh --bootstrap-server old1:9092 \--topic your_topic \--all-partitions \--election-type preferred

三、确保新节点稳定成为 Leader 的关键设置

  1. 禁止非 ISR 节点成为 Leader
    在主题配置中关闭 unclean.leader.election.enable(默认 false),确保只有同步正常的节点(新节点需尽快进入 ISR)才能成为 Leader:

    kafka-configs.sh --bootstrap-server old1:9092 \--alter \--topic your_topic \--add-config unclean.leader.election.enable=false
    
  2. 平衡控制器节点分布
    在 KRaft 模式中,确保新增节点是控制器节点(process.roles 包含 controller),使其有机会成为集群控制器 Leader(负责管理分区 Leader 选举),间接提升成为分区 Leader 的概率。

  3. 监控 Leader 分布
    通过命令查看各节点的 Leader 数量,验证是否均衡:

    # 查看主题的分区 Leader 分布
    kafka-topics.sh --bootstrap-server old1:9092 \--describe \--topic your_topic
    

    理想状态:6 个分区的 Leader 平均分布在 6 个节点上(或新节点承担至少 3 个 Leader)。

总结

Kafka 不支持“独立的 Leader 组”,但通过以下操作可实现新增节点承担更多 Leader 角色:

  1. 新增分区时,将新节点设为首选 Leader;
  2. 重分配旧分区副本,让新节点加入并触发 Leader 重选举;
  3. 确保新节点进入 ISR 列表,具备 Leader 资格。

最终效果:整个集群的 6 个节点会分散承担不同分区的 Leader 角色(例如每个节点承担 1-2 个分区的 Leader),实现写并发负载的均衡扩展,而非“1 个 Leader 带 5 个 Follower”的集中式架构。

xxx

在 Kafka 中,不存在固定的“1 个 Leader 节点管理所有分区”的架构,而是每个分区独立选举 Leader(每个分区的 Leader 可以分布在不同节点上)。你的需求本质上是希望新增的 3 个节点能承担更多分区的 Leader 角色,形成“负载均衡的多 Leader 分布”,而非仅作为原有 Leader 的 Follower。

要实现这一目标,核心是通过分区副本分配策略Leader 选举机制,让新增节点成为更多分区的 Leader,具体操作如下:

一、新增节点时的关键配置

确保新增节点与原有节点地位平等(均为“可参与 Leader 选举的节点”):

  1. 配置新增节点为“全能节点”(KRaft 模式):

    # 新增节点的 server.properties
    process.roles=controller,broker  # 同时作为控制器和消息节点(可参与 Leader 选举)
    broker.id=3  # 4、5(与原有节点 ID 不重复)
    controller.quorum.voters=0@old1:9093,1@old2:9093,2@old3:9093,3@new1:9093,4@new2:9093,5@new3:9093  # 包含所有节点
    

    (若使用 ZooKeeper 模式,无需配置 controller 参数,但需保证新增节点能正常连接 ZooKeeper)

  2. 避免“节点角色隔离”
    Kafka 不支持将节点划分为“独立的 Leader 组”和“Follower 组”,但可通过副本分配让新增节点承担更多 Leader 职责。

二、通过分区重分配让新增节点成为更多 Leader

1. 为现有主题新增分区,并优先分配到新增节点

当原有分区数量不足时,新增分区并指定副本分布,让新增节点成为这些分区的首选 Leader(Preferred Leader):

# 创建一个分区分配计划文件(例如 add_partitions.json)
{"version": 1,"partitions": [{"topic": "your_topic", "partition": 3, "replicas": [3,0,1]},  # 新增分区 3,首选 Leader 为新节点 3{"topic": "your_topic", "partition": 4, "replicas": [4,1,2]},  # 新增分区 4,首选 Leader 为新节点 4{"topic": "your_topic", "partition": 5, "replicas": [5,2,0]}   # 新增分区 5,首选 Leader 为新节点 5]
}# 执行分区新增
kafka-topics.sh --bootstrap-server old1:9092 \--alter \--topic your_topic \--partitions 6  # 假设原有 3 个分区,新增到 6 个# 应用自定义副本分配(让新增分区的首选 Leader 为新节点)
kafka-reassign-partitions.sh --bootstrap-server old1:9092 \--execute \--reassignment-json-file add_partitions.json
  • 上述配置中,replicas 列表的第一个节点即为首选 Leader,新增分区的 Leader 会优先落在新节点 3、4、5 上。

2. 重新分配原有分区的副本,让新节点成为 Leader

对于已有的旧分区,通过重分配使其副本包含新节点,并触发 Leader 重选举,让新节点成为 Leader:

# 1. 生成分区重分配计划(包含原有分区)
# 创建 topics.json 指定需要重分配的主题
{"version": 1,"topics": [{"topic": "your_topic"}]
}# 生成重分配建议(指定包含新节点 ID 3、4、5)
kafka-reassign-partitions.sh --bootstrap-server old1:9092 \--generate \--topics-to-move-json-file topics.json \--broker-list "0,1,2,3,4,5"  # 包含所有节点# 2. 编辑生成的计划,手动调整副本分配(示例):
# 将原有分区 0 的副本改为 [3,0,1](新节点 3 作为首选 Leader)
# 将原有分区 1 的副本改为 [4,1,2](新节点 4 作为首选 Leader)
# 将原有分区 2 的副本改为 [5,2,0](新节点 5 作为首选 Leader)# 3. 执行重分配
kafka-reassign-partitions.sh --bootstrap-server old1:9092 \--execute \--reassignment-json-file adjusted_plan.json# 4. 触发 Leader 重选举(让新节点成为首选 Leader)
kafka-leader-election.sh --bootstrap-server old1:9092 \--topic your_topic \--all-partitions \--election-type preferred

三、确保新节点稳定成为 Leader 的关键设置

  1. 禁止非 ISR 节点成为 Leader
    在主题配置中关闭 unclean.leader.election.enable(默认 false),确保只有同步正常的节点(新节点需尽快进入 ISR)才能成为 Leader:

    kafka-configs.sh --bootstrap-server old1:9092 \--alter \--topic your_topic \--add-config unclean.leader.election.enable=false
    
  2. 平衡控制器节点分布
    在 KRaft 模式中,确保新增节点是控制器节点(process.roles 包含 controller),使其有机会成为集群控制器 Leader(负责管理分区 Leader 选举),间接提升成为分区 Leader 的概率。

  3. 监控 Leader 分布
    通过命令查看各节点的 Leader 数量,验证是否均衡:

    # 查看主题的分区 Leader 分布
    kafka-topics.sh --bootstrap-server old1:9092 \--describe \--topic your_topic
    

    理想状态:6 个分区的 Leader 平均分布在 6 个节点上(或新节点承担至少 3 个 Leader)。

总结

Kafka 不支持“独立的 Leader 组”,但通过以下操作可实现新增节点承担更多 Leader 角色:

  1. 新增分区时,将新节点设为首选 Leader;
  2. 重分配旧分区副本,让新节点加入并触发 Leader 重选举;
  3. 确保新节点进入 ISR 列表,具备 Leader 资格。

最终效果:整个集群的 6 个节点会分散承担不同分区的 Leader 角色(例如每个节点承担 1-2 个分区的 Leader),实现写并发负载的均衡扩展,而非“1 个 Leader 带 5 个 Follower”的集中式架构。

参考资料

http://www.hskmm.com/?act=detail&tid=28512

相关文章:

  • Nuxt3项目Warn:Browserslist: browsers data (caniuse-lite) is 6 months old.
  • 2025 年全屋定制 / 高端 / 装修收纳设计 / 不锈钢橱柜 / 别墅 / 大平层装修公司推荐:苏州伍德家居与百能家居的优质定制解决方案解析
  • 1_数组
  • SAS重要证明结论
  • 2025 年蒸汽发生器厂家最新推荐排行榜:含 800KG 燃气 / 超低氮冷凝 / 400KG 燃气等多类型设备企业优选指南
  • 基于MATLAB的遗传算法(GA)和CPLEX两种方法解决TSP问题
  • 创建数字遗嘱:为亲人留下数字足迹指南
  • 全网首发/Qt结合ffmpeg实现rist推拉流/可信赖的互联网流媒体协议/跨平台支持各个系统
  • 2025 年最新推荐压缩机厂家排行榜:聚焦医药 / 医疗 / 食品 / 冷链 / 工业领域优质企业及核心优势盘点
  • 2025 年灌装机厂家最新推荐权威榜单:聚焦全自动液体定量灌装设备,精选饮用水 / 纯净水 / 矿泉水灌装领域优质企业
  • 2025 年灌装生产线厂家最新推荐排行榜:覆盖饮料 / 矿泉水 / 纯净水 / 桶装水 / 全自动生产线,助力企业精准选购优质设备权威榜单
  • 改了 Nacos 一行配置,搞崩线上支付系统!
  • Vue 创建项目的几种方式
  • 推荐系统评估、偏见与算法解析
  • 从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win强大的系统)
  • Gitee Insight领跑DevSecOps赛道:2025研发效能工具全景评测
  • 最小二乘法的直线拟合
  • Vue3 集成 VueRouter
  • 2025 年车床生产厂家最新推荐排行榜:涵盖数控 / 卧式 / 斜床身 / 重型等多类型设备,助力企业精准选购优质车床品牌
  • 2025 最新球墨铸铁管件厂商推荐排行榜权威发布,市政 / 给排水 / 消防用管件优选品牌深度解析
  • 2025 年加工中心厂商最新推荐排行榜权威发布,涵盖立式 / 卧式 / 龙门 / 四轴 / 五轴等机型,助力采购方精准筛选实力厂商
  • CH585在MACOS系统中协商BLE连接间隔至7.5ms
  • 2025 年磨床厂家最新推荐排行榜:平面磨床 / 外圆磨床 / 数控磨床等优质设备品牌深度解析与核心竞争力测评
  • python实现提取iso中的文件(支持多平台)
  • 2025 年最新推荐球墨铸铁管厂家排行榜:涵盖自来水 / 污水 / 消防等多场景适用优质品牌权威推荐
  • CopyOnWriteArrayList 的故事--一起看看java原生的读写分离
  • OSI模型-笔记
  • Docker概念
  • 痞子衡嵌入式:如果i.MXRT1xxx在Hab关闭时出现偶发性启动失败,请先检查JTAG电路
  • 2025 电缆绝缘材料生产厂家最新推荐榜单:品牌技术实力解析,爱普等企业领跑行业