一、kafka replica

  1. 当某个topic的replication-factor为N且N大于1时,每个Partition都会有N个副本(Replica)。kafka的replica包含leader与follower
  2. Replica的个数小于等于Broker的个数,也就是说,对于每个Partition而言,每个Broker上最多只会有一个Replica,因此可以使用Broker id 指定Partition的Replica。
  3. 所有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

  1. 等待时间较长,降低可用性
  2. 或ISR中的所有Replica都无法恢复或者数据丢失,则该Partition将永不可用

2、选择第一个恢复的Replica为新的Leader,无论它是否在ISR中

  1. 并未包含所有已被之前Leader Commit过的消息,因此会造成数据丢失
  2. 可用性较高

kafka HA ISR机制相关推荐

  1. Kafka之ISR机制的理解

    Kafka对于producer发来的消息怎么保证可靠性? 每个partition都给配上副本,做数据同步,保证数据不丢失. 副本数据同步策略 和zookeeper不同的是,Kafka选择的是全部完成同 ...

  2. kafka的isr机制

    Data Replication Kafka 的 Data Replication 需要解决如下问题: 怎样 Propagate 消息 在向 Producer 发送 ACK 前需要保证有多少个 Rep ...

  3. Kafka ISR机制

    kafka的ISR机制被成为"不丢消息"机制.在说ISR机制前,先讲一下kafka的副本(replica). kafka的Replica kafka的topic可以设置有N个副本( ...

  4. kafka的isr理解

    问题如下: kafka 为了保证数据的一致性使用了isr 机制 1 首先我们知道kafka 的数据是多副本的,每个topic 下的每个分区下都有一个leader 和多个follower, 2 每个fo ...

  5. I·See·Right 遇见kafka的ISR

    ​目录 1.kafka霸道性能之揭开日志底层存储的面纱 2.HW?LEO?你俩一起搞事情? 3.ISR机制底层如何设计? 这是2020年的第一篇文章,新的开始,与君共勉.前文小白简单的去剖析了肌霸先生 ...

  6. Kafka中副本机制的设计和原理

    Kafka中一个分区可以拥有多个副本,副本可分布于多台机器上.而在多个副本中,只会有一个Leader副本与客户端交互,也就是读写数据.其他则作为Follower副本,负责同步Leader的数据,当Le ...

  7. 图解:Kafka 水印备份机制

    作者 | 张乘辉 责编 | 刘静 高可用是很多分布式系统中必备的特征之一,Kafka 日志的高可用是通过基于 leader-follower 的多副本同步实现的,每个分区下有多个副本,其中只有一个是 ...

  8. kafka分区副本机制

    Kafka为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力.同一分区的不同副本中保存的是相同消息(在同一时刻,副本之前并非完全一样),副本之间是"一主多从" ...

  9. Kafka的 ISR 概念和作用

    一.ISR 是什么 首先,ISR 的全称叫做: In-Sync Replicas (同步副本集), 我们可以理解为和 leader 保持同步的所有副本的集合. 一个分区的所有副本集合叫做 AR( As ...

最新文章

  1. 林元庆创办的AiBee科技完成新融资,要赋能B端生意
  2. 一篇长文带你在python里玩转Json数据
  3. 有程序在记录你的键盘输入_12个用Java编写基础小程序amp;经典案例(收藏)
  4. python费用结算系统_python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)
  5. 【NLP】10000亿参数!英伟达用3072块A100训出史上最大最贵GPT!
  6. 【Python】30天进阶Python!这个Github项目你值得拥有!
  7. 身边的设计模式(三):抽象工厂 与 依赖注入
  8. 【转】visual studio 2019 (vs) 显示右侧缩略图_缩略图_滚动条
  9. 获取Access中的所有用户表(例子)
  10. Project Euler Problem 27 Quadratic primes
  11. 引用服务器js文件写法,Vue 公共js文件如何放在服务器上引用
  12. hyper-v redhat使用新网卡
  13. Reflex WMS入门系列三十:不使用RF功能做上架
  14. 现代操作系统 第一章 引论
  15. 微信营销很简单,做好这些你就是大师
  16. [ 程序员那些事 ]程序员会修电脑?程序员到底是干嘛的?
  17. 解决缺少 SHA256.h文件
  18. 企业对接Walmart平台常见报错
  19. 读论文(4)——FPN
  20. cs与msf的联合使用

热门文章

  1. vue实现数据无缝循环滚动
  2. MEM/MBA数学基础(01)预备知识
  3. python第三周笔记_第三周 day3 python学习笔记
  4. linux中mysql的安装与卸载_linux的mysql安装与卸载
  5. CF13A 最大公约数加进制转换
  6. 栈的应用之中缀表达式转后缀
  7. 每日新闻:百度首个无人驾驶运营项目落户武汉;微软叫停Linux专利战;网易携手芬兰电信Elisa;瑞星华为联合发布云安全解决方案...
  8. Python学习笔记-字符串相关
  9. openEuler上一键部署opengauss数据库
  10. unity+高通vuforia开发增强现实(AR)教程(二)