文档章节

如何保证消息不被重复消费

请把小熊还给我_m
 请把小熊还给我_m
发布于 02/13 15:45
字数 394
阅读 206
收藏 0

Kafka重复消费的场景

Kafka 实际上有个 offset 的概念,每个消息写进去,都有一个对应的 offset代表消息的序号。consumer 消费了数据之后,定时定期会把消费过的消息的 offset 提交一下,表示已消费,系统下次会从下一个offset来开始消费。

若消息消费后还没提交offset已消费,就重启了系统,那该offset对应的消息系统重启后会重复消费。

总结:作为一名开发,重复消费属于系统级别,出错率低并且难以避免,但是消费者应做到保证幂等性,从代码级别避免了重复消费的问题。

消费消息时应注意以下几点:

1、数据落库前先查询,如果已经存在,则放弃新增做更新操作;

2、redis不需做幂等处理,天然幂等性;

3、生产者可以在消息中添加一个唯一ID,消费消息后将该ID存入redis,每次消费之前先查询下redis是否存在该ID,若存在则说明已消费;

4、可以利用数据库主键约束,避免重复插入数据;

© 著作权归作者所有

请把小熊还给我_m
粉丝 22
博文 52
码字总数 69711
作品 0
杭州
私信 提问
加载中

评论(0)

【原创】消息队列的消费语义和投递语义

引言 所谓的消费语义,指的就是如下三种情况 如何保证消息最多消费一次 如何保证消息至少消费一次 如何保证消息恰好消费一次 其实类似还有一个投递语义 如何保证消息最多投递一次 如何保证消...

孤独烟
2019/06/19
0
0
springboot + rabbitmq发送邮件(保证消息100%投递成功并被消费)

前言: RabbitMQ相关知识请参考: https://www.jianshu.com/p/cc3d2017e7b3 Linux安装RabbitMQ请参考: https://www.jianshu.com/p/ee9f7594212b Windows安装RabbitMQ请参考: https://www.jians......

wangzaiplus
2019/07/19
0
0
kafka学习(8)如何保证数据有序,处理数据丢失和数据重复消费

首先了解一下kafka消息生产者和消费者是如何处理消息的 生产者发送消息有两种方式,同步(sync)和异步 (async) Kafka 消息发送分同步 (sync)、异步 (async) 两种方式,默认使用同步方式,可通...

太猪-YJ
2019/04/09
165
0
RocketMQ原理(4)——消息ACK机制及消费进度管理

https://zhuanlan.zhihu.com/p/25140744 中剖析过,consumer的每个实例是靠队列分配来决定如何消费消息的。那么消费进度具体是如何管理的,又是如何保证消息成功消费的(RocketMQ有保证消息肯...

xiaomin0322
2018/04/14
463
0
阿里消息中间件ONS消息乱序问题(二)

顺序消息:消息的有序是 消息消费时,能够按照发送的顺序进行消费。 例如:假如生产者产生的两条消息M1 、M2 要保证两条消息的顺序来消费应该怎么做,我们可能想到这样的场景: M1发送到S1 ...

哲别0
2018/03/26
80
0

没有更多内容

加载失败,请刷新页面

加载更多

如何离开/退出/停用Python virtualenv - How to leave/exit/deactivate a Python virtualenv

问题: I'm using virtualenv and the virtualenvwrapper. 我正在使用virtualenv和virtualenvwrapper。 I can switch between virtualenv's just fine using the workon command. 我可以使用......

javail
23分钟前
11
0
图片验证码输出 base64 字符串,适用于 自己存储key + 验证码来验证(不依赖于cookie)

<?php/** * @function getCode 生成验证码 * @author 张先生 * @date 2020-04-01 * @return array */// 获取验证码(参数:验证码个数,验证码宽度,验证码高度)if(!functio...

我才是张先生
45分钟前
9
0
SpringBoot和SpringCloud的区别

一、SpringBoot和SpringCloud简介 1、SpringBoot:是一个快速开发框架,通过用Maven依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化X...

安然_oschina
今天
19
0
IMX6ULL开发板-虚拟机安装Ubuntu系统

安装好了 VMware 虚拟机以后,我们就可以在 VMware 上安装 Ubuntu 系统了,首先我们去 Ubuntu 的 官网获取系统镜像,下载地址为:https://www.ubuntu.com/download/desktop,如下图所示: 从...

书白
今天
17
0
MyBatis Plus自定义SQL使用条件构造器QueryWrapper

1.注解的方式: @Select("select * from user_collection uc left join post p on uc.post_id = p.id ${ew.customSqlSegment}")IPage<Post> selectPosts(Page page, @Param(Constants.WRAP......

code-ortaerc
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部