一、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是如何保证消息不被重复消费的相关推荐

  1. 阿里云消息队列Kafka商业化:支持消息无缝迁移到云上

    摘要: 7月25日,阿里云宣布正式推出消息队列Kafka,全面融合开源生态.在兼容Apache生态的基础上,阿里云消息队列Kafka彻底解决了开源产品稳定性不足的痛点,可用性达99.9%,数据可靠性9 ...

  2. java 如何判定消息已在队列_【05期】消息队列中,如何保证消息的顺序性?

    本文选自:advanced-java 作者:yanglbme 问:如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保 ...

  3. videojs如何获取请求消息_消息队列中,如何保证消息的顺序性?

    点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的 ...

  4. 阿里云正式推出消息队列Kafka:全面融合开源生态

    摘要: 在全面兼容Apache Kafka生态的基础上,消息队列Kafka彻底解决Apache Kafka稳定性不足的长期痛点,并且支持消息无缝迁移到云上. 近日,阿里云宣布正式推出消息队列Kafka ...

  5. 消息队列的使用场景_消息队列MQ的特点、选型及应用场景

    一.什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列. 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可 ...

  6. 分布式消息队列 Kafka

    分布式消息队列 Kafka 2016-02-25 杜亦舒 Kafka是一个高吞吐量的.分布式的消息系统,由Linkedin开发,开发语言为scala 具有高吞吐.可扩展.分布式等特点 适用场景 活动数 ...

  7. java消息队列-kafka

    Kafka的原理是怎么样的?[面试6.0] Kafka由broker,topic,partition组成 broker: 一个kafka应用实例(节点) topic: 主题,一个主题对应多个parti ...

  8. 【后端】消息队列--Kafka篇

    文章目录 kafka高性能原因 架构层面 IO层面 Kafka 设计目的 为何使用消息系统 概念 1.kafka Partition分区机制 1.1 分区个数选择 1.2 分区写入策略 1.3 top ...

  9. 光速入门消息队列Kafka

    文章目录 光速入门消息队列Kafka 消息队列 知识要点 2.1 背景.问题的产生 2.2 消息队列应运而生 2.3 消息队列的特点 认识kafka 知识要点 2.1 认识kafka 2.2 kafk ...

  10. 消息队列 Kafka的架构原理 (小白必看)

    最终大家会掌握 Kafka 中最重要的概念,分别是 Broker.Producer.Consumer.Consumer Group.Topic.Partition.Replica.Leader.Fol ...

最新文章

  1. %00截断攻击的探索
  2. php下载文件代码详解,php将远超文件下载到本地的示例代码详解
  3. python人脸对比相似度_python人脸对比
  4. SpringBoot整合分布式消息平台Pulsar
  5. OpenCV中的cv::String和CString互相转换
  6. 计算机房的英语用谐音怎么读,“人机对话”学英语 发音不准就过不了电脑关...
  7. 查看欧拉系统服务器ip,euler os 查看center进程命令
  8. 实验三 lr分析器的设计与实现_实验室规划设计趋势之一灵活性|无风管通风柜的灵活性是如何实现的?...
  9. 对客户端树控件的包装
  10. 2018/11/22工作日志
  11. xampp中apache点击启动失败解决方法
  12. HOWTO: 如何在InstallShield的MSI工程中调用Merge Module的Custom Action
  13. DEFCON 23|利用U盘60秒打开保险柜
  14. 【通俗理解】显著性检验,T-test,P-value
  15. 老师用计算机教我们画画拼音,《ang eng ing ong》教案
  16. 面试中经常被问到Java引用类型原理,带你深入剖析
  17. matlab bar3 颜色,matlab中怎么控制柱状图标注的颜色?
  18. Fairplay DRM与混淆实现的研究
  19. 统计学第一篇,均值、中位数、众数
  20. 春季三月各行业活动营销指南

热门文章

  1. 总结java父类构造函数对子类构造函数的影响
  2. hdu1754(简单线段树)
  3. ContentProvider源码分析(原)
  4. android6.0源码分析之Camera API2.0下的Capture流程分析
  5. Linux kernel 3.10内核源码分析--进程退出exit_code
  6. spring boot:java.lang.IllegalStateException异常
  7. 三星t800Android 6.0,6.6毫米品质平板 三星GALAXY Tab S发布
  8. JZOJ 5474. 【NOIP2017提高组正式赛】时间复杂度
  9. python打印二进制内容,Python字节不打印二进制
  10. python编程思维培养_Python教学:编程如何培养学生计算思维-最新教育资料