Kafka-服务端-PartitionStateMachine

PartitionStateMachine是Controller Leader用于维护分区状态的状态机。分区的状态是通过PartitionState接口定义的,它有四个子类分别代表了分区四种可能的状态,如表所示。

在这里插入图片描述
分区各个PartitionState之间的转换如图所示。

在这里插入图片描述
下面分析各个状态之间转换时,需要完成的相关操作。

  • NonExistentPartition →NewPartition

从ZooKeeper中加载分区的AR集合到ControllerContext的partitionReplicaAssignment集合中。

  • NewPartition →OnlinePartition

首先将Leader副本和ISR集合的信息写入到ZooKeeper中,这里会将分区的AR集合中第一个可用的副本选举为Leader副本,并将分区的所有可用副本作为ISR集合。

之后,向所有可用的副本发送LeaderAndIsrRequest,指导这些副本进行Leader/Follower的角色切换,并向所有可用的Broker发送UpdateMetadataRequest来更新其上的MetadataCache。

  • OnlinePartitio/OffinePartition →OnlinePartition

为分区选择新的Leader副本和ISR集合,并将结果写入ZooKeeper。之后,向需要进行角色切换的副本发送LeaderAndIsrRequest,指导这些副本进行Leader/Follower的角色切换,并向所有可用的Broker发送UpdateMetadataRequest来更新其上的MetadataCache。

  • NewPartition,OnlinePartition →OfflinePartition

只进行状态转换,并没有其他的操作。

  • OfinePartition →NonExistentPartition

只进行状态转换,并没有其他的操作。

PartitionStateMachine中的各个字段含义和作用如下所述。

  • controllerContext:ControllerContext对象,用于维护KafkaController的上下文信息。
  • zkUtils:ZooKeeper的客户端,用于与ZooKeeper服务器交互。
  • partitionState:Map[TopicAndPartition,PartitionState]类型,记录了每个分区对应的PartitionState状态。
  • brokerRequestBatch:ControllerBrokerRequestBatch对象,用于向指定的Broker批量发送请求。

noOpPartitionLeaderSelector: 默认的Leader副本选举类器, 继承了PartitionLeaderSelector。NoOpLeaderSelector实现并没有真正进行Leader副本的选举,其实现是返回当前的Leader副本、ISR集合和AR集合。

  • topicChangeListener:ZooKeeper的监听器,用于监听Topic的变化。
  • deleteTopicsListener:ZooKeeper的监听器,用于监听Topic的删除。
  • partitionModificationsListeners:用于监听分区的修改。

PartitionStateMachine启动时会对partitionState集合进行初始化,并调用triggerOnlinePartitionStateChange方法将NewPartition和OfflinePartition状态的分区转换成OnlinePartition状态。

PartitionStateMachine.handleStateChange()方法是管理分区状态的核心方法,该方法控制着PartitionState的转换。这里需要注意该方法的第三个参数,它指定了用来选举Leader副本的PartitionLeaderSelector对象。

PartitionState由NewPartition切换为OnlinePartition时,调用了initializeLeaderAndIsrForPartition方法,其操作的主要步骤是:

  1. 从ControllerContext.partitionReplicaAssignment集合中选择第一个可用的副本作为Leader副本,其余的副本构成ISR集合。
  2. 将Leader副本和ISR集合的信息写入到ZooKeeper。
  3. 更新ControllerContext.partitionLeadershipInfo中缓存的Leader副本、ISR集合等信息。
  4. 将上述步骤中确定的Leader副本、ISR集合、AR集合等信息添加到ControllerBrokerRequestBatch,之后会封装成LeaderAndlsrRequest发送给相关的Broker。

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

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

相关文章

使用代码取大量2*2像素图片各通道均值,存于Excel文件中。

任务是取下图RGB各个通道的均值及标签(R, G,B,Label),其中标签由图片存放的文件夹标识。由于2*2像素图片较多,所以将结果放置于Excel表格中,之后使用SVM对他们进行分类。 from PIL import Image import os …

