kafka的leader和follower

leader和follower

kafka的leader和follower是相对于分区有意义的,不是相对于broker。

因为每个分区都有leader和follower,

leader负责读写数据。

follower负责复制leader的数据保存到自己的日志数据中,并在leader挂掉后重新选举出leader。

kafka会再创建topic的时候尽量让分配分区的leader在不同的broker中,就是负载均衡。

与Zookeeper区分

zookeeper的leader负责读写,follower可以读取。

kafka的leader负责读写,follower不能读写数据(确保每个消费者消费的数据是一致的),kafka一个topic有多个分区leader,一样可以实现负载均衡。

AR/ISR/OSR

kafka的follower可以分为三类:AR ISR OSR

  • AR(Assigned Replicas)表示一个topic下的所有副本。
  • ISR(In-Sync Replicas)表示一个topic下正在同步的副本。
  • OSR表示(OUT-SYNC-Replicas)不再同步的副本。

AR=ISR+OSR

查看分区的ISR

使用Kafka Eagle查看某个Topic的partition的ISR有哪几个节点。

partition是创建的topic为test的  0 1 2 三个分区。

Log Size是日志文件的大小

Leader是leader副本在那个broker节点上

Replicas是它的副本在哪些broker节点上。

In sync Replicas是正在同步的副本(包括leader)

尝试关闭id为0的broker(杀掉该broker的进程),参看topic的ISR情况。

leader的选举

leader的选举对于消息的写入以及读取非常关键,此时有两个疑问:

  • kafka是如何确定partition的哪个副本是leader,那个副本是follower呢?
  • 某个leader崩溃后,怎么快速确定另一个leader呢?因为Kafka的吞吐量很高、延迟很低,所以选举leader必须非常快

leader崩溃,kafka如果处理

使用Kafka Eagle找到某个partition的leader,再找到leader所在的broker。在Linux中强制杀掉该Kafka的进程,然后观察leader的情况。

通过观察,我们发现,leader在崩溃后,Kafka又从其他的follower中快速选举出来了leader。

Controller

  • kafka启动的时候,会在所有的broker中选举出controller
  • 前面的leader和follower是针对partition的副本,而controller是针对broker的。
  • 创建topic或者添加分区,修改副本数量之类的管理任务都是交给controller完成的。
  • kafka分区leader的选举,也是由controller决定的。

Controller的选举

  • 在kafka集群启动的时候,每个broker都会尝试去Zookeeper上注册为controller(ZK临时节点)
  • 但是只有一个竞争成功,其他的broker会注册该节点的监视器。
  • 一但节点的状态发生变化,就可以进行处理。
  • Controller也是高可用的,一旦某个broker崩溃,其他的broker会重新注册为Controller。

Controller选举partition的leader

  • 所有Partition的leader选举都由controller决定.
  • controller会将leader的改变通过RPC的方式通知需要为此做出响应的Broker
  • controller读取当前分区的ISR,只要有一个Replica还幸存,就选择其中一个作为leader。
  • 如果该partition的所有Replica都已经宕机,则新的leader为-1

为什么不通过ZK的方式进行选举?

如果kafka是居于ZK进行选举,ZK的压力比较大,例如某个节点崩溃,这个节点上不仅仅只有一个leader,是有不少的leader需要选举,通过ISR可以快速选举。

leader的负载均衡

kafka中引入Preferred Replica的概念,意思是优先的Replica。

在ISR中第一个replica就是preferred-replica.

副本存放的第一个broker,肯定就是preferred-replica

执行以下脚本可以将preferred-replica设置为leader,均匀分配每个分区的leader。

./kafka-leader-election.sh --bootstrap-server node1.itcast.cn:9092 --topic 主题 --partition=1 --election-type preferred

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

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

相关文章

(2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干

Vision-LSTM: xLSTM as Generic Vision Backbone 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2 方法 3 实验 3.1 分类设计 4 结论 0. 摘要 Transformer 被广泛用作计算…

反射型xss靶场练习

反射型xss危害小,这里使用的xss靶场是常用的xss靶场:xss-labs。 当我们完成弹窗后就通过该关卡,说该关卡存在xss的一个漏洞并且可以解析js代码。 第一关: 这里没有过滤我们输入的代码:直接将js代码放在js代码中&a…

Linux下线程的互斥与同步详解

🤖个人主页:晚风相伴-CSDN博客 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 🙏如果内容有误或者有写的不好的地方的话&…

centos7 安装 mysql5.7 LTS

centos7 安装 mysql5.7 LTS 参考: https://blog.csdn.net/EB_NUM/article/details/105425622 可以在运行安装程序之前导入密钥: sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022第一步、下载MySQL 安装包: sudo wget h…

植物大战僵尸杂交版破解C++实现

文章目录 前言准备工作:基地址与偏移UI界面设计和绑定项目模板总览图生成与实现信号处理1、阳光值更新:BTN12、三种钱币值更新:BTN2-BTN43、冷却刷新:BTN54、锁定阳光:check15、无冷却:check26、OnTimer()和OnClose&am…

二开版微交易系统

下载地址:二开版微交易系统

集成学习概述

概述 集成学习(Ensemble learning)就是将多个机器学习模型组合起来,共同工作以达到优化算法的目的。具体来讲,集成学习可以通过多个学习器相结合,来获得比单一学习器更优越的泛化性能。集成学习的一般步骤为:1.生产一组“个体学习…

实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)

