本文主要是介绍RabbitMQ和Kafka设计思想的感性辨析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
RabbitMQ和Kafka架构图
1. 设计初衷不完全相同
- RabbitMQ是消息分发中间件
包收包送,服务很周到。
设计初衷:单播,消息一对一,每条消息只会被发送一个消费者(当然也可以扩展,如果想让多个消费者消费同一条消息,就得这条消息复制成多份放到多个Queue)。 - Kafka是消息存储和订阅中间件
自己放自己取,只负责提供场地,其它的全自助。
设计初衷:广播,消息一对多,凡是订阅Topic的消费者组都可以收到消息(但是组内只能有一个消费者消费这条消息;如果只有一个消费组的话将会退化为RabbitMQ)。
2. 消息的消费思路不同
- RabbitMQ中,生产者不是将消息直接发送给Queue,而是先发给Exchange,再由Exchange根据路由规则的不同分发给不同的Queue。Queue中的消息只能消费一次(当然也意味着只能发给一个消费者)。
可以把RabbitMQ比作邮局,Exchange是寄信的窗口,Queue是取信的窗口。Exchange是收件员,Queue是送件员。可以由送件员送件给你(push),也可以你自己自提(pull)。 - Kafka中,生产者直接将消息发送给Topic,消费者从Topic中拉取消息。同一个消费者组只能有一个消费者订阅某个Topic。
可以把RabbitMQ比作报社,Topic是不同的报纸,生产者在不同的报纸上刊登消息。消费者组相当于家庭,每个家庭同一份报纸只能领一份。
3. 队列的设计不同
- RabbitMQ中,一个Queue就对应了一个Topic
如果有多个消费者同时消费Topic的话,需要加锁 - Kafka中,一个Topic下可以有多个Partition
可以有多个消费者同时消费一个Topic,而不用加锁
这篇关于RabbitMQ和Kafka设计思想的感性辨析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!