【问题标题】:Smart Broker vs. Dumb Broker (Kafka and RabbitMQ)智能代理与哑代理(Kafka 和 RabbitMQ)
【发布时间】:2018-02-05 05:44:22
【问题描述】:
在讨论 Kafka 和 RabbitMQ 之间的区别时,“哑代理”和“智能代理”在与消费者的交互中不断出现。 Kafka 被描述为有一个愚蠢的代理,而 RabbitMQ 被描述为有一个智能代理/愚蠢的消费者模型。
这到底是什么意思?我熟悉 Kafka 的基础知识以及更多关于 RabbitMQ 的知识。但是,RabbitMQ 的哪些特性让 broker 比 Kafka 更智能?
【问题讨论】:
标签:
rabbitmq
apache-kafka
【解决方案1】:
这个问题也困扰了我一段时间:)这是我目前所理解的......
在 RabbitMQ 的情况下,代理确保消息被传递给消费者,并且只有在得到所有需要该消息的消费者的确认时才将它们出列。它还跟踪消费者状态。
Kafka 不跟踪“消费者读取了哪些消息”。 Kafka 代理将所有消息保留在队列中一段固定的时间,消费者有责任从队列中读取消息。它也没有这种跟踪消费者状态的开销操作。
您可以在这篇精彩的 Pivotal blog 比较 RabbitMQ 和 Kafka 的帖子中了解更多信息。
【解决方案2】:
关于 Kafka 使用哑代理而 Rabbit MQ 使用智能代理的要点是在决定使用哪个消息传递系统时使用的要点之一。由于 RabbitMQ 是一个智能代理,它实现全局重试策略比在 Kafka 中更容易且与侦听器无关。
鉴于一组通过 API 网关访问的微服务,我相信以上几点,再加上 Rabbit MQ 的可维护性更高的优势以及跨微服务传递的数据永远不会达到与流数据,使 Rabbit MQ 成为比 Kafka 更好的服务间通信选择
【解决方案3】:
Dumb vs Smart broker 意味着 Broker 可以智能地根据特定条件路由消息。
在 RabbitMQ 的情况下,生产者将消息发送到 Exchange,然后 Exchange 将消息路由到队列。在这里,“Exchange”进行路由,这就是他们所谓的智能经纪人。人们再次让 Broker 变得非常聪明,最终使用 ESB,我们都知道发生了什么,行业正在远离臃肿的 ESB。
对于 Kafka, 代理不路由消息。由用户创建主题和消费组,并决定哪些消费组听哪个主题。
Smart vs Dumb broker 与消息确认无关。在 RabbitMQ 的情况下,它会跟踪每条消息的状态以查看它是否是消费者。在 Kafka 的情况下,通过在分区上使用偏移量会发生不同的情况,并且偏移量存储在 Kafka 本身中(消费者也可以存储)。但两者都提供了功能。