Kafka-服务端-KafkaController

Broker能够处理来自KafkaController的LeaderAndIsrRequest、StopReplicaRequest、UpdateMetadataRequest等请求。

在Kafka集群的多个Broker中,有一个Broker会被选举为Controller Leader,负责管理整个集群中所有的分区和副本的状态。

例如:当某分区的Leader副本出现故障时,由Controller负责为该分区重新选举新的Leader副本;

当使用kafka-topics脚本增加某Topic的分区数量时,由Controller管理分区的重新分配;

当检测到分区的ISR集合发生变化时,由Controller通知集群中所有的Broker更新其MetadataCache信息。

为了实现Controller的高可用,一个Broker被选为Leader之后,其他的Broker都会成为Follower(不加特殊说明的情况下,本文的“Leader/Follower”指的都是KafkaController的Leader/Follower,请不要与副本机制中的Leader副本和Follower副本混淆),会从剩下的Follower中选出新的Controller Leader来管理集群。

选举Controller Leader依赖于ZooKeeper实现,每个Broker启动时都会创建一个KafkaController对象,但是集群中只能存在一个Controller Leader来对外提供服务。

在集群启动时,多个Broker上的KafkaController会在指定路径下竞争创建节点,只有第一个成功创建节点的KafkaController才能成为Leader,而其余的KafkaController则成为Follower。

当Leader出现故障后,所有的Follower会收到通知,再次竞争在该路径下创建节点从而选出新的Leader。这也是ZooKeeper的一种常见用法。

在Kafka早期版本中并没有采用KafkaController的设计来对分区和副本状态进行管理,而是依赖于ZooKeeper的Watcher和队列。

在早期版本的设计中,每个Broker都会在ZooKeeper上注册Watcher,ZooKeeper上就会出现大量Watcher,当分区或副本状态变化时会唤醒很多不必要的Watcher,这种严重依赖ZooKeeper的设计出现了“脑裂”、“羊群效应”以及ZooKeeper集群过载的情况。

在新版本设计中,只有Controller Leader在ZooKeeper上注册Watcher,其他Broker几乎不用再监听ZooKeeper中的数据变化。

旧版本中Broker之间传递事件依赖于ZooKeeper的设计比较低效,在新版设计中ControllerLeader直接与Broker交互。旧版本的设计毕竟已经废弃,在设计分布式系统时要适度依赖ZooKeeper集群,合理利用ZooKeeperWatcher,否则就会出现上述问题。

我们先通过图了解ZooKeeper中与KafkaController相关的路径以及该路径中记录的内容的含义。

