隨筆 Kafka中普通 Broker 如何收到最新的 epoch number

        在 Kafka 集群中,当一个新的 Controller 当选之后,epoch number 会通过以下机制传递给其他 Broker。这个过程主要涉及 ZooKeeper 和新的 Controller 之间的交互。

1. 新的 Controller 更新 ZooKeeper 中的 epoch number

  • 当新的 Controller 被选举出来后,它会立即与 ZooKeeper 进行交互,更新 ZooKeeper 中的 /controller_epoch 节点,将 epoch number 增加,并将新的值写入这个节点。
  • 这个 epoch number 是唯一的,表示这个 Controller 是最新的、合法的。

2. Controller 通过 LeaderAndIsr 请求通知其他 Broker

  • 新的 Controller 完成选举并更新了 ZooKeeper 后,会立即向所有其他 Broker 发送一个管理请求(通常是 LeaderAndIsr 请求),这个请求包含集群的最新元数据信息以及新的 epoch number
  • 这个 LeaderAndIsr 请求负责告知每个 Broker 最新的分区 Leader 信息、ISR(In-Sync Replica)列表,并且附带上最新的 epoch number

3. 其他 Broker 收到最新的 epoch number

  • 当其他 Broker 收到 LeaderAndIsr 请求时,会检查该请求中的 epoch number
  • 如果请求中的 epoch number 比他们之前存储的 epoch number 更大,那么他们会更新本地存储的 epoch number,并接受来自这个新的 Controller 的指令。
  • 如果请求中的 epoch number 小于或等于他们之前存储的值,意味着该请求来自一个已经过期的 Controller(例如,旧的 Controller 还没有意识到自己被替换),他们会忽略这个请求。

4. 谁负责传递 epoch number?

  • 新的 Controller 是唯一负责将最新的 epoch number 通过请求传递给其他 Broker 的实体。
  • 它通过向其他 Broker 发送管理请求(如 LeaderAndIsr)来传递最新的 epoch number。其他 Broker 在收到这些请求时,就会自动获取并更新 epoch number

5. ZooKeeper 的角色

  • ZooKeeper 主要用于存储最新的 epoch number,并确保集群中只有一个合法的 Controller
  • 它并不直接通知其他 Broker epoch number,只是作为一种全局存储机制,由新的 Controller 通过请求来主动通知其他 Broker。

6. 总结

  • Controller 选举结束后,新的 Controller 更新 ZooKeeper 中的 epoch number
  • 新的 Controller 通过 LeaderAndIsr 请求通知所有 Broker 最新的 epoch number,以及其他集群元数据信息。
  • 其他 Broker 收到请求后,更新本地存储的 epoch number 并接受新的 Controller 的指令。如果收到的 epoch number 比本地的值小,则忽略该请求。
  • 新皇登基(新的Controller Broker):当集群中的 Controller 发生变化时,新的 Controller 被选举出来,负责管理整个集群。

7. 比喻 :

        就相當於,新皇登基(新的Controller Broker),昭告天下(通知所有普通Broker,附帶相關信息 例如年號(epoch number)),普通地方官(普通Broker) 更新地方官府的相關信息例如年號(epoch number)),後續皇帝向地方官發送命令 就要帶上年號,地方官對比發送過來的年號是否為符合條件(年號必須大於等於地方官手中的年號) ,大於當前的年號則跟新年號,知道是新皇登基了,如果等於,就執行皇帝的命令,如果小於手中的年號,就是老皇帝的,不能聼

  • 昭告天下(通知所有普通Broker):新的 Controller 在登基后(被选为 Controller),会通过向所有普通 Broker 发送通知(如 LeaderAndIsr 请求),告知它们最新的 Controller 信息,并附带当前的“年号”(epoch number)。

  • 普通地方官(普通Broker):每个 Broker 收到通知后,会更新本地存储的“年号”(epoch number),如果年号大于当前存储的年号,表示已经有新 Controller 上任。

  • 后续皇帝下达命令要带上年号:当 Controller 继续向 Broker 发送管理指令时,都会携带 epoch number,确保这些指令来自合法的 Controller。

  • 地方官对比年号:Broker 接收到命令时会对比命令中的年号与本地存储的年号。如果命令中的年号大于或等于本地存储的年号,意味着指令来自新 Controller,则可以执行;否则,忽略那些带有过期年号的指令。

这一流程确保了在 Controller Broker 发生变化时,集群能稳定运行,不会因为旧的 Controller 发出的指令造成数据不一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GCN+BiLSTM多特征输入时间序列预测(Pytorch)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GCNBiLSTM多特征输入时间序列预测(Pytorch) 可以做风电预测,光伏预测,寿命预测,浓度预测等。 Python代码,基于Pytorch编写 1.多特征输入单步预测…

【大数据学习 | kafka】kafuka的基础架构

1. kafka是什么 Kafka是由LinkedIn开发的一个分布式的消息队列。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的(Replicated)、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比,KafKa能够很好…

MySQL-DQL练习题

文章目录 简介初始化表练习题 简介 本节简介: 主要是一些给出一些习题, 关于DQL查询相关的, DQL查询语句是最重要的SQL语句, 功能性最复杂, 功能也最强, 所以本节建议适合以及有了DQL查询基础的食用, 另外注意我们使用的是Navicat, SQL编辑的格式规范也是Navicat指定的默认格式…

