ISR列表频繁切换问题

一、故障现象

分区ISR列表出现频繁Expanding, Shinking,导致broker不可用

ISR列表频繁切换问题 - 图1

二、排查思路

1、什么是ISR

  • leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica),每个Partition都会有一个ISR,而且是由leader动态维护。
  • 如果一个flower比一个leader落后太多,或者超过一定时间未发起数据复制请求,则leader将其重ISR中移除。

2、什么情况会造成ISR频繁切换

  • 网络抖动造成数据同步慢
  • 磁盘IO高造成数据同步慢

3、影响ISR判定条件的参数

  1. # 如果leader发现flower超过10秒没有向它发起fech请求,那么leader考虑这个flower是不是程序出了点问题
  2. # 或者资源紧张调度不过来,它太慢了,不希望它拖慢后面的进度,就把它从ISR中移除。
  3. rerplica.lag.time.max.ms=10000
  4. # 相差4000条就移除
  5. rerplica.lag.max.messages=4000

三、排查过程

1、通过命令查看ISR列表情况

kafka-topics.sh —zookeeper br-apm-005:2181/kafka —describe

ISR列表频繁切换问题 - 图2

2、通过ping测试检查kafka机器之间是否出现网络抖动情况

ISR列表频繁切换问题 - 图3

3、检查磁盘io情况

ISR列表频繁切换问题 - 图4

四、故障原因

磁盘IO高造成数据同步慢,导致ISR列表频繁切换。

五、处理过程

可以通过修改kafka参数来降低ISR列表频繁切换。但是要解决的最根本问题还是要IO高的问题。

  1. # 如果leader发现flower超过10秒没有向它发起fech请求,那么leader考虑这个flower是不是程序出了点问题
  2. # 或者资源紧张调度不过来,它太慢了,不希望它拖慢后面的进度,就把它从ISR中移除。
  3. rerplica.lag.time.max.ms=60000
  4. # 相差4000条就移除
  5. rerplica.lag.max.messages=40000
  6. # 拉取线程数
  7. num.replica.fetchers=4

erplica.lag.max.messages=40000

拉取线程数

num.replica.fetchers=4