小工具      在线工具  汉语词典  css  js  c++  java

KafKa - 控制器作用 及 选举策略

消息队列,kafka 额外说明

收录于:112天前

一、KafKa控制器作用

kafka 中分为 brokerpartition 分区,其中分区副本在前几篇文章中都进行了讲解,本篇文章针对 broker 进行分析,其中在 kafka 集群中,一个broker一般就表示一台物理机器,那机器之间的协作是怎样的呢?

其实会有一个broker选举成为Kafka Controller 控制器 角色,它主要负责维护集群中所有分区和副本的状态,当某个分区的 Leader 节点发生宕机(一个分区中存在多个不同的副本,只有Leader副本提供对外服务),该控制器将负责该分区选举Leader副本,当检测到某个分区的ISR分区副本数据中发生变化的时候该控制器负责通知给所有的broker,当某个topic增加分区数量时,由控制器负责分区重新分配。

下面是控制器的作用:

  • 主题管理(创建、删除、增加分区)

    这里的主题管理,就是指控制器帮助我们完成对 Kafka 主题的创建、删除以及分区增加的操作。换句话说,当我们执行kafka-topics 脚本时,大部分的后台工作都是控制器来完成的。

  • 分区重分配

    分区重分配主要是指,kafka-reassign-partitions 脚本提供的对已有主题分区进行细粒度的分配功能。这部分功能也是控制器实现的。

  • 集群成员管理

    自动检测新增 BrokerBroker 主动关闭及被动宕机。这种自动检测是依赖于ZooKeeperWatch 功能和 ZooKeeper 的临时节点组合实现的。比如,控制器组件会利用Watch 机制检查 ZooKeeper/brokers/ids 节点下的子节点变化情况。

    当有新 Broker 启动后,它会在 /brokers 下创建专属的 znode 节点。一旦创建完毕,ZooKeeper 会通过 Watch 机制将消息通知推送给 Broker 控制器,这样,控制器就能自动地感知到这个变化,进而开启后续的新增 Broker 作业。

    侦测 Broker 存活性还是依赖于 ZooKeeper的临时节点。每个 Broker 启动后,会在 /brokers/ids 下创建一个临时 znode。当 Broker 宕机或主动关闭后,该 BrokerZooKeeper 的会话结束,这个 znode 会被自动删除。同理,ZooKeeperWatch 机制将这一变更推送给Broker 控制器,这样控制器就能知道有 Broker 关闭或宕机了,从而进行后续处理。

  • 数据服务

    控制器的最后一大类工作,就是向其他 Broker 提供数据服务,控制器上保存了最全的集群元数据信息,其他所有 Broker 会定期接收控制器发来的元数据更新请求,从而更新其内存中的缓存数据。

    当控制器发现一个 broker 离开集群,便会检测该broker 下是否有leader 分区,如果存在,控制器会依次遍历每个分区,根据 ISR 确定新的 leader,然后向所有 broker 发送消息,该请求消息包含谁是新的 leader 以及谁是 follower 。随后,新的 Leader 开始处理来自生产者和消费者的请求,Follower 用于从新的 Leader 那里进行复制。

二、控制器的故障选举策略

从上面就可以看出,控制器十分依赖于 ZooKeeper的临时节点。当Broker 控制器宕机之后,该对应的临时节点会被删除,其他的Broker 会自动感知,从新进入竞选Broker控制器。

其实现原理类似给予 ZooKeeper 的分布式锁的实现,利用临时节点的唯一性,以及 ZooKeeper 的事件通知机制进行选举出控制节点。

剩下存活的 Broker 会创建相同的临时节点,谁能够创建成功 谁就是为Broker控制器如果没有创建该临时节点成功的Broker,订阅该临时节点,如果当它宕机之后,会发送事件通知给没有创建成功Broker从新开始竞争控制器管理者。

. . .

相关推荐

额外说明

nginx监控工具

    nginx-rrd   图形化监控

额外说明

JAVA08_Stream流anyMatch、allMatch和noneMatch的区别

①. allMatch全匹配 ①. 判断数据列表中全部元素都符合设置的predicate条件,如果是就返回true,否则返回false,流为空时总是返回true ②. 接口定义:boolean allMatch(Predicate<? super T>

额外说明

【JAVA-Day04】Java关键字和示例:深入了解常用关键字的用法

Java关键字和示例:深入了解常用关键字的用法 摘要 Java 关键字、标识符和命名规范 一、Java 关键字 常用关键字`DEMO` 1. 示例代码使用 `if` 和 `else` 关键字: 2. 示例代码使用 `for` 循环: 3. 示例代码使用

额外说明

Unity中Shader的渲染排序Tags{“Queue“ = “Transparent“}

文章目录 前言 一、在Unity中渲染排序一般是固定的几个层级,透明 和 半透明是以 2500 为 分界点,渲染层级 从 低 到 高 二、渲染队列 可以 在 SubShader 或 Pass 中写 前言 Unity中Shader的渲染排序 一、在Unit

额外说明

阿里Java诊断工具 arthas - 介绍及指令大全

一、arthas Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执

额外说明

AI实战营第二期 笔记5——MMPretrain代码课

文章目录 摘要 MMPreTrain实战 安装 推理 OR 使用API 数据集 训练与测试 微调 摘要 MMPretrain 是一个全新升级的预训练开源算法框架,旨在提供各种强大的预训练主干网络, 并支持了不同的预训练策略。MMPretrain 源自著名

额外说明

Typora的安装和授权(2023)

文章目录 1. 文章引言 2. Typora的下载 3. Typora的安装 4. Typora的授权 1. 文章引言 我们在开发的过程中,不可或缺地要使用到markdown文本,支持markdown文本的编辑器有很多,其中Typora便是一款不错的编辑

额外说明

Python编程基础01:搭建Python开发环境

文章目录 一、Python概述 (一)Python为何物 (二)Python的发展前景 1、IEEE Spectrum排行榜 2、TIOBE编程语言排行榜 3、了解Python招聘数据 (三)Python的就业岗位 1、Python应用范围 2、学会Py

额外说明

Exception in thread “main“ java.lang.ClassNotFoundException解决方案

启动springboot项目出现以下错误 Exception in thread "main" java.lang.ClassNotFoundException: com.ix.Application at java.net.URLCla

额外说明

Win11系统提示找不到msvcp140_2.dll文件的解决办法

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个msvcp140_2.dll文件进行安装(前提是找到适合的版本

ads via 小工具