MetaQ中间件原理浅析

MetaQ的发展史

MetaQ是alibaba基于kafka源码进行开发的消息队列中间键,主要作用就是保证后段的稳定性,对服务端的请求进行削峰和限流。处理服务端宏大的数据。
2011年Ali根据kafka的源代码首次推出了MetaQ1.0版本,主要解决消息的顺序和消息的堆积冗余的问题。
2012年Ali对MetqQ进行了版本升级,主要负责进行架构的重组提升。之后又提出了MetqQ3.0的版本,对外宣称RoceetMQ3.0,其实Ali内部就是MetqQ3.0,二者是等价的。

消息中间件处理的核心问题

消息的可靠性

首先要确保消息能够顺利的从生产者发送到中转者中,当Broker(消息中转者)接受到生产者发送的消息后,会给生产者发送一个反馈来告知消费者其已经收到的响应的信息。
另外的话就是当其收到了生产者提供的消息后,就会将消息保存在本地,以免后续由于故障而造成信息数据的丢失。
最后的话就是确保消息要发送到对应的消费者手中。

消息的顺序

MetaQ采用的是队列的方式进行储存消息,其本身就具有一定的顺序性,但是由于其可能采用对歌队列来对信息进行储存,所以很难保证所有队列的消息都具有顺序性。大多数情况下,其只能保证一个队列具有顺序性。也就是说MetaQ的有序性是局部有序性。
当消费者按照顺序对消息队列中的消息进行消费时,如果在某一部分挂掉,则这个消息队列就会挂起5s,从而保证整个消息的顺序性。
消费者获得消息消费失败后同样有处理机制,其会在本地将对应的消息放到独立的消息队列中进行运行。

Exactly and only once

MetaQ是要确保消息的发送只有一次的,也就是说保证消息不会重复发送。
同时为了进一步避免重复消费给业务带来影响,需要业务端根据业务的主键key来判断是否是已经被消费过的消息。

消息堆积

异步刷盘
broker在收到一定的消息后再对积累的消息进行一次性地发送,在发送之前会先对生产者进行反馈,告诉生产者信息发送成功。
同步刷盘
groupCommitEnable选项为true,则会在写入消息后,立即将数据写入磁盘。只有磁盘写入成功后,producer端才会收到发送成功的消息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值