0%

故障时保证数据一致性

故障时保证数据一致性

kafka中还存在两个概念

LEO(Log End Offset):表示当前日志文件中下一条要写入的消息的offset,即当前日志分区中最后一条消息的offset值加一,每个副本都有自己的LEO

HW(High Watermark):指消费者能见到的最大的offset,ISR队列中最小的LEO。将一个分区对应的ISR 队列中最小的LEO作为HW,HW之前的消息表示已提交的消息,对消费者是可见的,消费者最多只能消费到HW所在的位置,HW之后的消息表示还没有被Follower副本同步完成。每个副本都有自己的HW,副本Leader和Follower各自负责更新自己的HW状态

这两个概念主要是用来保证kafka在发生故障时的数据一致性问题

  • 如果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同步数据

注意:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复

欢迎关注我的其它发布渠道