Kafka-服务端-PartitionLeaderSelector、ReplicaStateMachine

PartitionLeaderSelector

通过对前面的分析可知,PartitionMachine将Leader副本选举、确定ISR集合的工作委托给了PartitionLeaderSelector接口实现,PartitionMachine可以专注于管理分区状态。这是策略模式的一种典型的应用场景。

图展示了PartitionLeaderSelector的实现类,这五个不同的实现提供了不同的策略。PartitionLeaderSelector接口的定义如下:

在这里插入图片描述
NoOpLeaderSelector是其中最简单的实现,它并没有进行Leader选举,而是将currentLeaderAndlsr直接返回,需要接收LeaderAndIsrRequest的Broker则是分区的AR集合。代码就不贴出来了。

OfflinePartitionLeaderSelector会根据currentLeaderAndlsr选举新的Leader和ISR集合,策略如下:

  1. 如果在ISR集合中存在至少一个可用的副本,则从ISR集合中选择新的Leader副本,当前ISR集合为新ISR集合。
  2. 如果ISR集合中没有可用的副本且“Unclean leader election”配置被禁用,那么就抛出异常。
  3. 如果“Unclean leader election”被开启,则从AR集合中选择新的Leader副本和ISR集合。
  4. 如果AR集合中没有可用的副本,抛出异常。

对于剩余的PartitionLeaderSelector实现,这里只介绍其策略。

PreferredReplicaPartitionLeaderSelector的策略是:如果“优先副本”可用且在ISR集合中,则选取其为Leader副本,当前的ISR集合为新的ISR集合,并向AR集合中所有可用副本发送LeaderAndIsrRequest,否则会抛出异常。

ReassignedPartitionLeaderSelector涉及到副本的重新分配,副本重新分配的相关概念后面详细分析,这里先简单了解ReassignedPartitionLeaderSelector的策略:选取的新Leader副本必须在新指定的AR集合中且同时在当前ISR集合中,当前ISR集合为新ISR集合,接收LeaderAndIsrRequest的副本是新指定的AR集合中的副本。

ControlledShutdownLeaderSelector的策略是:从当前ISR集合中排除正在关闭的副本后作为新的ISR集合,从新ISR集合中选择新的Leader,需要向AR集合中可用的副本发送LeaderAndIsrRequest。

ReplicaStateMachine

ReplicaStateMachine是Controller Leader用于维护副本状态的状态机。副本状态由ReplicaState接口表示,它有七个子类,分别代表了副本的七种不同的状态,如表所示。

在这里插入图片描述
ReplicaState之间的转换如图所示。下面介绍各个ReplicaState状态之间转换时需要完成的相关操作。

  • NonExistentReplica →NewReplica Controller向此副本所在Broker发送LeaderAndIsrRequest,并向集群中所有可用的Broker发送UpdateMetadataRequest。
  • NewReplica →OnlineReplicaController将NewReplica加入到AR集合中。
  • OnlineReplica,OfflineReplica→OnlineReplica

Controller向此副本所在的Broker发送LeaderAndIsrRequest,并向集群中所有可用的Broker发送UpdateMetadataRequest。

  • NewReplica,OnlineReplica,OflineReplica,ReplicaDeletionIneligible →OffineReplica
    Controller向副本所在Broker发送StopReplicaRequest,之后会从ISR集合中清除此副本,最后向其他可用副本所在的Broker发送LeaderAndIsrRequest,并向集群中所有可用的Broker发送UpdateMetadataRequest。
  • OffineReplica→ReplicaDeletionStarted
    Controller向副本所在Broker发送StopReplicaRequest。
  • ReplicaDeletionStarted →ReplicaDeletionSuccessful只做状态转换,并没有其他操作。
  • ReplicaDeletionStarted →ReplicaDeletionIneligible只做状态转换,并没有其他操作。
  • ReplicaDeletionSuccessful →NonExistentReplicaController从AR集合中删除此副本。

在这里插入图片描述
在ReplicaStateMachine中也有controllerContext、zkUtils、brokerRequestBatch字段,它们的功能与PartitionStateMachine中的同名字段相同,ReplicaStateMachine剩余的字段如下所述。

  • replicaState:Map[PartitionAndReplica,ReplicaState]类型,记录每个副本对应的ReplicaState状态。
  • brokerChangeListener:ZooKeeper的监听器,用于监听Broker的变化,例如Broker宕机或重新上线等事件。

ReplicaStateMachine启动时会对replicaState集合进行初始化,并调用handleStateChanges()方法尝试将可用副本转换为OnlineReplica状态。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

收集子域名信息(二):第三方网站查询

一、介绍 通过第三方网站查询子域名信息是指使用外部提供的在线工具或服务,通过输入主域名(主网站的域名)来获取与该主域名相关的子域名列表的过程。子域名是在主域名下创建的附加标识,通常用于将网站内容组织成不同部分或为特定…

如何使用mock.js实现接口测试的自动化?

Mock.js 基础用法介绍 Mock.js是一个常用于生成随机数据和拦截Ajax请求的JavaScript库。本文将介绍Mock.js的用法,包括安装和基础用法,在开始前我们可以看下看:了解 Mock.js 的语法规范。 安装 可以通过npm安装Mock.js: npm i…

2024年【汽车驾驶员(高级)】模拟试题及汽车驾驶员(高级)理论考试

