RocketMQ的基本介绍

概述

阿里开源(emmmmmmmm)。号称是站在kafka巨人的肩膀(抄的kafka)上更适合互联网公司的架构。目前阿里内部的消息的主要的消息引擎内核。阿里将其广泛用于交易系统,购物车请求,红包等。其公有云版aliware已经进行公开售卖。
但是kafka存在一定问题,就是在主题特别多的情况下。性能下降很快。这是因为kafka每个主题对应自己的文件,这样,如果文件特别多,实际上也就没有了磁盘顺序读取的优势了。而rocketMQ改成了所有主题写一个文件,同时开辟一个异步线程对这个文件生成一个索引(开始位置 + 长度)。
在互联网企业,kafka一般用于存储日志。因为日志主题往往有限。

基本架构如下
在这里插入图片描述
对比kafka,架构中增加了slave broker。
逻辑架构如下,
在这里插入图片描述
比kafka多了Producer Group的设定。这是支持事务的必要。
3.2.6版本及以上版本,删除了回查机制,回查机制要自己实现。
通过加入插件,可以实现pull和push的模式。

架构设计

事务

MQ的
在这里插入图片描述
在1后,事务消息是prepare状态,然后RMQ会将其持久化到MySQL当中。然后如果收到确认消息,就删除掉这条prepare消息(确认的话放到pepared消息列表里供consumer进行读取),如果迟迟收不到确认消息,那么RMQ会定时的扫描prepare消息,发送给produce group进行【回查】确认。
3.2.6版本及以上,上述回查机制被取消了(完全不知道原因)。也就是说,如果我们完成4后,没有成功进行5,将回导致这个事务只完成了producer一端的事务。事务被破坏。
在这里插入图片描述
没办法啊,我们需要自己实现回查机制。

实现回查机制的本质策略都是对比使用另外的线程对比producer认为自己成功发送的和consumer成功接收的消息。可以采用的方案之一是分别把producer发送消息和consumer成功处理消息分别存储于redis的空间,然后定时检查回滚。

另外一种思路则是consumer定时把自己的处理完的消息通过某种方式发送给producer,供producer决定回滚那些事务。
当然,有人又会问,回查机制也失败了怎么办?比如说consuemr在发送回查给producer前崩溃了?同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值