Kafka集群架构服务端核心概念

目录

Kafka集群选举

controller选举机制

Leader partition选举

leader partition自平衡

partition故障恢复机制

follower故障

leader故障

HW一致性保障

HW同步过程

Epoch


Kafka集群选举

1. 在多个broker中, 需要选举出一个broker, 担任controller. 由controller来管理整个集群中的分区和副本状态.

2. 在同一个topic下, 需要从多个partition中选举出一个leader节点, 来负责和客户端的交互, 优先写入, 同步给follower 

controller选举机制

        当集群kafka启动时, 所有的broker会尝试往zookeeper创建一个/controller的临时节点, 将自己的brokerid写入其中.zookeeper机制, 只会保证有一个broker写入成功, 成为controller.

        由于是临时节点, zookeeper需要应用一直保持连接状态, 如果检测不到应用的心跳, zookeeper会删除临时节点, 同时会给监听该节点的客户端发送广播事件, 其他follower broker收到事件后, 会重新竞争controller.

客户端同时往zookeeper写入, 第一个写入成功(临时节点), 成为leader, 当leader挂掉, 临时节点被移除, 监听机制监听下线,重新竞争leader, 客户端也能监听最新leader

controller还会监听一些关键节点, 并推送给其他broker

  • 监听Zookeeper中的/brokers/ids节点,感知Broker增减变化。
  • 监听/brokers/topics,感知topic以及对应的partition的增减变化。
  • 监听/admin/delete_topic节点,处理删除topic的动作。

Leader partition选举

        一个topic的消息是由多个partition来存储的, 在用kafka-topics.sh创建topic时, 可以通过参数--partitions指定partition数量, 通过--replication-factors参数指定每个Partition有几个备份. 在一个partition的备份中, 会选举出一个leader, 来负责和客户端的交互, 以及同步数据给follower节点

partition参数:

  • AR: Assigned Replicas, 分区中的所有副本, 包括存活和不存活
  • ISR: 服务正常, 能够与leader保持通信的Follower副本
  • OSR: 从ISR踢出的节点, 有问题或延迟过多的副本

选举过程: Replicas中越靠前越优先选取, 并且存在ISR, 也就是正常的服务, 被选为leader

leader partition自平衡

        经过partiton选举, 可能造成大量leader存在同一个broker节点, 导致该broker压力明显大于其他broker, 影响集群性能. 为此,Kafka设计了Leader Partition自动平衡机制,当发现Leader分配不均衡时,自动进行Leader Partition调整。

        kafka选举, 会把AR当中的第一个节点就应该是Leader节点。这种选举结果成为preferred election 理想选举结果。Controller会定期检测集群的Partition平衡情况,在开始检测时,Controller会依次检查所有的Broker。当发现这个Broker上的不平衡的Partition比例高于leader.imbalance.per.broker.percentage阈值时,会触发一次Leader Partiton的自平衡。也可以手动执行kafka-leader-election.sh脚本触发自平衡.

注意: Leader partition自平衡是一个很重的操作, 涉及大量消息转移和同步, 并且可能会丢消息. 在对性能要求较高的系统, 可以关闭自平衡, 设置auto.leader.rebalance.enable=false, 在业务不繁忙时候, 运维手动执行自平衡命令, 提高可用性.

partition故障恢复机制

        当一组Partition中选举出了一个Leader节点后,这个Leader节点就会优先写入并保存Producer传递过来的消息,然后再同步给其他Follower。当Leader Partition所在的Broker服务发生宕机时,Kafka会触发Leader Partition的重新选举。Kafka为了保证消息能够在多个Parititon中保持数据同步,内部记录了两个关键参数

  • Leo: 每个Partition的最后一个Offset
  • HW: 一组Partiton中最小的LEO

        partition每收到一条生产者发送的消息, LEO就会+1, follower从leader同步过来一条消息, LEO也会+1. follower从leader同步消息时, 会把自己的LEO传给leader, leader就会统计最小值, 同步给所有follower.

        leader认为HW以前的消息, 也就是所有副本都存在的消息才是安全的, 可以被消费者拉取消费. 而HW之前的消息, 可能会丢失, 被认为不安全的.当一条消息发送到leader, 不会立刻让消费者感知, 而是等follower同步, 推进HW, 当HW大于消息时, 消费者才能消费, 

follower故障

如果是Follower发生故障,这不会影响消息写入,只是少了一个备份