题库来源:安全生产模拟考试一点通公众号小程序 汽车驾驶员(高级)模拟试题是安全生产模拟考试一点通总题库中生成的一套汽车驾驶员(高级)理论考试,安全生产模拟考试一点通上汽车驾驶员(高级&…

动画学习:CSP动画制作

会画画就能做手书?!真动画入门教程!【优动漫/CSP教程】https://www.bilibili.com/video/BV1ku411S7Ey/?spm_id_from333.337.search-card.all.click&vd_source124076d7d88eee393a1d8bf6fc787efa 有些人用的是优动漫软件,但是…

现在普通人的消费选择发生了怎样的变化?

消费选择的变化:现代普通人消费观念的演变 随着社会的进步和经济的发展,现代普通人的消费选择发生了翻天覆地的变化。这种变化不仅体现在物质生活的丰富上,更反映在人们消费观念的转变上。 在过去,人们的消费选择相对单一&#…

网络层 IP协议(1)

前置知识 主机:配有IP地址,但是不进行路由控制的设备 路由器:既配置了IP地址,又能进行路由控制的设备 节点:主机和路由器的总称 IP协议主要完成的任务就是 地址管理和路由选择 地址管理:使用一套地址体系,将网络设备的地址描述出来 路由选择:一个数据报如何从源地址到目的地址 …

C++ : 类的简单介绍(四)——析构函数

概念: 与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由 编译器完成的。 而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。 特征: 1. 析构函数名是在类名前加上字符 ~ 2. …

大数据分析|从七个特征理解大数据分析

文献来源:Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接:链接:https://pan.baidu.com/s/1…

【Zotero】如何在word文档中插入zotero中的文献

博主最近在用zotero管理文献,并在word文档中写文章,期间需要将zotero生成的参考文献插入文章中,这里将博主遇到的问题以及解决的办法分享给大家,供咱们一起学习。 博主遇到的问题主要有以下几个: 1、参考文献的格式以…

计算机网络——网络层(3)

计算机网络——网络层(3) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)1 网络层——控制平面因特网中自治系统内部的路由选择总括考虑因素总结 ISP之间的路由选择:BGP考虑因素总结 SDN控制层面重要组件和功能总结 ICMP主要功能和特点…

Java强训day13(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s sc.nextLine();char[] c s.toCharArray();int i 0;int t 0;while (i < c.length) {if (c[i] ! \") {…

Spring速成(一)

文章目录 Spring速成&#xff08;一&#xff09;1&#xff0c;课程介绍1.1 为什么要学?1.2 学什么?1.3 怎么学? 2&#xff0c;Spring相关概念2.1 初识Spring2.1.1 Spring家族2.1.2 了解Spring发展史 2.2 Spring系统架构2.2.1 系统架构图2.2.2 课程学习路线 2.3 Spring核心概…

12nm工艺,2.5GHz频率,低功耗Cortex-A72处理器培训

“ 12nm工艺&#xff0c;2.5GHz频率&#xff0c;低功耗Cortex-A72处理器培训” 本项目是真实项目实战培训&#xff0c;低功耗UPF设计&#xff0c;后端参数如下&#xff1a; 工艺&#xff1a;12nm 频率&#xff1a;2.5GHz 资源&#xff1a;2000_0000 instances 为了满足更多…

C语言第十五弹---操作符(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 操作符 1、操作符的分类 2、二进制和进制转换 2.1、2进制转10进制 2.1.1、10进制转2进制数字 2.2、2进制转8进制和16进制 2.2.2、2进制转16进制 3. 原码、反…

【日常问题】Failed to enable unit: Unit file docker.service does not exist.

Failed to enable unit: Unit file docker.service does not exist. 1. 问题原因 笔者问题的产生是因为在ubuntu20.04下采用snapd安装的docker&#xff0c;因此 systemctl restart docker.servicesystemd并不能找到守护进程docker.service 同时使用docker命令时还会产生若干…

android 自定义下拉框

一、 简介&#xff1a; 原生Android 提供的spinner下拉框不怎么方便&#xff0c;样式有点丑。修改起来麻烦&#xff0c;于是就自己动手写了一下拉列表。 实现原理使用的是&#xff0c;popwindow弹框&#xff0c;可实现宽高自定义&#xff0c;下拉列表使用listview. 二、pop弹框…

【金蝶BI方案】用一张报表,分析生产完成情况

当老板问生产完成地怎样&#xff1f;难道还能拿出一叠报表让老板逐个细看&#xff1f;奥威-金蝶BI方案只用一张BI数据可视化报表就把整个生产完成情况给讲明白了。甚至还能满足老板想从不同角度进行分析的需求。 奥威-金蝶BI方案-BI生产完成情况报表 这张报表总结计算了生产合…

智能家居的网关新形态:Aqara 方舟智慧中枢 M3 体验

如果说在刚刚结束的 2023 年有哪些备受期待的智能家居产品&#xff0c;Aqara 方舟智慧中枢 M3 一定榜上有名&#xff0c;我的多位朋友也曾在装修过程中多次向我询问是否有这款产品的相关资讯&#xff1b;谁能想到自从在 2022 年 11 月首次亮相之后&#xff0c;这款产品一直等了…

Redis核心技术与实战【学习笔记】 - 13.Redis缓冲区可能引起的问题及解决套路

缓冲区的功能其实很简答&#xff0c;主要就是用一块内存空间来暂时存放命令数据&#xff0c;以免出现因为数据和命令的处理速度慢于发送速度而导致的数据丢失和性能的问题。但是因为缓冲区的内存空间有限&#xff0c;如果往里面写入数据的速度持续地大于从里面读取数据的速度&a…

dv和ov通配符SSL证书的区别

SSL数字证书是一种数字证书&#xff0c;可以保护网站传输数据安全以及对服务器身份进行验证&#xff0c;SSL证书有很多种&#xff0c;而通配符证书则是其中的一种特殊类型。SSL证书旗下的通配符SSL证书随着互联网的发展&#xff0c;颁发量也越来越多&#xff0c;为了使用户选择…