赞
踩
解耦、异步、削峰
如果对于消息队列的功能和性能要求不是很高,那么RabbitMQ就够了,开箱即用。
如果系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,RocketMQ的低延迟和金融级的稳定性就可以满足。
要处理海量的消息,像收集日志、监控消息或是前端的埋点这类数据,或是你的应用场景使用了大数据、流计算相关的开源产品,那么Kafka就是最合适的。
如果数据量很大,同时不希望有Kafka的高延迟,刚好业务场景是金融场景。RocketMQ对Topic运营不太友好,特别是不支持按照Topic删除失效的消息,以及不具备宕机Failover能力。那么Pulsar可能就是最合适的。
RocketMQ出自阿里公司的开源产品,用java语言实现,在设计时参考了Kafka,并做出了自己的一些改进,消息可靠性上比Kafka更好,经过多次双十一的考验,性能和稳定性还是值得信赖的,RocketMQ在阿里集团被广泛应用在订单、交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景
Apache Kafka是一个分布式消息发布订阅系统。它最初是由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统(a distributed commit log),之后成为Apache项目的一部分
由于“攒一波再处理”导致延迟比较高
Pulsar是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。
Pulsar最初由Yahoo开发,目前有Apache软件基金会管理
正在处于成长期,流行度和成熟度相对没有那么高
RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。
服务端设置接收broker每次推送消息的个数,设置ack手动签收,当消费端处理完当次推送的消息后,broker会再次推送一定个数的消息,如果没处理完,就不让broker推送消息,直至消费端成功签收。
producer --> broker --> consumer
正常来说只要把消息持久化到磁盘当中就可以了。但是kafka为了提升性能,采用了异步批量刷盘的实现机制,所以如果在刷盘之前系统崩溃了就会导致数据丢失
producer可以设置acks的参数结合broker的副本机制来共同保障数据的可靠性;
acks=0 ,producer不需要等待broker的响应就认为消息发送成功;
acks=1,表示broker中的leader Partition收到消息之后不等待其他的follower Partition的同步,就向producer返回确认;
acks=-1,表示broker中的leader Partition收到消息且等待ISR列表中的follower同步完成,之后再向producer返回确认;
只要producer和broker的消息可靠性得到保障,那么consumer是不太会出现消息无法消费的问题。除非是consumer在没有消费完这个消息就已经提交了offset,即便是出现这样的情况,我们也可以通过重新调整offset的值来实现重新消费
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。