在这里插入图片描述

  • /brokers/ids/[id]:记录了集群中可用Broker的id。
  • /brokers/topics/topic]partitions:记录了一个Topic中所有分区的分配信息以及AR集合信息。
  • /brokers/topics/topic/partitions/[partitionid/state:记录了某Partition的Leader副本所在Brokerld、lead_epoch、ISR集合、ZKVersion等信息。
  • /controller_epoch:记录了当前Controller Leader的年代信息。
  • /controller:记录了当前Controller Leader的Id,也用于Controller Leader的选举。
  • /admin/reassign partitions:记录了需要进行副本重新分配的分区。
  • /admin/preferred_replica_election:记录了需要进行“优先副本”选举的分区。“优先副本”是在创建分区时为其指定的第一个副本。
  • /admin/delete_topics:记录了待删除的Topic。
  • /isr_change_notification:记录了一段时间内ISR集合发生变化的分区。
  • /config:记录了一些配置信息。

在详细介绍KafkaController的相关组件之前,先从整体上了解KafkaController的设计,以及组件之间的依赖关系如图所示。

在这里插入图片描述

  • KafkaController组织并封装了其他组件,对外提供API接口。
  • ZookeeperLeaderElector主要用于Controller Leader的选举。
  • ControllerContextKafkaController的上下文信息,缓存了ZooKeeper中记录的整个集群的元信息,例如,可用Broker、全部的Topic、分区、副本的信息。
  • ControllerChannelManager维护了Controller Leader与集群中其他Broker之间的网络连接,是管理整个集群的基础。
  • TopicDeletionManager用于对指定的Topic进行删除。
  • PartitionStateMachine用于管理集群中所有Partition状态的状态机。
  • ReplicaStateMachine用于管理集群中所有副本状态的状态机。
  • ControllerBrokerRequestBatch实现了向Broker批量发送请求的功能。
  • *PartitionLeaderSelector实现了多种Leader副本选举策略。
  • *Listener是ZooKeeper上的监听器,实现了对ZooKeeper上某些节点中的数据、子节点或ZooKeeper Session状态的监听,被触发后调用相应的业务逻辑。

从另一个角度来看,KafkaController是ZooKeeper与Kafka集群交互的桥梁:

它一方面对ZooKeeper进行监听,其中包括Broker写入到ZooKeeper中的数据,也包括管理员使用脚本写入的数据;

另一方面根据ZooKeeper中数据的变化做出相应的处理,通过LeaderAndlsrRequest、StopReplicaRequest、UpdateMetadataRequest等请求控制每个Broker的工作。

而且,KafkaController本身也通过ZooKeeper提供了高可用的机制。通过上述组件之间的协调工作,构成了一个统一的整体。

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

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

相关文章

第92讲:MySQL主从复制集群故障排查思路汇总

文章目录 1.从库I/O线程处于Connecting状态2.从库I/O线程处于No状态3.从库SQL线程处于No状态 1.从库I/O线程处于Connecting状态 从库的I/O线程处于Connection连接中的状态,一般都是连接不上主库导致: 可能由于网络不通,防火墙的干扰导致从库…

MongoDB系列之一文总结索引

概述 分类 索引的分类: 按照索引包含的字段数量,可分为单键索引(单字段索引)和组合索引(联合索引、复合索引)按照索引字段的类型,可以分为主键索引和非主键索引按照索引节点与物理记录的对应…

2024免费mathtype7.4.4安装注册步骤教程

数学建模中对公式的编辑有很高的要求,mathtype是一款专业的数学公式编辑工具,能够帮助用户在各种文档中插入复杂的数学公式和符号。 一 Mathtype 的下载安装 1.1 安装前须知 解压和安装前,需要将电脑的杀毒软件或者防火墙关掉,如…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-后台管理主页面实现

锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…

vue3跨域请求及一些常用配置

在使用vue3开发的时候,总免不了做一些基础的配置。比如跨域配置,一些常用函数的封装等等。接下来,我就做一些自己在在开发中所运用到一些常用配置。 一、跨域配置 其实,对于跨域配置,我之前的博文中也有说过&#xff0…

Linux的常见指令和基本操作演绎【复习篇章一】

文章目录 前言下载安装 XShellXShell 下的复制粘贴热键操作01.ls指令tree 02.cd指令03.touch指令04.mkdir指令(重要):05.rmdir指令 && rm 指令(重要)06.组合07.man指令(重要)&#xff1…

Packet Tracer - VLAN 间路由练习

地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 172.17.25.2 255.255.255.252 不适用 R1 G0/1.10 172.17.10.1 255.255.255.0 不适用 R1 G0/1.20 172.17.20.1 255.255.255.0 不适用 R1 G0/1.30 172.17.30.1 255.255.255.0 不适用 R1 G0/1.…

前景贴纸类特效SDK,面向企业的技术解决方案

随着数字媒体技术的快速发展,视频内容在社交媒体、广告、教育等领域的应用越来越广泛。为了增加视频的吸引力和趣味性,许多企业开始寻求在视频中添加特效和贴纸。美摄科技的前景贴纸类特效SDK为企业提供了一种高效、灵活的解决方案,满足不同的…

R语言VRPM包绘制多种模型的彩色列线图

列线图,又称诺莫图(Nomogram),它是建立在回归分析的基础上,使用多个临床指标或者生物属性,然后采用带有分数高低的线段,从而达到设置的目的:基于多个变量的值预测一定的临床结局或者…

生命在于折腾——WeChat机器人的研究和探索

一、前言 2022年,我玩过原神,当时看到了云崽的QQ机器人,很是感兴趣,支持各种插件,查询游戏内角色相关信息,当时我也自己写了几个插件,也看到很多大佬编写的好玩的插件,后来因为QQ不…

微信聊天记录生成词云

目录 前置准备一、获取微信聊天记录(一)配置MuMu模拟器(二)微信数据备份与恢复(三)获取微信聊天记录文件至电脑(四)获取EnMicroMsg.db的密钥(五)使用SQLciphe…

详解线性分组码(linear code)

目录 一. 介绍 二. 线性分组码 三. 生成矩阵 四. 对偶编码 五. 校验矩阵 六. 陪集编码 七. 小结 一. 介绍 Low-density parity-check,简称LDPC码,翻译为低密度奇偶校验码。 我们所熟悉的LDPC码就是一个典型的线性分组码(linear bloc…

2023年度AI盘点 AIGC|AGI|ChatGPT|人工智能大模型

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 2023年是人工智能大语言模型大爆发的一年,一些概念和英文缩写也在这一年里集中出现,很容易混淆,甚至把人搞懵。 文章目录 前言01 《ChatGPT 驱动软件开…

气象条件对铸铁平台地基深度有哪些影响呢——河北北重

气象条件对铸铁平台地基有以下影响: . 1.地震 地震可能导致地基的震动和错动,因此地震活跃区域的建筑物通常需要更深的地基以提供更大的稳定性。 2..温度变化:气温的变化会导致地基中的土壤膨胀和收缩,从而影响地基的稳定性。特…

展厅设计更好的方法

一、与公司形象契合 在展厅规划时必定要留意公司的LOGO、主色调,以及企业文明。在展现时使用丰满的展厅规划传达出企业的理念。而在功用设置上,应当考虑内涵功用,从展厅作业人员的视点动身,为展厅作业人员提供杰出的环境&#xff…

书生·浦语大模型实战营-学习笔记6

目录 OpenCompass大模型测评1. 关于评测1.1 为什么要评测?1.2 需要评测什么?1.3 如何评测?1.3.1 客观评测1.3.2 主观评测1.3.3 提示词工程评测 2. 介绍OpenCompass工具3. 实战演示 OpenCompass大模型测评 1. 关于评测 1.1 为什么要评测&#…

《WebKit 技术内幕》学习之五(4): HTML解释器和DOM 模型

4 影子(Shadow)DOM 影子 DOM 是一个新东西,主要解决了一个文档中可能需要大量交互的多个 DOM 树建立和维护各自的功能边界的问题。 4.1 什么是影子 DOM 当开发这样一个用户界面的控件——这个控件可能由一些 HTML 的标签元素…

单域名证书,多域名证书,通配符证书怎么选?了解这些就够了

首次购买证书时,我们经常遇到不知道选择那种证书,由于缺乏相关的了解,稍不留神,就会踩坑!那初次购买证书时,了解这几点其实就足够了! 第一点,了解证书的类型。 证书一般分为DV&am…

<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上交流答疑&am…

acwing 动态规划dp 0 1背包问题

前言 hello小伙伴们,最近由于个人放假原因颓废了一段时间很长时间没有更新CSDN的内容了,唉,毕竟懂得都懂寒暑假静下心来学习的难度远比在学校里大的多。 但是,也不是毫无办法克服,今天我来了我们当地的一家自习室来学习…
最新文章