Kafka【四】Controller的选举机制

news2024/9/29 19:19:34

【1】控制器:Controller

Kafka是分布式消息传输系统,所以存在多个Broker服务节点,但是它的软件架构采用的是分布式系统中比较常见的主从(Master - Slave)架构,也就是说需要从多个Broker中找到一个用于管理整个Kafka集群的Master节点,这个节点,我们就称之为Controller。

它是Apache Kafka的核心组件非常重要。它的主要作用是在Apache Zookeeper的帮助下管理和协调控制整个Kafka集群。

如果在运行过程中,Controller节点出现了故障,那么Kafka会依托于ZooKeeper软件选举其他的节点作为新的Controller,让Kafka集群实现高可用。

Kafka集群中Controller的基本功能:

  • Broker管理
    • 监听 /brokers/ids节点相关的变化:
    • Broker数量增加或减少的变化
    • Broker对应的数据变化
  • Topic管理
    • 新增:监听 /brokers/topics节点相关的变化
    • 修改:监听 /brokers/topics节点相关的变化
    • 删除:监听 /admin/delete_topics节点相关的变化
  • Partation管理
    • 监听 /admin/reassign_partitions节点相关的变化
    • 监听 /isr_change_notification节点相关的变化
    • 监听 /preferred_replica_election节点相关的变化
  • 数据服务
    • 启动分区状态机和副本状态机

【2】选举机制

① 如何实现Kafka的节点选举

Kafka集群中含有多个服务节点,而分布式系统中经典的主从(Master - Slave)架构就要求从多个服务节点中找一个节点作为集群管理Master,Kafka集群中的这个Master,我们称之为集群控制器Controller

如果此时Controller节点出现故障,它就不能再管理集群功能,那么其他的Slave节点该如何是好呢?

如果从剩余的2个Slave节点中选一个节点出来作为新的集群控制器是不是一个不错的方案,我们将这个选择的过程称之为:选举(elect)。Kafka是依赖于ZooKeeper软件实现Broker节点选举功能。

ZooKeeper如何实现Kafka的节点选举呢?这就要说到我们用到ZooKeeper的3个功能:

  • 一个是在ZooKeeper软件中创建节点Node,创建一个Node时,我们会设定这个节点是持久化创建,还是临时创建。所谓的持久化创建,就是Node一旦创建后会一直存在,而临时创建,是根据当前的客户端连接创建的临时节点Node,一旦客户端连接断开,那么这个临时节点Node也会被自动删除,所以这样的节点称之为临时节点。
  • ZooKeeper节点是不允许有重复的,所以多个客户端创建同一个节点,只能有一个创建成功。
  • 另外一个是客户端可以在ZooKeeper的节点上增加监听器,用于监听节点的状态变化,一旦监听的节点状态发生变化,那么监听器就会触发响应,实现特定监听功能。

Kafka是如何利用ZooKeeper实现Controller节点的选举的:

  1. 第一次启动Kafka集群时,会同时启动多个Broker节点,每一个Broker节点就会连接ZooKeeper,并尝试创建一个临时节点 /controller
  2. 因为ZooKeeper中一个节点不允许重复创建,所以多个Broker节点,最终只能有一个Broker节点可以创建成功,那么这个创建成功的Broker节点就会自动作为Kafka集群控制器节点,用于管理整个Kafka集群。
  3. 没有选举成功的其他Slave节点会创建Node监听器,用于监听 /controller节点的状态变化。
  4. 一旦Controller节点出现故障或挂掉了,那么对应的ZooKeeper客户端连接就会中断。ZooKeeper中的 /controller 节点就会自动被删除,而其他的那些Slave节点因为增加了监听器,所以当监听到 /controller 节点被删除后,就会马上向ZooKeeper发出创建 /controller 节点的请求,一旦创建成功,那么该Broker就变成了新的Controller节点了。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结来讲就是broker节点进行抢占,谁先抢占到谁就是Controller,其他则监听该节点。如果Controller挂掉,其他节点继续抢占去成为Controller。

脑裂现象

