我是消息队列和流媒体的新手。我对 RabbitMQ 和 Kafka 的区别和应用有疑问。
有人可以解释一下技术差异以及每种差异通常如何使用吗?
我研究了相应的技术并了解了典型的路由异步消息的原理< 128MB from producers to consumers over TCP in a reliable way using queues like topics. I’m trying to understand the technical differences, however my search results obtained too much marketing/sales material on both to get a clear understanding. Specifically their uses in cases with horizontally scalable micro services.
从较高的层面来看,似乎两者都完成了相同的任务,但实现上略有差异。 RabbitMQ 在代理处具有路由智能,使用推送模型,收到后删除消息,可以用另一个 AMQP 解决方案替换,具有较低的延迟,并且必须在代理处垂直扩展或在消费者处水平扩展。 Kafka 在消费者处具有路由智能,使用拉取模型,在没有替代产品的情况下对代码有一些限制性许可证,保留消息日志,可以在代理处水平扩展,并且通过顺序文件读取具有更好的吞吐量。较新的 RabbitMQ 可以保留日志,但不能保留 AMQP 消息。 RabbitMQ 也可以在代理处水平扩展,但改进较少。 RabbitMQ 是用 ErLang 和 Java 的 Kafka 开发的。
总的来说,每个模型都用于发送异步消息,而不是同步 HTTP REST 模型,允许应用程序继续工作,并保证消息得到可靠处理。
消息队列和流式传输有什么区别?它只是简单地接收一批带有确认的消息还是单个消息?记录经纪商是否有一些技术优势?我想知道这是否解决了失败节点和较新节点拾取数据的某些情况。我经常看到 Kafka 与流数据相关(我假设是 JSON 或 XML 对象)。我看到它与 Apache Spark 相关。为什么没有选择RabbitMQ?是因为旧版本的 RabbitMQ 吞吐量较低吗?
谢谢!
RabbiMQ 是一个消息代理,而 kafka 是 pub/sub,作为一个代理,它必须注册生产者和消费者应用程序并管理消费者需求的智能,因此绑定和交换就出现了。虽然在发布/订阅模型中不需要智能,但任何应用程序都可以充分订阅主题。 因此,Kafka 与 RabbitMQ 中的扇出交换模型很接近,尽管对于扇出交换,RabbitMQ 将为每个消费者创建同一消息的多个副本,但在 kafka 中,每个消费者都可以使用单个消息副本。