源码分析 --- Kafka的幂等性机制和幂等性过程源码分析

  • 一、什么是消息队列的幂等性?

    • Kafka这里的幂等性指的是一般Producer发送了多少消息,consumer就消费了多少消息,保证了消费的唯一性,也是符合exactly-once语义的操作;

    • 不会发生消息丢失或者消息重复的情况;

  • 二、首先看一下Kafka的消息传输中的三种语义:

    • 消息最多发送一次(At-Most-Once)

      • 消息已经发出,不管收没收到,会存在消息丢失的情况;

      • 通过配置实现

1)enable.auto.commit设置为True
2)auto.commit.interval.ms设置为一个较低的时间范围。
3)consumer.commitSync()不调用该方法。
    • 由于上面的配置,就可以使Kafka有线程负责按照指定的时间范围间隔提交偏移offset, 但这种方式会出现Kafka消费出现两种语义:

      • 消费语义最多一次:消费者的偏移量已经提交,但是消息还在处理,这时候挂了,再重启时从上次提交的偏移处消费,导致上次在处理的消息部分丢失;

      • 消费语义最少一次:消费者已经处理完了,但是偏移量还没提交,那么这个时候挂了,就会导致重复消息消费处理,但是由于auto.commit.interval.ms间隔设置的较低,因此会降低这种概率;

  • 消息至少发送一次(

你可能感兴趣的:(大数据挖掘与大数据应用案例,源码分析,Java)