有一种特殊的情况,就是Controller节点并没有宕掉,而是因为网络的抖动,不稳定,导致和ZooKeeper之间的会话超时。那么此时,整个Kafka集群就会认为之前的Controller已经下线(退出)从而选举出新的Controller,而之前的Controller的网络又恢复了,以为自己还是Controller了,继续管理整个集群。

那么此时,整个Kafka集群就有两个controller进行管理,那么其他的broker就懵了,不知道听谁的了,这种情况,我们称之为脑裂现象。

为了解决这个问题,Kafka通过一个任期(epoch:纪元)的概念来解决。也就是说,每一个Broker当选Controller时,会告诉当前Broker是第几任Controller。一旦重新选举时,这个任期会自动增1。那么不同任期的Controller的epoch值是不同的,那么旧的controller一旦发现集群中有新任controller的时候,那么它就会完成退出操作(清空缓存,中断和broker的连接,并重新加载最新的缓存),让自己重新变成一个普通的Broker。

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

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

相关文章

安卓项目打包与发版说明-笔记

项目打包与发版说明 Android Studio 打包 1.打包debug版 在调试完成后,点击编辑器的上方Build选项,然后依次选择 ->Build Bundle(s) / APK(s) -> Build APK(s) 打包完成后在控制台信息处点击信息框中的locate,在文件管理器中浏览&a…

Linux_kernel简介01