处理流程:

  1. 将故障的follower节点踢出ISR, 其他leader和follower正常工作
  2. 当故障follower恢复时, 不会立即加入ISR, 而且先同步消息, 把本地记录上一次HW, 并把大于HW的消息丢弃, 去leader同步消息
  3. 该follower的LEO大于partition的HW时, 假如ISR

leader故障

  1. 从ISR中选举出新的leader, 可能消息还未同步, 新leader的LEO小于老leader的LEO
  2. 其他follower会把大于HW的消息删除, 再从新leader同步消息
  3. 老leader恢复后, 会以follower身份加入, 也是先删大于HW, 再同步消息

HW一致性保障

HW同步过程

  • follower先从leader拉取消息, 才能往leader上报LEO
  • 当所有follower都上报后, leader才能计算HW值
  • follower下一次拉取消息时, 才能更新HW

        leader和follower的LEO是存在延迟的, 所以存在HW不一致问题. 当Leader切换时, HW不一致, follower按照自己的HW就行恢复数据, 可能造成数据不一致. Kafka设计Epoch来保证HW一致性

Epoch

        Epoch由版本号和消息offset组成, 例如(1,100), 代表版本1, 一个单调递增的版本号, 当leader partiton发生变更时, 版本加一,  100表示当前partition写入第一条消息偏移量.

        Broker会将这个epoch数据保存到内存中,并且会持久化到本地一个leader-epoch-checkpoint文件当中。leader-epoch-checkpoint会在所有Follower Partition中同步。当Leader Partition有变更时,新的Leader Partition就会读取这个Epoch记录,更新后添加自己的Epoch记录。

        其他Follower Partition要更新数据时,不再靠自己记录的HW值判断拉取消息的起点, 而是根据最新的epoch来判断。

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

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

相关文章

深入理解 Git 分支管理:提升团队协作与开发效率

目录 前言1 什么是分支2 分支的好处2.1 并行开发的支持2.2 独立性与隔离性2.3 灵活的版本控制2.4 提高安全性和代码质量2.5 项目历史的清晰记录 3 Git 分支操作命令3.1 git branch -v3.2 git branch 分支名称3.3 git checkout 分支名称3.4 git merge 分支名称3.5 git rebase 分…

RabbitMQ的概念与使用

什么是MQ? MQ 是消息队列(Message Queue)的简称。消息队列是一种应用程序间通信的方式,用于在不同的应用程序之间传递消息。它通过解耦发送者和接收者之间的直接依赖关系,提供了一种异步、可靠的消息传递机制。 什么是…

爬虫是什么?起什么作用?

【爬虫】 如果把互联网比作一张大的蜘蛛网,数据便是放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己得猎物(数据)。这种解释可能更容易理解,官网的,就是下面这个。 爬虫是一种自动…

红日靶场-2

目录 前言 外网渗透 外网渗透打点 1、arp探测 2、nmap探测 3、nikto探测 4、gobuster目录探测 WebLogic 10.3.6.0 1、版本信息 2、WeblogicScan扫描 3、漏洞利用 4、哥斯拉连接 内网渗透 MSF上线 1、反弹连接 2、内网扫描 3、frpc内网穿透 4、ms17-010 5、ge…

第十三章 常用类(包装类和 String 相关类)

一、包装类 1. 包装类的分类 (1)针对八种基本数据类型相应的引用类型—包装类 (2)有了类的特点,就可以调用类中的方法。 2. 包装类和基本数据类型的转换 (1)jdk5 前的手动装箱和拆箱方式 publ…

Unity预设体

目录 预设体是什么? 如何创建预设体? 如何修改预设体? 如何删除预设体? 预设体是什么? Unity中的预设体(Prefab)是一种可重复使用的游戏对象模板。它允许开发者创建一个或多个游戏对象&…

模型评估系列:回归模型的评估指标介绍和代码实践

文章目录 1. 简介2. 回归评估指标2.1 平均绝对误差(MAE)2.2 均方误差(MSE)2.3 均方根误差(RMSE)2.4 R平方(决定系数)2.5 调整后的R平方2.6 交叉验证的R22.7 回归评估指标 - 结论 3 设…

OpenCV-10mat的深浅拷贝

