Kafka副本与ISR设计(I)

在Kafka中一个分区日志其实就是一个备份日志,kafka利用多个相同备份日志来提升系统的可用性。这些备份日志其实就是所谓的副本。网络

Kafka的副本具备leader副本和follower副本之分,leader副本为客户端提供读写请求,follower副本只是用于被动地从leader副本中同步数据,对外不提供读写服务。spa

Kafka的全部节点全部副本假设都在正常运行,那么leader副本会一直不变,可是所谓世界上没有绝对稳定的系统,一旦kafa的leader副本节点出现了问题,那么follower副本须要竞争上岗成为leader副本,可是并非全部的follower副本都有资格竞争上岗,很明显假设一个follower落后的数据远远少于leader副本,它是没有资格的。所以Kafka内部维护了一组具备资格的follower副本,他们统称ISR。日志

ISR中的副本会被剔除,也会有新增。blog

关键的概念点

下图主要讲述了Kafka日志中重要概念,下图的相关概念事关生产、消息消费、ISR以及副本同步机制。
1.png进程

  • 首条消息位移(offset):保存了该副本中所含的第一条消息的offset
  • 日志高水印值(HW):leader副本的HW决定了消费者所能消费的消息范围,低于等于HW的消息都可被消费者消费
  • 结束位移(LEO):LEO老是指向下一条消息写入的位置,处在leader的HW和LEO之间的消息表示还未彻底备份。只有全部处于ISR中副本都更新了本身LEO之后,leader的HW才会右移表示写入消息成功。

ISR

ISR其实就是Kafka内部维护的具备竞争上岗的一组与leader同步follower的副本集合。rem

follower副本与leader副本不一样步的缘由:kafka

  • 同步数据请求速度追不上:follower副本在一段时间没法追上leader副本端的消息接收速度。好比follower副本的网络I/O阻塞,这回致使follower副本同步leader副本的速度大大下降
  • 进程卡住:follower副本一段时间没法向leader发出请求,好比follower频繁的进行GC
  • 新建立的副本:用户主动增长副本数,新建立的副本在启动后会追赶leader的进度,这段时间新增的follower副本一般与leader副本是不一样步的
replica.lag.max.messages

该参数用来检测同步数据请求速度追不上的问题,若是ISR中的副本消息数落后于leader副本的消息数超过了该参数的设置,将会被踢出ISR。同步

这个参数在kafka0.9.0.9版本以后被移除,为何被移除呢?it

确定是有他的弊端的。考虑如下这个状况,kafka在的生产者的生产速率不是平稳的,会有高峰会有低峰,在高峰的时候,因为消息大量汇集产生,致使ISR中的消息与Leader的消息差超过了该数值,所以ISR中的副本将会被踢出。class

但随着生产消息速率的稳定和降低,而且此时follower副本也在全力追赶leader副本,当follower副本从新追上leader副本时,又会从新加入ISR。

replica.lag.max.ms

该参数用来检测另两种状况:若是在该时间内,follower副本没法向leader副本请求数据,那么将会被踢出ISR。

因为在新的版本中移除了replica.lag.max.messages参数的设置,所以replica.lag.max.ms也用于同步数据请求速度追不上问题的检测,但用在次问题的检测上时,检测机制是只要follower副本落后于leader的时间不持续性超过该参数即视为同步,若是持续性超过该参数即视为不一样步。

相关文章
相关标签/搜索