• Kafka在高并发的情况下,如何避免消息丢失和消息重复?kafka消费怎么保证数据消费一次?数据的一致性和统一性?数据的完整性?


    1、kafka在高并发的情况下,如何避免消息丢失和消息重复?

    消息丢失解决方案:

    首先对kafka进行限速, 其次启用重试机制,重试间隔时间设置长一些,最后Kafka设置acks=all,即需要相应的所有处于ISR的分区都确认收到该消息后,才算发送成功

    消息重复解决方案:

    消息可以使用唯一id标识 

    生产者(ack=all 代表至少成功发送一次) 

    消费者 (offset手动提交,业务逻辑成功处理后,提交offset) 

    落表(主键或者唯一索引的方式,避免重复数据) 

    业务逻辑处理(选择唯一主键存储到Redis或者mongdb中,先查询是否存在,若存在则不处理;若不存在,先插入Redis或Mongdb,再进行业务逻辑处理)

    2、kafka怎么保证数据消费一次且仅消费一次

    幂等producer:保证发送单个分区的消息只会发送一次,不会出现重复消息

    事务(transaction):保证原子性地写入到多个分区,即写入到多个分区的消息要么全部成功,要么全部回滚流处理EOS:流处理本质上可看成是“读取-处理-写入”的管道。此EOS保证整个过程的操作是原子性。注意,这只适用于Kafka Streams

    3、kafka保证数据一致性和可靠性

    数据一致性保证

    一致性定义:若某条消息对client可见,那么即使Leader挂了,在新Leader上数据依然可以被读到

    HW-HighWaterMark: client可以从Leader读到的最大msg offset,即对外可见的最大offset, HW=max(replica.offset)

    对于Leader新收到的msg,client不能立刻消费,Leader会等待该消息被所有ISR中的replica同步后,更新HW,此时该消息才能被client消费,这样就保证了如果Leader fail,该消息仍然可以从新选举的Leader中获取。

    对于来自内部Broker的读取请求,没有HW的限制。同时,Follower也会维护一份自己的HW,Folloer.HW = min(Leader.HW, Follower.offset)

    数据可靠性保证

    当Producer向Leader发送数据时,可以通过acks参数设置数据可靠性的级别

    0: 不论写入是否成功,server不需要给Producer发送Response,如果发生异常,server会终止连接,触发Producer更新meta数据;

    1: Leader写入成功后即发送Response,此种情况如果Leader fail,会丢失数据

    -1: 等待所有ISR接收到消息后再给Producer发送Response,这是最强保证

    4、kafka到spark streaming怎么保证数据完整性,怎么保证数据不重复消费?

    保证数据不丢失(at-least)

    spark RDD内部机制可以保证数据at-least语义。

    Receiver方式

    开启WAL(预写日志),将从kafka中接受到的数据写入到日志文件中,所有数据从失败中可恢复。

    Direct方式

    依靠checkpoint机制来保证。

    保证数据不重复(exactly-once)

    要保证数据不重复,即Exactly once语义。

    - 幂等操作:重复执行不会产生问题,不需要做额外的工作即可保证数据不重复。

    - 业务代码添加事务操作

    就是说针对每个partition的数据,产生一个uniqueId,只有这个partition的所有数据被完全消费,则算成功,否则算失效,要回滚。下次重复执行这个uniqueId时,如果已经被执行成功,则skip掉。

     

     

     

  • 相关阅读:
    算法设计与分析 5.1 合并果子
    算法设计与分析 4.5 洪尼玛与神秘信封
    算法设计与分析 4.4 洪尼玛与魔法卡
    算法设计与分析 4.3 洪尼玛与芒果篮
    算法设计与分析 4.2 洪尼玛与网络攻防战
    算法设计与分析 4.1 洪尼玛与巧克力工厂
    算法设计与分析 3.5 大尾巴狼
    算法设计与分析 3.4 小鲨鱼
    算法设计与分析 3.3 眯眯眼天使
    算法设计与分析 3.2 小绵羊
  • 原文地址:https://www.cnblogs.com/zmoumou/p/10313348.html
Copyright © 2020-2023  润新知