LEO和HW概念

LEO:指的是每个副本最大的offset;
HW:指的是消费者能读到的最大的offset,ISR队列中最小的LEO。

Kafka集群故障处理细节_数据一致性
HW:
上图消费者最多能读到12,因为假如说Leader挂掉了,那么消费者读到的话,肯定是读整个集群中offset最小的那个.这个offset最小就意味着所有机器的offset肯定大于等于这个offset , 假如说A机器是 300offset,B机器是350offset ,C机器是400offset,那么消费者能读到的数据就是起始偏移量为300的数据.
LEO就是每个副本最大的Offset值.

follower故障

follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了。

leader故障

leader发生故障之后,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。
注意:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。