kafka三种消费语义与保证精准消费

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qichangjian/article/details/88188447

1. 消费语义的介绍

  • at last once至少消费一次(对一条消息有可能多次消费,有可能会造成重复消费数据)
      原因:Proudcer产生数据的时候,已经写入在broker中,但是由于broker的网络异常,没有返回ACK,这时Producer,认为数据没有写入成功,此时producer会再次写入,相当于一条数据,被写入了多次。
  • at most once:最多消费一次,对于消息,有可能消费一次,有可能一次也消费不了
      原因:producer在产生数据的时候,有可能写数据的时候不成功,此时broker就跳过这个消息,那么这条数据就会丢失,导致consumer无法消费。
  • exactly once有且仅有一次。这种情况是我们所需要的,也就是精准消费一次。

2.kafka中消费语义的场景

  • at last once:可以先读取数据,处理数据,最后记录offset,当然如果在记录offset之前就crash,新的consumer会重复的来消费这条数据,导致了”最少一次“
  • at most once:可以先读取数据,然后记录offset,最后在处理数据,这个方式,就有可能在offset后,还没有及时的处理数据,就crash了,导致了新的consumer继续从这个offset处理,那么刚刚还没来得及处理的数据,就永远不会被处理,导致了”最多消费一次“
  • exactly once:可以通过将提交分成两个阶段来解决:保存了offset后提交一次,消息处理成功后,再提交一次。

3.kafka中如何实现精准写入数据?

A:Producer 端写入数据的时候保证幂等性操作

幂等性:对于同一个数据无论操作多少次都只写入一条数据,如果重复写入,则执行不成功

B:broker写入数据的时候,保证原子性操作, 要么写入成功,要么写入失败。(不成功不断进行重试)

猜你喜欢

转载自blog.csdn.net/qichangjian/article/details/88188447