Android 15: 探索未来的可能性

Android 15: 探索未来的可能性 随着技术的不断进步,我们的智能手机系统也在不断地进化。Android 15,作为谷歌最新推出的操作系统版本,带来了一系列令人兴奋的新特性和改进,让我们的数字生活更加丰富多彩。本文将带你一探Android 15的新特性,感受科技的魅力。 低光增强:…

《云原生安全攻防》-- K8s攻击案例:权限维持的攻击手法

在本节课程中,我们将一起深入了解K8s权限维持的攻击手法,通过研究这些攻击手法的技术细节,来更好地认识K8s权限维持所带来的安全风险。 在这个课程中,我们将学习以下内容: K8s权限维持:简单介绍K8s权限维持…

安装OpenResty

OpenResty OpenResty 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。具备下列特点: 具备Nginx的完整功能 基于Lua语言进行扩展,集成了大量精良的 Lua 库、第三方模块…

python多线程处理xlsx,多进程访问接口

import pandas as pd from concurrent.futures import ThreadPoolExecutor# 读取Excel文件 file_path scence.xlsx df pd.read_excel(file_path)# 定义每10行处理逻辑 def process_rows(start_idx):end_idx min(start_idx 10, len(df)) # 处理每10行for i in range(start_…

【Linux系统】进程终止

一、进程退出方式 1、正常终止 主要两种类型:从 main 返回、调用 exit 和 _exit 具体讲解如下: (1)从 main 返回 这个的使用就不用多说了吧,相信你们已经烂熟于心了 作用:return 语句用于从函数中返回…

一篇文章了解RocketMQ基础知识。

目录 一. 为什么选择了 RocketMQ ? 二. RocketMQ 介绍 名词说明 1. Topic (主题) 1.1 Topic 核心作用 1.2 Topic 常见问题 2. Tag (标签) 3. Queue (队列) 3.1 Queue 读写队列 4. Message (消息) 4.1 Message 类型 5. Produ…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备视频报警功能详解

在科技日新月异的今天,视频监控系统作为现代社会的“第三只眼”,正以前所未有的方式深刻影响着我们的生活与社会结构。从公共场所的安全监控到个人生活的记录分享,视频监控系统以其独特的视角和功能,为社会带来了诸多好处&#xf…

day10:ssh服务-跳板机

一,ssh服务概述 ssh服务概述 ssh(Secure Shell)是一种用于在不安全网络中进行安全登录、远程执行命令及传输文件的网络协议。它通过加密技术来保证通信的保密性和完整性,主要用于替代不安全的telnet、rlogin、rsh等协议。ssh通常…

python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)

文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验 要求:抓取该网址下的视频&…

【制造业&电子产品】电脑电子元件检测系统源码&数据集全套:改进yolo11-TADDH

改进yolo11-SCConv等200全套创新点大全:电脑电子元件检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者…

Linux: network: wireshark IO图的一个问题

今天遇到一个问题,发现wireshark画的IO图,前几秒没有数据,但是根据Raw的pcap看,是有包的,这就迷惑了。 经同事提醒,这个IO在设置了多个画图filter的时候,可能导致开始前几秒没有输出。如下图 这…

jenkins ssh 免密报错Host key verification failed.

jenkins 发布项目,ssh连接远程服务器时报错:Host key verification failed. 解决: 原因是生成的sshkey不是用的jenkins用户,所以切换用户到:jenkins重新生成sshkey su jenkins ssh-keygen -t rsa ssh-copy-id -i ~/…

C# 串口通信教程

串口通信(Serial Communication)是一种用于设备之间数据传输的常见方法,通常用于与外部硬件设备(如传感器、机器人、微控制器)进行通信。在 C# 中,System.IO.Ports 命名空间提供了与串口设备交互的功能&…

mono源码交叉编译 linux arm arm64全过程

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

GPT-4o 和 GPT-4 Turbo 模型之间的对比

GPT-4o 和 GPT-4 Turbo 之间的对比 备注 要弄 AI ,不同模型之间的对比就比较重要。 GPT-4o 是 GPT-4 Turbo 的升级版本,能够提供比 GPT-4 Turbo 更多的内容和信息,但成功相对来说更高一些。 第三方引用 在 2024 年 5 月 13 日&#xff0…

8.MySQL复合查询

目录 复合查询基本查询回顾多表查询 - 笛卡尔积自连接子查询单行子查询多行子查询多列子查询在from中使用子查询 合并查询unionunion all 表的内连和外连内连接外连接左外连接右外连接 复合查询 前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远…

HTML+JavaScript案例分享: 打造经典俄罗斯方块,详解实现全过程

在本文中,我们将深入探讨如何使用 JavaScript 实现经典的俄罗斯方块游戏。俄罗斯方块是一款广为人知的益智游戏,通过操纵各种形状的方块,使其在游戏区域内排列整齐,以消除完整的行来获得分数。 效果图如下: 一、游戏界面与布局 我们首先使用 HTML 和 CSS 来创建游戏的界面…