【消息队列】kafka是如何保证消息不被重复消费的
一、kafka自带的消费机制
kafka有个offset的概念,当每个消息被写进去后,都有一个offset,代表他的序号,然后consumer消费该数据之后,隔一段时间,会把自己消费过的消息的offset提交一下,代表我已经消费过了。下次我要是重启,就会继续从上次消费到的offset来继续消费。
但是当我们直接kill进程了,再重启。这会导致consumer有些消息处理了,但是没来得及提交offset。等重启之后,少数消息就会再次消费一次。
其他MQ也会有这种重复消费的问题,那么针对这种问题,我们需要从业务角度,考虑它的幂等性。
二、通过保证消息队列消费的幂等性来保证
举个例子,当消费一条消息时就往数据库插入一条数据。如何保证重复消费也插入一条数据呢?
那么我们就需要从幂等性角度考虑了。幂等性,我通俗点说,就一个数据,或者一个请求,无论来多次,对应的数据都不会改变的,不能出错。
怎么保证消息队列消费的幂等性?
我们需要结合业务来思考,比如下面的例子:
1.比如某个数据要写库,你先根据主键查一下,如果数据有了,就别插入了,update一下好吧
2.比如你是写redis,那没问题了,反正每次都是set,天然幂等性
3.对于消息,我们可以建个表(专门存储消息消费记录)
生产者,发送消息前判断库中是否有记录(有记录说明已发送),没有记录,先入库,状态为待消费,然后发送消息并把主键id带上。
消费者,接收消息,通过主键ID查询记录表,判断消息状态是否已消费。若没消费过,则处理消息,处理完后,更新消息记录的状态为已消费。
转载于:https://www.cnblogs.com/756623607-zhang/p/10506909.html
【消息队列】kafka是如何保证消息不被重复消费的相关推荐
- 阿里云消息队列Kafka商业化:支持消息无缝迁移到云上
摘要: 7月25日,阿里云宣布正式推出消息队列Kafka,全面融合开源生态.在兼容Apache生态的基础上,阿里云消息队列Kafka彻底解决了开源产品稳定性不足的痛点,可用性达99.9%,数据可靠性9 ...
- java 如何判定消息已在队列_【05期】消息队列中,如何保证消息的顺序性?
本文选自:advanced-java 作者:yanglbme 问:如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保 ...
- videojs如何获取请求消息_消息队列中,如何保证消息的顺序性?
点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的 ...
- 阿里云正式推出消息队列Kafka:全面融合开源生态
摘要: 在全面兼容Apache Kafka生态的基础上,消息队列Kafka彻底解决Apache Kafka稳定性不足的长期痛点,并且支持消息无缝迁移到云上. 近日,阿里云宣布正式推出消息队列Kafka ...
- 消息队列的使用场景_消息队列MQ的特点、选型及应用场景
一.什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列. 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可 ...
- 分布式消息队列 Kafka
分布式消息队列 Kafka 2016-02-25 杜亦舒 Kafka是一个高吞吐量的.分布式的消息系统,由Linkedin开发,开发语言为scala 具有高吞吐.可扩展.分布式等特点 适用场景 活动数 ...
- java消息队列-kafka
Kafka的原理是怎么样的?[面试6.0] Kafka由broker,topic,partition组成 broker: 一个kafka应用实例(节点) topic: 主题,一个主题对应多个parti ...
- 【后端】消息队列--Kafka篇
文章目录 kafka高性能原因 架构层面 IO层面 Kafka 设计目的 为何使用消息系统 概念 1.kafka Partition分区机制 1.1 分区个数选择 1.2 分区写入策略 1.3 top ...
- 光速入门消息队列Kafka
文章目录 光速入门消息队列Kafka 消息队列 知识要点 2.1 背景.问题的产生 2.2 消息队列应运而生 2.3 消息队列的特点 认识kafka 知识要点 2.1 认识kafka 2.2 kafk ...
- 消息队列 Kafka的架构原理 (小白必看)
最终大家会掌握 Kafka 中最重要的概念,分别是 Broker.Producer.Consumer.Consumer Group.Topic.Partition.Replica.Leader.Fol ...
最新文章
- %00截断攻击的探索
- php下载文件代码详解,php将远超文件下载到本地的示例代码详解
- python人脸对比相似度_python人脸对比
- SpringBoot整合分布式消息平台Pulsar
- OpenCV中的cv::String和CString互相转换
- 计算机房的英语用谐音怎么读,“人机对话”学英语 发音不准就过不了电脑关...
- 查看欧拉系统服务器ip,euler os 查看center进程命令
- 实验三 lr分析器的设计与实现_实验室规划设计趋势之一灵活性|无风管通风柜的灵活性是如何实现的?...
- 对客户端树控件的包装
- 2018/11/22工作日志
- xampp中apache点击启动失败解决方法
- HOWTO: 如何在InstallShield的MSI工程中调用Merge Module的Custom Action
- DEFCON 23|利用U盘60秒打开保险柜
- 【通俗理解】显著性检验,T-test,P-value
- 老师用计算机教我们画画拼音,《ang eng ing ong》教案
- 面试中经常被问到Java引用类型原理,带你深入剖析
- matlab bar3 颜色,matlab中怎么控制柱状图标注的颜色?
- Fairplay DRM与混淆实现的研究
- 统计学第一篇,均值、中位数、众数
- 春季三月各行业活动营销指南
热门文章
- 总结java父类构造函数对子类构造函数的影响
- hdu1754(简单线段树)
- ContentProvider源码分析(原)
- android6.0源码分析之Camera API2.0下的Capture流程分析
- Linux kernel 3.10内核源码分析--进程退出exit_code
- spring boot:java.lang.IllegalStateException异常
- 三星t800Android 6.0,6.6毫米品质平板 三星GALAXY Tab S发布
- JZOJ 5474. 【NOIP2017提高组正式赛】时间复杂度
- python打印二进制内容,Python字节不打印二进制
- python编程思维培养_Python教学:编程如何培养学生计算思维-最新教育资料