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,一经查实,立即删除!

相关文章

pinia 重置状态插件

一、前言 测试提出,登出登录后,再次进入页面后。页面的查询项非初始状态。检查后发现,是因为查询项的值存到了store呢,从store中获取,故需要一个重置store的方法 二、pinia 查阅pinia官网后,发现pinia提…

请求分页存储管理方式

目录 请求分页中的硬件支持 1. 请求页表机制 2. 缺页中断机构 硬件支持的详细工作流程 示例代码 请求分页中的内存分配 最小物理块数的确定 分配方式 分配公平性 请求分页存储管理方式中的内存分配策略 具体示例 页面调入策略 最近最久未使用(LRU, Leas…

(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 被广泛用作计算…

linux常用操作命令汇总

各个软件安装步骤流程 jdk 链接: mysql 链接: redis 要查询 Linux 上各个应用程序占用的内存 要查询 Linux 上各个应用程序占用的内存,可以使用 top 或 ps 命令结合其他工具来实现。下面介绍两种方法 方法一:使用 top 命令 打…

Access数据中的SQL偏移注入

使用场景: 目标数据表的字段较多,无法一一获取的时候,尝试使用偏移注入的方式实现SQL注入。 原理: 例如:一个表有6个字段,而你想获取的目标表admin的字段不知道,此时可以使用联合查询的方式获…

反射型xss靶场练习

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

12、架构-流量治理之服务容错

概述 容错性设计(Design for Failure)是微服务的另一个核心原 则,也是笔者书中反复强调的开发观念转变。不过,即使已经有一定 的心理准备,大多数首次将微服务架构引入实际生产系统的开发者, 在服务发…

web前端 麦子学院:探索前端技术的无尽奥秘

web前端 麦子学院:探索前端技术的无尽奥秘 在数字化浪潮汹涌的时代,Web前端技术作为连接用户与互联网的桥梁,正以其独特的魅力吸引着无数开发者。麦子学院,作为前端技术学习的殿堂,为我们提供了深入探索前端技术的宝贵…

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

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

android:text 总为大写字母的原因

当设置某个 Button 的 text 为英文时&#xff0c;界面上显示的是该英文的大写形式&#xff08;uppercase&#xff09;。例如&#xff1a; <Buttonandroid:id"id/btn"android:layout_width"wrap_content"android:layout_height"wrap_content"…

centos7 安装 mysql5.7 LTS

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

Python 中的内存管理机制

Python 的内存管理机制主要由两个部分组成&#xff1a;垃圾回收机制和引用计数。 垃圾回收机制主要负责检测和回收不再被使用的内存。Python 使用的是自动垃圾回收机制&#xff0c;也就是说程序员不需要手动释放内存。Python 的垃圾回收机制采用了引用计数的方法来追踪和回收不…

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

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

git合并多个项目并保留提交版本记录

目录 一、场景 二、合并步骤 1.本地新建 all 目录&#xff0c;并初始化 2.在 all 中添加 a&#xff0c;b&#xff0c;c 的远程分支 3.验证是否添加成功 4.在 all 目录下&#xff0c;获取 a, b,c 的 master 分支数据 5.合并项目并移动到子目录中 6.推送 all 的 master 分支…

二开版微交易系统

下载地址&#xff1a;二开版微交易系统

集成学习概述

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

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

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

规范系统运维:系统性能监控与优化的重要性与实践

在当今这个高度信息化的时代&#xff0c;企业的IT系统运维工作显得尤为关键。其中&#xff0c;系统性能监控和优化是运维工作中不可或缺的一环。本文旨在探讨规范系统运维中系统性能监控与优化的重要性&#xff0c;并分享一些实践经验和策略。 一、系统性能监控与优化的重要性…

RAGFlow 学习笔记

RAGFlow 学习笔记 0. 引言1. RAGFlow 支持的文档格式2. 嵌入模型选择后不再允许改变3. 干预文件解析​4. RAGFlow 与其他 RAG 产品有何不同&#xff1f; ​5. RAGFlow 支持哪些语言&#xff1f; ​6. 哪些嵌入模型可以本地部署&#xff1f; ​7. 为什么RAGFlow解析文档的时间比…

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

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