导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上,引入了一种新的实时目标检测方法,解决了YOLO以前版本在后处理和模型架构方面…

自动化装箱封箱解决方案:深度探讨其优势及故障处理技巧

在当今这个快节奏、高效率的时代,自动化装箱封箱解决方案以其独特的优势,正逐渐成为物流、仓储等行业的新宠。它不仅能大幅提升作业效率,还能显著降低人工成本,减少人为错误。星派将深度探讨自动化装箱封箱技术的显著优势&#xf…

【Vue】练习-mutations的减法功能

文章目录 一、需求二、完整代码 一、需求 步骤 二、完整代码 Son1.vue <template><div class"box"><h2>Son1 子组件</h2>从vuex中获取的值: <label>{{ $store.state.count }}</label><br><button click"handleA…

C# 界面控件中英切换

编程软件:VS 2015 需求:界面有两个按钮&#xff0c;点击可以将界面上所有控件进行不同语言的切换。 一共两种方案&#xff0c;个人认为第二种方案使用范围更广&#xff08;这里以中英文切换为例&#xff09;。 方案一:如图所示&#xff0c;建立两个资源文件 将所需控件的中英…

海思SS928(SD3403)部署YOLOv5-YOLOv7步骤详解

1. YOLO模型资料 本文档内容以yolov5-7.0工程、yolov5s模型为例。 a. 模型结构 详细的模型结构可以利用netron工具打开.pt或.onnx模型查看。 b. 模型参数即验证结果 其中,YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x为五种类型的预训练模型,其包含的检测类别相…

2024 cicsn ezbuf

文章目录 参考protobuf逆向学习复原结构思路exp 参考 https://www.y4ng.cn/posts/pwn/protobuf/#ciscn-2024-ezbuf protobuf 当时压根不知道用了protobuf这个玩意&#xff0c;提取工具也没提取出来&#xff0c;还是做题做太少了&#xff0c;很多关键性的结构都没看出来是pro…

Unity 集成 FMOD 音频管理插件 2.02

Unity 集成 FMOD 音频管理插件 2.02 3. 集成教程&#xff1a;3.1 设置Unity项目3.2 设置FMOD项目3.3 设置 FMOD for Unity3.4 添加声音&#xff1a;卡丁车引擎3.5 添加声音&#xff1a;氛围3.6 添加声音&#xff1a;音乐3.7 删除现有音频3.8 下一步 10. 脚本 API 参考10.1 基础…

Java锁的四种状态(无锁、偏向级锁、轻量级锁、重量级锁)

介绍 首先&#xff0c;我们需要明确一点&#xff1a;偏向级锁、轻量级锁、重量级锁只针对synchronized 锁的状态总共有四种&#xff0c;级别由低到高依次为&#xff1a;无锁、偏向锁、轻量级锁、重量级锁。 这四种锁状态分别代表什么&#xff0c;为什么会有锁升级&#xff…

在UI界面中实现3d人物展示

简要原理(设置双摄像机): 为需要展示的3D人物单独设置一个摄像机(只设置为渲染人物层级),主要摄像机的方向与人物方向一致,但摄像机需要需要旋转180,设置的角度自行进行微调创建一个Render Texture类型的组件用于存储摄像机渲染的内容UI上设置需要展示的图片区域,图片…

遍历目录

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 遍历在汉语中的意思是全部走遍&#xff0c;到处周游。在Python中&#xff0c;遍历是将指定的目录下的全部目录&#xff08;包括子目录&#xff09;及…

聪明人社交的基本顺序:千万别搞反了,越早明白越好

聪明人社交的基本顺序&#xff1a;千万别搞反了&#xff0c;越早明白越好 国学文化 德鲁克博雅管理 2024-03-27 17:00 作者&#xff1a;方小格 来源&#xff1a;国学文化&#xff08;gxwh001&#xff09; 导语 比一个好的圈子更重要的&#xff0c;是自己优质的能力。 唐诗宋…

AH股高开低走,创业板跌超2%,宁德时代下挫6%,微盘股指数反弹超5%

创业板跌2%&#xff0c;权重股宁德时代跌近6%&#xff1b;地产、光刻机概念股逆势大涨&#xff1b;券商股午后集体下跌&#xff0c;天风证券一度跌停。微盘股指数经历连跌后早盘反弹超5%。 内容提要 周五&#xff0c;A股高开后回落&#xff0c;午盘震荡回升。截至收盘&#x…

Python可视化 | 使用matplotlib绘制面积图示例

面积图是数据可视化中的一个有效工具&#xff0c;用于说明时间上的关系和趋势。它们提供了一种全面的、视觉上迷人的方法&#xff0c;通过熟练地将折线图的可读性与填充区域的吸引力相结合来呈现数值数据。 在本文中&#xff0c;我们将学习更多关于在Python中创建面积折线图的…