--------------------------------------------------------- 力扣专题 --------------------------------------------------------- 一、嵌入式开发 1、ARM的历史 ARM原本含义(Acom RISC Machine)后来Acron公司独立出了ARM部门,成立了ARM公司(Advan…

指挥中心操作台在应急响应中的关键作用

在现代社会,面对突如其来的自然灾害、公共卫生事件或安全事故等紧急状况,高效、迅速的应急响应机制是保障社会稳定与人民安全的重要基石。而在这场与时间赛跑的较量中,指挥中心操作台无疑扮演着至关重要的角色,它是应急管理体系中…

源代码加密软件有哪些?11款超好用的源代码加密软件推荐

在软件开发领域,源代码加密是保护企业知识产权和核心技术的重要手段。随着远程办公和云开发的普及,源代码在传输和存储过程中面临的安全风险日益增加。因此,选择合适的源代码加密软件至关重要。以下是11款超好用的源代码加密软件推荐&#xf…

Python画笔案例-020 绘制米字图

1、绘制米字图 通过 python 的turtle 库绘制一个米字图的图案,如下图: 2、实现代码 绘制一个米字图,以下为实现代码: """米字图.py """ import turtle # 导入海龟模块turtle.pensize(2…

RocketMQ安装实操

官方下载地址 http://rocketmq.apache.org/dowloading/releases/ 使用最新的版本。 1.2、环境要求 Linux64位系统JDK1.8(64位)源码安装需要安装Maven 3.2.x1.3、目录介绍 bin:启动脚本,包括shell脚本和CMD脚本conf:实例配置文件 ,包括broker配置文件、logback配置文件等l…

Python编程实战营:四款实用小项目助你快速入门,从零开始打造你的个人项目集!

踏入编程世界的门槛,总是伴随着既兴奋又忐忑的心情。作为Python的新手,你是否渴望通过实际项目来巩固知识、提升技能?本篇文章将引领你踏上一段从理论到实践的精彩旅程,通过四个精心设计的项目,让你在趣味与挑战中快速…

机器人大会引领产业动向,卓翼飞思绘制无人系统教科研新蓝图

8月21日,万众瞩目的2024世界机器人大会暨博览会在北京亦创国际会展中心盛大开幕。这场为期5天,集“展览”“论坛”“赛事”于一体的机器人盛会,反映了当下机器人领域的繁荣生态。据官方统计数据,今年现场逛展观众高达25万人次&…

划分聚类方法实现与应用

文章目录 划分聚类介绍K-Means 聚类方法用python实现聚类生成示例数据随机初始化中心点计算样本与中心点的距离更新聚类中心K-Means 聚类算法实现用scikit-learn实现聚类如何确定k肘部法则K-Means++ 聚类算法生成数组K-Means 聚类K-Means++ 算法流程K-Means++ 算法实现Mini-Bat…

【AI绘画】Midjourney前置指令/describe、/shorten详解

文章目录 💯前言💯Midjourney前置指令/describe使用方法1️⃣2️⃣3️⃣4️⃣(选择对应提示词)🔄(重新识别生成提示词)🎉Imagine all(一次性生成所有)注意 &a…

【项目文档】软件实施方案(软件文档Word原件)

一、 概述 二、 项目介绍 2.1 概览 三、 项目实施 3.1 项目实施概况 3.2 项目实施管理原则 3.3 项目组织结构 3.4 项目团队 四、 项目实施计划 4.1 项目实施工作流程 4.2 项目软件部分进度安排 4.3 网络拓扑图 4.4 服务器需求清单 五、 人员培训 5.1 培训内容 5…

如何快速创建美观实用的思维导图?五个技巧教你轻松上手

在信息爆炸的时代,如何高效地整理和记忆海量信息,成为许多人关注的焦点。思维导图作为一种创新的笔记记录方式,因其直观、结构化的特性,逐渐成为现代学习和工作的首选工具。许多学习高手和职场精英都纷纷青睐这一方法,…

【TiDB原理与实战详解】4、DM 迁移和TiCDC数据同步~学不会? 不存在的!

DM工具数据迁移 1、简介 DM全称TiDB Data Migration , 支持兼容mysql协议的数据库(MySQL、MariaDB、Aurora MySQL),将数据(异步)迁移到TiDB中。支持全量和增量数据传输。可以过滤数据,可以将分库分表的数据…

【JVM原理】类加载机制

文章目录 一、JVM组成二、类的生命周期2-1 加载 (Loading)2-2 连接 (Linking)2-3 初始化 (Initialization)2-4 使用 (Using)2-5 卸载 (Unloading) 三、类加载器3-1 类加载器的作用3-2 类加载器的种类3-3 类加载机制双亲委派机制(Parent Delegation Model&#xff09…

分享林曦老师的苏东坡入门阅读清单

大家暑假过得还愉快嘛假期前暄桐的课程刚好进行到六阶“见道明心的笔墨”书法部分《赤壁赋》的学习,也为暑假提供些新的乐趣,林曦老师十分贴心地送给大家一份苏东坡阅读入门清单,每本书有不同的侧重点。祝大家读书开心,有满满的收…

某张卡NR only下可以驻网 AUTO模式下在2G/3G工作

结论:需要终端设置为data centric,或ps only。 从日志看,5G下的注册收到REGISTRATION ACCEPT。但是没有携带ims support。 正常网络: ims_Vops_3GPP 1 (0x1) nwk_feature_supp_inc 1 (0x1)nwk_feature_supportedlength 2 (0x2)mpsi 0 (0…

JVM中篇:字节码与类的加载篇-03-类的加载过程(类的生命周期)详解

笔记来源:尚硅谷 JVM 全套教程,百万播放,全网巅峰(宋红康详解 java 虚拟机) 文章目录 1. 概述大厂面试题 2. 过程一:Loading(加载)阶段2.1. 加载完成的操作2.2. 二进制流的获取方式2…

设置文本的颜色

AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"><applicationandroid:allowBackup"true"android:icon"mipmap/ic_launcher…

如何使用查询路由构建更先进的 RAG

前言 目前大部分RAG的实践方案都是通过检索模型从外部数据库中获取与输入相关的文档或信息&#xff1b;然后&#xff0c;将这些信息与输入结合&#xff0c;输入到生成模型中进行文本生成。这种方案往往会有一个问题就是所有的数据都存储在一起&#xff0c;但这往往是没法在生产…

PCB寄生电容的影响,计算方法和消除措施

什么是PCB寄生电容&#xff1f; 寄生电容是存在于由绝缘体隔开的两个导电结构之间的虚拟电容&#xff0c;是PCB布局中的一种效应&#xff0c;其传播的信号表现为电容&#xff0c;但并不是真正意义上的电容。 寄生电容有什么影响&#xff1f; 在高速或高频电路板中&#xff0c…