不同场景下哪个效果更好?
我知道RabbitMQ是基于AMQP协议的,并且为开发者提供了可视化功能。
RabbitMQ,正如您所指出的,是 AMQP 的实现。 AMQP 是一种起源于金融行业的消息传递协议。它的核心隐喻是消息、交换和队列。
Kafka 被设计为日志结构的分布式数据存储。它的功能使其适合用作消息传递系统的一部分,但它也可以适应其他用例,例如流处理。它起源于 LinkedIn,其核心隐喻是消息、主题和分区。
主观上,我觉得 RabbitMQ 更适合使用:它基于 Web 的管理工具很好;创建、删除和配置队列和交换时几乎没有什么摩擦。许多语言的库支持都很好。由于在默认配置下,Rabbit 仅将消息存储在内存中,因此延迟很低。
Kafka 更年轻,工具感觉更笨重,并且它对非 JVM 语言的支持相对较差,尽管这正在变得更好。另一方面,它在面对网络分区和代理丢失时有更强的保证,并且由于它旨在尽快将消息移动到磁盘,因此它可以在典型部署上容纳更大的数据集。 (Rabbit 可以将消息分页到磁盘,但有时表现不佳)。
无论是哪种方式,您都可以设计直接(一:一)、扇出(一:多)和发布-订阅(多:多)通信模式。
如果我正在构建一个需要缓冲大量传入数据并具有强大的持久性保证的系统,我肯定会选择 Kafka。如果我使用 JVM 语言或需要对数据进行一些流处理,那只会强化选择。
另一方面,如果我有一个用例,我更看重延迟而不是吞吐量,并且可以处理瞬时消息的丢失,我会选择 Rabbit。
卡夫卡:
RabbitMQ:
我在我的帖子中提供了 Kafka 和 RabbitMQ 之间的全面比较 - https://codingjigs.com/a-compressive-comparison-of-kafka-and-rabbitmq/