智能代理与愚蠢代理(Kafka和RabbitMQ)

12

在讨论Kafka和RabbitMQ之间的区别时,"dumb broker"和"smart broker"这两个概念不断出现。Kafka被描述为具有"愚蠢代理",而RabbitMQ则被认为是智能代理/愚蠢消费者模型。

那到底意味着什么呢?我对Kafka的基础知识有所了解,对RabbitMQ也略知一二。但是,RabbitMQ的哪些特点使其代理比Kafka的更加智能呢?

3个回答

16

这也是困扰我一段时间的问题 :) 我所理解的是...

在RabbitMQ中,代理确保将消息传递给消费者,并仅在获得所有需要该消息的消费者的确认时将其出队。它还跟踪消费者状态。

Kafka不跟踪“哪些消息被消费者读取”。 Kafka代理在一定时间内将所有消息保留在队列中,由消费者从队列中读取消息。它也没有跟踪消费者状态的额外操作。

您可以在此 awesome 的Pivotal博客帖子中了解有关比较RabbitMQ和Kafka的更多信息。


4
这是错误的。 Kafka确实跟踪消费者状态。它跟踪偏移量,但不检查消息内容以进行跟踪。此外,“固定持续时间”可以被禁用。 - OneCricketeer

5
Kafka使用一个笨拙的代理而RabbitMQ使用一个聪明的代理是决定使用哪个消息传递系统的因素之一。由于RabbitMQ是一个聪明的代理,实施全局重试策略比在Kafka中更容易且不受监听器影响。
在通过API网关访问一组微服务时,我认为上述观点结合RabbitMQ更易于维护和知道传递给微服务的数据永远不会达到流数据的负载量,使得RabbitMQ比Kafka更适合用于服务间通信。

“重试更容易”是什么意思?您是指生产者还是消费者? - OneCricketeer

3
愚蠢的代理商与智能的代理商是指,代理商可以根据某些条件智能路由消息。
在RabbitMQ的情况下,生产者将消息发送到Exchange,Exchange将消息路由到队列。这里的“Exchange”负责路由,这就是所谓的智能代理商。人们又使代理商变得更加智能,最终出现了我们都知道会发生什么并且行业正在远离臃肿的ESB。
而在Kafka的情况下,代理商不会路由消息。用户需要创建主题,生成者将事件分区到主题-分区中,消费者组决定哪个消费者组监听哪个主题。
聪明的代理商与愚蠢的代理商与消息确认没有任何关系。在RabbitMQ的情况下,它跟踪每条消息的状态,以确定它是否被消费者消费了。在Kafka的情况下,也会发生这种情况,但是使用分区上的偏移量进行存储,该偏移量存储在Kafka本身中(消费者也可以存储)。但两者都提供此功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接