MQ重复消费与消息顺序

ops/2024/11/25 7:10:31/

如何避免消息重复消费

RocketMQ:给每个消息分配了一个MessageID。这个MessageID就可以作为消费者判断幂等的依据。这种方式不太建议,原因是在高并发场景下这个MessageID不保证全局唯一性。

最好由业务方创建一个与业务相关的全局唯一的ID来区分消息,避免重复消费。

RabbitMQ与Kafka都未提供MessageID.

消息的顺序:

RocketMQ对消息提供有序消息,但只保证局部有序,不保证全局有序。producer中可以选择队列,consummer中必须注册一个MessageListenOrderly监听,普通方式的监听是不能保证顺序的。生产者把一组有序的消息放到一个队列当中,而消费者一次消费整个队列当中的消息。

        但是RabbitMQ和kafka都未提供完整的机制来实现消息顺序。

        RabbitMQ:要保证上标exchange只对应一个队列,并且一个队列只对应一个消费者。当然这会影响性能。

        kafka:生产者保证一组消息发送到一个partition里面,保证Topic下只对应一个消费者。

如何保证消息的高效读写

零拷贝:kafka和RocketMQ都是通过零拷贝技术来优化文件读写的。        

应用程序跑在用户空间中,用户空间不能直接访问内核空间,传统文件复制到用户

零拷贝分两种方式:mmap和transfile(文件传输过程中直接使用DMA进行优化),java中的MappedByteBuffer就是使用的mmap的方式,而FileChannel的底层就是使用了transfile来操作。mmap适合操作比较小的文件,文件大小不要超过1.5G-2G,transfile则不进行限制。RockeMQ当中使用mmap方式来对他的文件进行读写,commitlog文件大小为1G,如果写满再生成一个1G的文件。

kafka中,它的index日志文件也是使用mmap的方式来读写的,在其它日志文件中,并没有使用零拷贝的方式。kafka使用transfile方式将硬盘数据加载到网卡。

如何设计一个MQ:

1、实现一个单机的队列数据结构。高效、可扩展。

2、将单机队列扩展成为分布式队列。分布式集群管理

3、基于Topic定制消息路由策略。-发送者路由策略,消费者与队列对应关系,消费者路由策略

4、实现高效的网络通信。-Netty Http

5、规划日志文件,实现文件高效读写。-零拷贝、顺序写。服务重启后,快速还原运行现场。

6、定制高级功能,死信队列、延迟队列、事务消息等等。贴合实际,随意发挥。


http://www.ppmy.cn/ops/136507.html

相关文章

springboot实战(17)(“大事件“——新增文章主体逻辑)

目录 一、新增文章涉及的数据表、实体类。 (1)表结构。 (2)实体类(Article) 二、接口文档分析。 (1)请求方式与请求路径。 (2)请求参数。 (3&…

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理(Message Broker)软件,它实现了高级消息队列协议(AMQP - Advanced Message Queuing Protocol)。RabbitMQ 通过高效的消息传递机制,主要应用于分布式系统中解耦应用…

Java中的网络基础认知(如果想知道Java中有关网络基础的知识,那么只看这一篇就足够了!)

前言:网络基础是现代通信和信息技术的基石,涉及数据传输、网络协议、路由、交换、网络设备以及网络安全等多个方面,深入了解网络基础,不仅能提升技术能力,还能为更复杂的网络架构与应用打下坚实的基础。 ✨✨✨这里是秋…

【Java 解释器模式】实现高扩展性的医学专家诊断规则引擎

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

Python--类

Python 类练习 最近由于工作需要用到Python写脚本,因此,因此,快速学习一下Python. 如果你学过多种语言, 学习Python就很快了。 推荐菜鸟教程Python 3的教程。Link: https://www.runoob.com/python3/python3-tutorial.html 作为学习&#xf…

周末总结(2024/11/24)

工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…

前端HTML

声明:以下内容来自泷羽sec的学习笔记,仅作学习,如有按照知识进行破环网络安全,后果自负!! 泷羽sec:https://space.bilibili.com/350329294/channel/collectiondetail?sid4031268&spm_id_f…

Android \android-sdk\platform-tools\adb.exe start-server‘ failed

发现通知栏里不停发出报错\android-sdk\platform-tools\adb.exe start-server failed -- run manually if necessary 也无法找到链接上的实体设备 最后是端口号被占用。 5037为adb.exe的默认端口号, 查看该宽口号的使用情况,如下操作: 打开命…