kafka HA ISR机制
一、kafka replica
- 当某个topic的replication-factor为N且N大于1时,每个Partition都会有N个副本(Replica)。kafka的replica包含leader与follower。
- Replica的个数小于等于Broker的个数,也就是说,对于每个Partition而言,每个Broker上最多只会有一个Replica,因此可以使用Broker id 指定Partition的Replica。
- 所有Partition的Replica默认情况会均匀分布到所有Broker上。
二、Data Replication如何Propagate(扩散出去)消息?
每个Partition有一个leader与多个follower,producer往某个Partition中写入数据是,只会往leader中写入数据,然后数据才会被复制进其他的Replica中。
数据是由leader push过去还是有flower pull过来?
kafka是由follower周期性或者尝试去pull(拉)过来(其实这个过程与consumer消费过程非常相似),写是都往leader上写,但是读并不是任意flower上读都行,读也只在leader上读,flower只是数据的一个备份,保证leader被挂掉后顶上来,并不往外提供服务。
三、Data Replication何时Commit?
同步复制: 只有所有的follower把数据拿过去后才commit,一致性好,可用性不高。
异步复制: 只要leader拿到数据立即commit,等follower慢慢去复制,可用性高,立即返回,一致性差一些。
Commit:是指leader告诉客户端,这条数据写成功了。kafka尽量保证commit后立即leader挂掉,其他flower都有该条数据。
kafka不是完全同步,也不是完全异步,是一种ISR机制:
1. leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护
2. 如果一个flower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除
3. 当ISR中所有Replica都向Leader发送ACK时,leader才commit
既然所有Replica都向Leader发送ACK时,leader才commit,那么flower怎么会leader落后太多?
producer往kafka中发送数据,不仅可以一次发送一条数据,还可以发送message的数组;批量发送,同步的时候批量发送,异步的时候本身就是就是批量;底层会有队列缓存起来,批量发送,对应broker而言,就会收到很多数据(假设1000),这时候leader发现自己有1000条数据,flower只有500条数据,落后了500条数据,就把它从ISR中移除出去,这时候发现其他的flower与他的差距都很小,就等待;如果因为内存等原因,差距很大,就把它从ISR中移除出去。
commit策略:
server配置
rerplica.lag.time.max.ms=10000# 如果leader发现flower超过10秒没有向它发起fech请求,那么leader考虑这个flower是不是程序出了点问题# 或者资源紧张调度不过来,它太慢了,不希望它拖慢后面的进度,就把它从ISR中移除。rerplica.lag.max.messages=4000 # 相差4000条就移除# flower慢的时候,保证高可用性,同时满足这两个条件后又加入ISR中,# 在可用性与一致性做了动态平衡 亮点
- 1
- 2
- 3
- 4
- 5
- 6
- 7
topic配置
min.insync.replicas=1 # 需要保证ISR中至少有多少个replica
- 1
Producer配置
request.required.asks=0# 0:相当于异步的,不需要leader给予回复,producer立即返回,发送就是成功,那么发送消息网络超时或broker crash(1.Partition的Leader还没有commit消息 2.Leader与Follower数据不同步),既有可能丢失也可能会重发# 1:当leader接收到消息之后发送ack,丢会重发,丢的概率很小# -1:当所有的follower都同步消息成功后发送ack. 丢失消息可能性比较低
- 1
- 2
- 3
- 4
- 5
- 6
四、Data Replication如何处理Replica恢复
leader挂掉了,从它的follower中选举一个作为leader,并把挂掉的leader从ISR中移除,继续处理数据。一段时间后该leader重新启动了,它知道它之前的数据到哪里了,尝试获取它挂掉后leader处理的数据,获取完成后它就加入了ISR。
五、Data Replication如何处理Replica全部宕机
1、等待ISR中任一Replica恢复,并选它为Leader
- 等待时间较长,降低可用性
- 或ISR中的所有Replica都无法恢复或者数据丢失,则该Partition将永不可用
2、选择第一个恢复的Replica为新的Leader,无论它是否在ISR中
- 并未包含所有已被之前Leader Commit过的消息,因此会造成数据丢失
- 可用性较高
kafka HA ISR机制相关推荐
- Kafka之ISR机制的理解
Kafka对于producer发来的消息怎么保证可靠性? 每个partition都给配上副本,做数据同步,保证数据不丢失. 副本数据同步策略 和zookeeper不同的是,Kafka选择的是全部完成同 ...
- kafka的isr机制
Data Replication Kafka 的 Data Replication 需要解决如下问题: 怎样 Propagate 消息 在向 Producer 发送 ACK 前需要保证有多少个 Rep ...
- Kafka ISR机制
kafka的ISR机制被成为"不丢消息"机制.在说ISR机制前,先讲一下kafka的副本(replica). kafka的Replica kafka的topic可以设置有N个副本( ...
- kafka的isr理解
问题如下: kafka 为了保证数据的一致性使用了isr 机制 1 首先我们知道kafka 的数据是多副本的,每个topic 下的每个分区下都有一个leader 和多个follower, 2 每个fo ...
- I·See·Right 遇见kafka的ISR
目录 1.kafka霸道性能之揭开日志底层存储的面纱 2.HW?LEO?你俩一起搞事情? 3.ISR机制底层如何设计? 这是2020年的第一篇文章,新的开始,与君共勉.前文小白简单的去剖析了肌霸先生 ...
- Kafka中副本机制的设计和原理
Kafka中一个分区可以拥有多个副本,副本可分布于多台机器上.而在多个副本中,只会有一个Leader副本与客户端交互,也就是读写数据.其他则作为Follower副本,负责同步Leader的数据,当Le ...
- 图解:Kafka 水印备份机制
作者 | 张乘辉 责编 | 刘静 高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 ...
- kafka分区副本机制
Kafka为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力.同一分区的不同副本中保存的是相同消息(在同一时刻,副本之前并非完全一样),副本之间是"一主多从" ...
- Kafka的 ISR 概念和作用
一.ISR 是什么 首先,ISR 的全称叫做: In-Sync Replicas (同步副本集), 我们可以理解为和 leader 保持同步的所有副本的集合. 一个分区的所有副本集合叫做 AR( As ...
最新文章
- 林元庆创办的AiBee科技完成新融资,要赋能B端生意
- 一篇长文带你在python里玩转Json数据
- 有程序在记录你的键盘输入_12个用Java编写基础小程序amp;经典案例(收藏)
- python费用结算系统_python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)
- 【NLP】10000亿参数!英伟达用3072块A100训出史上最大最贵GPT!
- 【Python】30天进阶Python!这个Github项目你值得拥有!
- 身边的设计模式(三):抽象工厂 与 依赖注入
- 【转】visual studio 2019 (vs) 显示右侧缩略图_缩略图_滚动条
- 获取Access中的所有用户表(例子)
- Project Euler Problem 27 Quadratic primes
- 引用服务器js文件写法,Vue 公共js文件如何放在服务器上引用
- hyper-v redhat使用新网卡
- Reflex WMS入门系列三十:不使用RF功能做上架
- 现代操作系统 第一章 引论
- 微信营销很简单,做好这些你就是大师
- [ 程序员那些事 ]程序员会修电脑?程序员到底是干嘛的?
- 解决缺少 SHA256.h文件
- 企业对接Walmart平台常见报错
- 读论文(4)——FPN
- cs与msf的联合使用
热门文章
- vue实现数据无缝循环滚动
- MEM/MBA数学基础(01)预备知识
- python第三周笔记_第三周 day3 python学习笔记
- linux中mysql的安装与卸载_linux的mysql安装与卸载
- CF13A 最大公约数加进制转换
- 栈的应用之中缀表达式转后缀
- 每日新闻:百度首个无人驾驶运营项目落户武汉;微软叫停Linux专利战;网易携手芬兰电信Elisa;瑞星华为联合发布云安全解决方案...
- Python学习笔记-字符串相关
- openEuler上一键部署opengauss数据库
- unity+高通vuforia开发增强现实(AR)教程(二)