一.Mat介绍 mat是OpenCV是在C语言用来表达图像数据的一种数据结构,在Python转换为numpy的ndarray. mat是由header和date组成,header中记录了图片的维数、大小、数据类型等信息. 例如:cv2.imshow(winname, mat&#…

基于Boosting的力扣题目建模分析

基于Boosting的力扣题目建模分析 1 背景介绍2 数据说明3 描述性分析3.1 分类问题描述性分析3.2 回归问题描述性分析 4 建模分析4.1 Boosting概述4.2 AdaBoost算法4.2.1 算法概述4.2.2 算法实现 4.3 提升树算法4.3.1 算法概述4.3.2 算法实现 5 总结 1 背景介绍 随着大数据、人工…

2024 年全球顶级的 4 款 PDF 转换器软件

PDF 是一种广泛使用的共享文档和文件的格式。但是,有时您可能需要将 PDF 文件转换为其他格式(例如 Word 或 Excel),以便编辑或操作内容。这就是 PDF 转换器软件派上用场的地方。 有许多 PDF 转换器软件可供选择,有免费…

day06

文章目录 一、流程控制1. 作用2. 分类1)顺序结构2)选择结构1. if语句2. switch语句 3)循环结构 二、函数1. 作用2. 语法3. 使用4. 匿名函数5. 作用域 一、流程控制 1. 作用 控制代码的执行顺序 2. 分类 1)顺序结构 从上到下依…

openGauss学习笔记-170 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用合并方式更新和插入数据

文章目录 openGauss学习笔记-170 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用合并方式更新和插入数据170.1 前提条件170.2 操作步骤 openGauss学习笔记-170 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用合并方式更新和插入数据 在用户需要将…

T-Dongle-S3开发板信息

相关学习网站 ESP32保姆级教程开始学习ESP32_哔哩哔哩_bilibili Wokwi - Online ESP32, STM32, Arduino Simulator T-Dongle-S3 资料:https://spotpear.cn/index/study/detail/id/1069.html 主控芯片: ESP32-S3 Xtensa 芯片集成了 Xtensa 32 位 LX7 双核处理器…

数据校园服务管理系统,教育平台可视化界面(教育资源信息化PS文件)

大屏组件可以让UI设计师的工作更加便捷,使其更高效快速的完成设计任务。现分享大数据校园服务管理系统、科技教育平台大数据可视化界面、教育资源信息化大数据分析等Photoshop源文件,文末提供完整资料,供UI设计师们工作使用。 若需其他 大屏…

手机无人直播的兴起

近年来,随着科技的不断进步和智能手机的普及,手机无人直播成为了一种新兴的传媒方式。手持手机,不经过镜头操作人员的干预,通过直播平台实时分享自己的所见所闻,成为了越来越多人的选择。手机无人直播的盛行离不开以下…

dubbo-admin连接虚拟机中的zookeeper报错zookeeper not connected

目录 前言 解决过程 总结 前言 可以优先查看总结看能否解决大家的问题,如果不能解决不需要查看解决过程浪费时间了。 解决过程 该问题卡住我很久,网上大多数文章都是修改配置文件中的连接超时时间,即修改如下内容 dubbo.registry.tim…

HTML期末复习,重要知识点摘录

HTML复习知识点摘录 1.html基本模板 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body><h1>我的第一个标题</h1> <p>我的第一个段落。…

ubuntu 22.04 安装mysql服务

完整内容&#xff1a; https://developer.aliyun.com/article/1260321 # 安装服务 sudo apt install mysql-server# 按向导设置root密码 sudo mysql_secure_installation# 使用设置的密码登录 sudo mysql -u root -p也可以使用工具登录&#xff0c;例如: navicat for mysql

【图的应用四:关键路径】- 用 C 语言实现关键路径

目录 一、AOE-网 二、算法的实现 2.1 - ALGraph.h 2.2 - ALGraph.c 2.3 - Test.c 一、AOE-网 与 AOV-网相对应的是 AOE-网&#xff08;Activity On Edge&#xff09;&#xff0c;即以边表示活动的网。AOE-网是一个带权的有向无环图&#xff0c;其中&#xff0c;顶点表示事…

SpringSecurity深度解析与实践(3)

这里写自定义目录标题 引言SpringSecurity之授权授权介绍java权限集成 登录失败三次用户上锁 引言 SpringSecurity深度解析与实践&#xff08;2&#xff09;的网址 SpringSecurity之授权 授权介绍 Spring Security 中的授权分为两种类型&#xff1a; 基于角色的授权&#…