• kafka数据一致性(HW只能保证副本之间的数据一致性,并不能保证数据不丢失ack或者不重复。)


      数据一致性问题:消费一致性和存储一致性

    例如:一个leader 写入 10条数据,2个follower(都在ISR中),F1、F2都有可能被选为Leader,例如选F2 .后面Leader又活了。可能造成每个副本数据不一致

    F1   8条

    F2   9条 

    LEO:每个副本的最后一个offset。例如 F1的LEO为8, F2的LEO为9

    HW(High Watermark):所有副本中最小的LEO。

    LEO:指的是每个副本最大的 offset;

    HW:指的是消费者能见到的最大的 offset,ISR 队列中最小的 LEO。

       为啥要引入HW?

    假设没有HW,消费者消费leader到19,下面消费者应该消费20。

    此时leader挂掉。选下面某个follower为leader,此时消费者找新leader消费数据,发现新Leader没有20数据,报错。

    1、如果leader故障

      leader 发生故障之后,会从 ISR 中选出一个新的 leader。之后,为保证多个副本之间的

    数据一致性(各个副本存储一致性),其余的 follower 会先将各自的 log 文件高于 HW 的部分截掉,然后从新的 leader 同步数据。

    假设图中follower2被选为leader,那么其余follower都截取到HW,leader不截取。并让其余follower同步新leader。

    2、follower 故障

      follower 发生故障后会被临时踢出 ISR,待该 follower 恢复后,follower 会读取本地磁盘 记录的上次的 HW,并将 log 文件高于 HW 的部分截取掉,从 HW 开始向 leader 进行同步。

       等该 follower 的 LEO 大于等于该 Partition 的 HW,即 follower 追上 leader 之后,就可以重 新加入 ISR 了。

  • 相关阅读:
    Runtime Type Information 运行时类型信息RTTI
    ADO实现单条记录的刷新
    TDataLink类说明
    编程实现文件关联
    咏南的连接池
    关系数据库系统PK面向对象数据库系统
    div+CSS编程技巧
    Hadoop编程笔记(一):Mapper及Reducer类详解
    如何统计博客园的个人博客访问量
    MapReduce编程模型:用MapReduce进行大数据分析
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/13423847.html
Copyright © 2020-2023  润新知