kafka消费消息时的幂等性

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011439839/article/details/90115573

1.什么是kafka消费消息时的幂等性

kafka消费消息时的幂等性,简而言之就是消费者对接口的多次调用所产生的结果和调用一次是是一致的,也就是说在kafka中有可能会消费到重复的数据,这个时候需要客户端去处理这种情况,使得消息消费一次和消费多次是一样的结果。

2.产生原因

在这里插入图片描述
数据流转:

  1. 生产者:生产者会往kafka中发送消息,kafka会给每条消息一个offset,代表这个数据的序号;
  2. 消费者消费消息,消费之后,会将offset的数据提交给kafka;
  3. kafka根据zookeeper中存放的offset数据区确定需要发送那些数据给消费者;

容易出问题的环节:

  1. 由于消费者消费消息之后,来不及向系统提交offset数据,有可能这个时候,系统发生异常,导致系统直接宕机。此时zookeeper中存放的offset的数据是上一次提交的数据,所以不是最新的。
  2. 还有一个原因,由于消费者不是消费了一条数据之后,直接提交数据,而是批量的去提交,这个时候,如果是系统宕机,也是会导致zookeeper中存放的数据不是最准确的。
3. 解决办法

当消费者消费到了重复的数据的时候,消费者需要去过滤这部分的数据。主要有以下两种思路:
1.将消息的offset存在消费者应用中或者第三方存储的地方
可以将这个数据存放在redis或者是内存中,消费消息时,如果有这条数据的话,就不会去做后续操作
2.数据落库的时候,根据主键去过滤
在落库时,如果不不在这条数据,则去新增,如果存在则去修改

展开阅读全文

没有更多推荐了,返回首页