消息中间件选型对比

MQ常用的使用场景十分广泛:解耦、削峰、异步等,在实际的应用中,经常也会牵扯到吞吐量、消息可靠性、消息一致性、业务幂等(重复消费)、顺序消费等问题,本文将对消息中间件做初步探讨。

主流MQ对比

先贴一张网上流传的对比表格:
在这里插入图片描述

网图作为参考,以现阶段技术发展来说明:
ActiveMQ:支持JMS规范、支持事务、支持XA协议,没有生产大规模支持场景、官方维护越来越少
RabbitMQ:由 erlang语言开发、性能好、高并发,支持多种语言,社区、文档方面有优势,erlang语言不利于java程序员的二次开发,依赖开源社区的维护和升级,需要学习AMQP协议、学习成本相对较高
kafka:高性能,高可用,生产环境有大规模使用场景,单机容量有限(超过64个分区响应明显变长)、社区更新慢,单机吞吐量已经达到百万级(异步打包发送、零拷贝机制)
RocketMQ:java实现,方便二次开发、设计参考了kafka,高可用、高可靠,社区活跃度一般、支持语言较少,单机吞吐量已经达到十万级

进一步对比

RabbitMQ:特有routingKey和bindingKey在业务作为路由规则对消息就行分发。

在这里插入图片描述

RocketMQ:特有Group消息组(一个组可以订阅多个Topic),Tag消息标签(表示消息的第二级类型),还有messageId可以作为幂等的处理依据。

在这里插入图片描述

Kafka:集群极赖Zookeeper,存储broke(topic)、consumer信息

在这里插入图片描述

问题探讨

如果保证消息可靠

ACK机制,集群中的ISR机制,手工提交Offset,使用事务消息(Half消息)

如何做消息一致性

强一致性:生产者100%投递(事务消息),消费者Exactly Once控制;
最终一致性:大多数还是选择借助数据库持久化消息。

如何实现消息幂等

中间件:提供messageId
业务实现:业务判断唯一ID

如何顺序消费消息

中间件:顺序队列
业务实现:生产者将消息放入一个队列,消费者只订阅这个队列。

原文链接:https://www.jianshu.com/p/0ffd69346226

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值