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

kafka 各种选举过程

一、kafka 消费者组协调器 如何选举

Kafka 中的消费者组协调器(Group Coordinator)是通过以下步骤选举的:

  1. 分区映射

    • Kafka 使用一个特殊的内部主题 __consumer_offsets 来存储消费者组的元数据。该主题有多个分区,每个分区负责存储一部分消费者组的信息。
  2. 哈希分配

    • 每个消费者组的 ID(groupId)通过哈希函数映射到 __consumer_offsets 主题的一个特定分区。
  3. 分区领导者

    • 每个分区都有一个领导者(Leader),该领导者是 Kafka 集群中的一个 Broker。这个 Broker 就是负责管理该分区上所有消费者组的协调器。
  4. 协调器确定

    • 当一个消费者加入消费者组时,它会通过哈希函数找到对应的 __consumer_offsets 分区,然后找到该分区的领导者 Broker,这个 Broker 就是该消费者组的协调器。
  5. 元数据更新

    • 当消费者组的成员发生变化(如消费者加入或离开)时,协调器会更新 __consumer_offsets 主题中的元数据,并通知所有相关的消费者。

通过这种机制,Kafka 实现了消费者组协调器的分布式选举和管理,确保每个消费者组都有一个协调器来管理其成员关系和分区分配。

二、 kafka BrokerController 如何选举

Kafka 中的 Broker Controller 是通过 Zookeeper 进行选举的。具体步骤如下:

  1. 启动过程

    • 当一个 Kafka Broker 启动时,它会尝试在 Zookeeper 中创建一个临时的 /controller 节点。
    • 这个节点的创建是一个原子操作,只有一个 Broker 能够成功创建这个节点。
  2. 成功创建

    • 成功创建 /controller 节点的 Broker 就成为了 Controller。
    • 该 Broker 会在 /controller 节点中写入自己的 Broker ID,其他 Brokers 可以通过读取这个节点来知道当前的 Controller 是哪个 Broker。
  3. 监听机制

    • 其他 Brokers 会监听 /controller 节点的变化,以便在当前 Controller 失效时能够及时感知。
    • 如果当前的 Controller Broker 崩溃或失效,Zookeeper 会删除 /controller 节点,因为它是一个临时节点。
  4. 重新选举

    • /controller 节点被删除时,其他 Brokers 会再次尝试创建这个节点。
    • 其中一个 Broker 会成功创建并成为新的 Controller。

通过这种机制,Kafka 保证了在任何时刻只有一个 Broker 充当 Controller,并且能够在 Controller 失效时快速进行重新选举。

三、kafka 分区 leader 如何选举

Kafka 分区 Leader 的选举过程如下:

  1. 分区元数据

    • 每个分区都有一个副本集(Replica Set),包含一个 Leader 和多个 Follower。
    • 分区的元数据存储在 Zookeeper 中,包括所有副本的列表和当前的 Leader。
  2. 初始选举

    • 当 Kafka 集群启动时,Controller 会从 Zookeeper 中读取分区的元数据,并为每个分区选举一个 Leader。
    • 通常,副本列表中的第一个 Broker 会被选为 Leader。
  3. Leader 失效检测

    • Controller 通过心跳机制监控各个 Broker 的状态。
    • 如果检测到当前 Leader 失效(例如,Broker 崩溃或网络分区),Controller 会触发重新选举。
  4. 重新选举

    • Controller 会从剩余的副本中选择一个新的 Leader。
    • 选择标准通常是优先选择 ISR(In-Sync Replica,同步副本)中的副本,因为这些副本的数据是最新的。
    • 如果没有可用的 ISR,Controller 会选择其他副本作为 Leader。
  5. 更新元数据

    • 选举完成后,Controller 会更新 Zookeeper 中的分区元数据,记录新的 Leader 信息。
    • 其他 Brokers 和客户端会通过 Zookeeper 或元数据请求获取最新的 Leader 信息。

通过这种机制,Kafka 保证了分区在 Leader 失效时能够快速进行重新选举,确保数据的高可用性和一致性。

四、kafka 消费者 leader 如何选举

Kafka 中的消费者 Leader 选举是指在一个消费组(Consumer Group)中选举出一个消费者作为 Leader,负责协调和管理消费组的成员关系和分区分配。这个过程通常由群组协调器(Group Coordinator)来完成。具体步骤如下:

  1. 消费者加入消费组

    • 当一个消费者加入消费组时,它会向群组协调器发送 JoinGroup 请求。
    • 群组协调器是负责管理消费组的 Kafka Broker。
  2. 选举 Leader

    • 群组协调器会选举一个消费者作为 Leader。通常,第一个发送 JoinGroup 请求的消费者会被选为 Leader。
  3. 分区分配

    • 被选为 Leader 的消费者会负责分配分区给消费组中的各个消费者。
    • Leader 会根据消费组的分区分配策略(如 Range、RoundRobin 等)来进行分配。
  4. 同步分配方案

    • Leader 生成分区分配方案后,会将方案发送给群组协调器。
    • 群组协调器会将分配方案同步给所有消费者。
  5. 消费者确认

    • 所有消费者收到分配方案后,会向群组协调器发送 SyncGroup 请求,确认分配。
    • 一旦所有消费者确认,分区分配就正式生效,消费者开始消费分配到的分区。
  6. Leader 失效处理

    • 如果当前的 Leader 消费者失效(如崩溃或断开连接),群组协调器会重新选举一个新的 Leader。
    • 新的 Leader 会重新进行分区分配,并同步给所有消费者。

通过这种机制,Kafka 保证了消费组在消费者失效时能够快速进行重新选举和分区分配,确保数据的高可用性和一致性。

http://www.lryc.cn/news/408865.html

相关文章:

  • 树与二叉树【数据结构】
  • 简单几步,把浏览器书签转换成导航网页
  • Mac安装Hoomebrew与升级Python版本
  • 代码审计:Bluecms v1.6
  • 谷粒商城实战笔记-59-商品服务-API-品牌管理-使用逆向工程的前后端代码
  • 如何利用Jenkins自动化管理、部署数百个应用
  • Java之归并排序
  • 了解ChatGPT API
  • EasyAnimate - 阿里开源视频生成项目,国产版Sora,高质量长视频生成 本地一键整合包下载
  • 7月23日JavaSE学习笔记
  • Linux——DNS服务搭建
  • C#中的wpf基础
  • 基于微信小程序+SpringBoot+Vue的刷题系统(带1w+文档)
  • SSH -i的用法
  • 小白学习webgis的详细路线
  • 使用ChatGPT来撰写和润色学术论文的教程(含最新升级开通ChatGpt4教程)​​
  • 常见的 HTTP 状态码分类及说明
  • Leetcode700.二叉搜索树中搜索具体值
  • 自动导入unplugin-auto-import+unplugin-vue-components
  • Conda修改包/虚拟环境储存目录
  • Live555源码阅读笔记:哈希表的实现(C++)
  • 警务平台app
  • Java代理模式详解
  • docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
  • Angular中component和directive的区别?
  • Unity 资源 之 Pop It 3D 解压玩具与双人AI游戏 Unity 资源包分享
  • linux离线安装mysql8(单机版)
  • 【Python】快速创建一个简易 HTTP 服务器(http.server)
  • 随着软件开发方法的不断演进,Cobol 程序如何适应敏捷开发和持续集成/持续部署(CI/CD)的流程?
  • nodejs - MongoDB 学习笔记