深入浅出hdfs-hadoop基本介绍

一、Hadoop基本介绍 hadoop最开始是起源于Apache Nutch项目,这个是由Doug Cutting开发的开源网络搜索引擎,这个项目刚开始的目标是为了更好的做搜索引擎,后来Google 发表了三篇未来持续影响大数据领域的三架马车论文: Google Fil…

Unity应用在车机上启动有概率黑屏的解决方案

问题描述 最近将游戏适配到车机上(Android系统),碰到了一个严重bug,启动的时候有概率会遇到黑屏,表现就是全黑,无法进入Unity的场景。 经过查看LogCat日志,也没有任何报错,也没有任…

qt 坦克大战游戏 GUI绘制

关于本章节中使用的图形绘制类,如QGraphicsView、QGraphicsScene等的详细使用说明请参见我的另一篇文章: 《图形绘制QGraphicsView、QGraphicsScene、QGraphicsItem、Qt GUI-CSDN博客》 本文将模仿坦克大战游戏,目前只绘制出一辆坦克&#…

企业职能部门员工忙闲不均,如何调动积极性?

案例企业背景: 某企业隶属于中国航天科技集团公司,致力于光纤陀螺系统、微机电惯性系统、光纤传感系统等高新技术产品的研发。公司具有雄厚的新型惯导和光电传感技术基础,多年来开创了我国光纤陀螺技术在武器、卫星和载人飞船等多个任务上的…

C++20 协程原理与应用

协程 要想了解协程,最好先搞清楚进程,线程,这样才能将三者区分开来! 进程 vs 线程 vs 协程 进程线程协程切换者操作系统操作系统用户(编程者)切换时机根据操作系统自己的切换策略,用户不感知根…

【QT+QGIS跨平台编译】之十二:【libpng+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文件目录 一、libpng介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libpng介绍 PNG(Portable Network Graphics,便携式网络图形),是一种采用无损压缩算法的位图格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。 PNG使用从LZ77派生的无损数据压缩算…

【JaveWeb教程】(28)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(1)

目录 SpringBootWeb案例011. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建 1.2 开发规范 2. 部门管理 SpringBootWeb案例01 前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库…

IntelliJ IDEA 快捷键大全

IntelliJ IDEA 快捷键大全 一、文本编辑二、构建、编译项目 一、文本编辑 CtrlN 查找类 CtrlN 查找文件 CtrlF 查找文本 可以根据需求去选择红框内的选项 CtrlX 剪切 剪切选中文本,如果未选中则剪切当前行CtrlC 复制 复制选中文本,如果未选中则复制当前…

WEB安全渗透测试-pikachuDVWAsqli-labsupload-labsxss-labs靶场搭建(超详细)

目录 phpstudy下载安装 一,pikachu靶场搭建 1.下载pikachu 2.新建一个名为pikachu的数据库 3.pikachu数据库配置 ​编辑 4.创建网站 ​编辑 5.打开网站 6.初始化安装 二,DVWA靶场搭建 1.下载DVWA 2.创建一个名为dvwa的数据库 3.DVWA数据库配…

单片机学习笔记---矩阵键盘

目录 矩阵键盘的介绍 独立按键和矩阵按键的相同之处: 矩阵按键的扫描 代码演示 代码模块化移植 Keil自定义模板步骤: 代码编写 矩阵键盘就是开发板上右下角的这个模块 这一节的代码是基于上一节讲的LCD1602液晶显示屏驱动代码进行的 矩阵键盘的介…

QGIS编译(跨平台编译)之十五:libbz2编译(Windows、Linux、MacOS环境下编译)

文章目录 1、libbz2介绍2、文件下载3、Linux下编译4、MacOS下编译5、Windows下编译1、libbz2介绍 bzip2是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。它是一款免费软件。可以自由分发免费使用。 bzip2能够进行高质量的数据压缩。…