• Kafka的数据可靠与数据重复


    数据可靠:

    Kafka在将数据通过sender线程发往Broker集群之后,会等待每一个请求的ack。ack应答有三种级别

    • 0:生产者发送过来的数据,不需要等待数据落盘应答
    • 1:生产者发送过来的数据,Leader收到数据落盘后应答
    • -1(all):生产者发送过来的数据,Leader+isr队列中所有节点收齐数据落盘后应答。

    可靠性分析:

    • 0:丢数,生产者发送数据到Leader上,数据还没落盘,Leader挂了,导致数据丢失。
    • 1:丢数:生产者发送数据到Leader上,数据在Leader上落盘,回复ack。在集群还未同步时,Leader挂了,重新选举产生Leader,此时这个Leader上是没有上一条数据的,而同步之后,集群中就完全丢失了上一条数据。
    • -1:正常情况下不会发生丢数,但是由于一个节点挂了,导致集群无法正常运转下去,这时就涉及到ISR了。Leader维护了一个动态的in-sync replica set(ISR),意为和Leader保持同步的Follower和Leader的集合。如果Follower长时间未向Leader发送通信请求或同步数据,则将Follower踢出ISR。默认30s。这样就不用等长时间联系不上或者已经故障的节点了。这样就解决了运行问题。但是,特殊的情况下,集群还是有可能发生丢数的风险:如果分区副本设置为1,或者ISR中应答的最小副本数设置为1(默认1),这样的话,和ack=1的效果是一样的,任有丢数的风险。

    那么到底有没有完全可靠的情况呢?答案是有的。

    • 数据完全可靠条件:ACK级别设置为-1 + 分区副本数大于等于2 + ISR中应答的最小副本数大于等于2

    可靠性总结:

    • acks=0,生产者发送过来数据就不管了,可靠性差, 效率高;
    • acks=1,生产者发送过来数据Leader应答,可靠性中等,效率中等;
    • acks-1,生产者发送过来数据Leader和ISR队列里面所有Follower应答,可靠性高,效率低;
      在生产环境中,acks=0很少使用;acks=1,一般用于传输普通日志,运行丢失个别数据;acks=-1,一般用于传输和钱相关的数据,对可靠性要求比较高的场景。

    数据重复:

    acks:-1,生产者发送过来数据,Leader接收并落盘,Follower接收并落盘。在还有Follower未同步数据完成时,Leader挂了,重新选举Leader,而新的Leader恰好是落盘成功的Broker之一。这时生产者觉得上一条消息未发送成功,会再发送一次,这样就导致了数据重复。也就是说,数据完全可靠条件只能保证至少一次成功发送。

    • 至少一次(At Least Once) = ACK级别设置为-1 + 分区副本大于等于2 + ISR中应答最小副本数量大于等于2。保证数据不丢失,但是不能保证数据不重复。
    • 最多一次(At Most Once)= ACK级别设置为0。保证数据不重复,但是不能保证数据不丢失。

    那么怎么实现精确一次呢?

    • 精确一次(Exactly Once )Kafka在0.11版本之后,引入了一项重大特性:幂等性和事务。

      幂等性就是指Producer不论向Broker发送多少重复数据,Broker端都只会持久化一条,保证了不重复。

      • 精确一次(Exactly Once):幂等性 + 至少一次(ack=-1 + 副本数>=2 + ISR 中最小副本数量>=2)

    重复数据的判断标准:具有相同主键消息提交时,Broker只会持久化一条。其中PID是Kafka每次重启都会分配一个新的;
    Partition表示分区号;Sequence Number是单调自增的。所以幂等性只能保证的是在单分区单会话内不重复。而关于更高级的涉及到多会话或者客户端重启问题,就需要由事务来解决了。这里就不过多的介绍了。

  • 相关阅读:
    算法leetcode|88. 合并两个有序数组(rust重拳出击)
    Linux Find命令详解(图片版)
    Hive 知识点八股文记录 ——(二)优化
    BAT023:将当前目录同名文件(不包括扩展名)整理到以其命名的文件夹内
    【跟马少平老师学AI】-【神经网络是怎么实现的】(七-2)word2vec模型
    BiMPM实战文本匹配【上】
    WGAN(1)——为什么不能直接拟合原始分布Pr
    a16z:2024年GenAI市场将爆发
    MyBatisPlus 查询条件构造器(Wapper)
    Excel自定义排序和求和
  • 原文地址:https://blog.csdn.net/Laoddaaa/article/details/126267945