RabbitMQ 和 kafka 有什么区别?

问题描述 投票:0回答:3

不同场景下哪个效果更好?

我知道RabbitMQ是基于AMQP协议的,并且为开发者提供了可视化功能。

rabbitmq apache-kafka
3个回答
10
投票

RabbitMQ,正如您所指出的,是 AMQP 的实现。 AMQP 是一种起源于金融行业的消息传递协议。它的核心隐喻是消息、交换和队列。

Kafka 被设计为日志结构的分布式数据存储。它的功能使其适合用作消息传递系统的一部分,但它也可以适应其他用例,例如流处理。它起源于 LinkedIn,其核心隐喻是消息、主题和分区。

主观上,我觉得 RabbitMQ 更适合使用:它基于 Web 的管理工具很好;创建、删除和配置队列和交换时几乎没有什么摩擦。许多语言的库支持都很好。由于在默认配置下,Rabbit 仅将消息存储在内存中,因此延迟很低。

Kafka 更年轻,工具感觉更笨重,并且它对非 JVM 语言的支持相对较差,尽管这正在变得更好。另一方面,它在面对网络分区和代理丢失时有更强的保证,并且由于它旨在尽快将消息移动到磁盘,因此它可以在典型部署上容纳更大的数据集。 (Rabbit 可以将消息分页到磁盘,但有时表现不佳)。

无论是哪种方式,您都可以设计直接(一:一)、扇出(一:多)和发布-订阅(多:多)通信模式。

如果我正在构建一个需要缓冲大量传入数据并具有强大的持久性保证的系统,我肯定会选择 Kafka。如果我使用 JVM 语言或需要对数据进行一些流处理,那只会强化选择。

另一方面,如果我有一个用例,我更看重延迟而不是吞吐量,并且可以处理瞬时消息的丢失,我会选择 Rabbit。


1
投票

卡夫卡:

  • 消息将永远存在。您可以通过指定一个来管理它 消息保留政策。
  • 它是分布式事件流平台。
  • 我们可以将它用作日志
  • Kafka流式传输,可以自动更改和处理消息。
  • 我们无法设置消息优先级
  • 仅保留分区内的顺序。在分区中,Kafka 保证整批消息要么失败,要么通过。
  • 像RMQ(Scala和Java)这样的成熟平台并不多

RabbitMQ:

  • RabbitMQ 是一个排队系统,因此消息在使用后立即被删除。
  • 它由消息代理分发。
  • 不能这样用
  • RMQ 不支持流媒体
  • 我们可以设置消息的优先级,并在此基础上进行消费。
  • 即使涉及单个队列的事务,也不支持保证自动化。
  • 成熟的平台(对所有语言都有最好的兼容性)

0
投票

我在我的帖子中提供了 Kafka 和 RabbitMQ 之间的全面比较 - https://codingjigs.com/a-compressive-comparison-of-kafka-and-rabbitmq/

© www.soinside.com 2019 - 2024. All rights reserved.