在不同的情况下哪一个更公平?我知道rabbitmq是基于amqp协议的,对开发者来说是可视化的。
jfgube3f1#
正如您所提到的,rabbitmq是amqp的一个实现。amqp是起源于金融业的消息传递协议。它的核心隐喻是消息、交换和队列。kafka被设计成一个日志结构的分布式数据存储。它的特性使它适合作为消息传递系统的一部分使用,但它也可以适应其他用例,如流处理。它起源于linkedin,其核心隐喻是消息、主题和分区。主观上,我觉得rabbitmq更容易使用:它基于web的管理工具很好;在创建、删除和配置队列和交换时几乎没有摩擦。许多语言的库支持都很好。在默认配置中,rabbit只在内存中存储消息,因此延迟很低。kafka更年轻,工具感觉更笨拙,在非jvm语言中的支持也相对较差,尽管这一点越来越好。另一方面,它在面对网络分区和代理丢失时有更强的保证,而且由于它是为了尽快将消息移动到磁盘而设计的,因此它可以在典型部署上容纳更大的数据集(rabbit可以将消息分页到磁盘上,但有时性能不好)。在任何一种情况下,你都可以直接设计(one:one),扇形分叉(one:many),和pub sub(many:many)沟通模式。如果我要建立一个系统,需要缓冲大量的传入数据和强大的耐久性保证,我肯定会选择Kafka。如果我使用的是jvm语言,或者需要对数据进行一些流处理,那么这只会加强我的选择。另一方面,如果我有一个用例,其中我重视延迟而不是吞吐量,并且可以处理瞬时消息的丢失,我会选择rabbit。
1条答案
按热度按时间jfgube3f1#
正如您所提到的,rabbitmq是amqp的一个实现。amqp是起源于金融业的消息传递协议。它的核心隐喻是消息、交换和队列。
kafka被设计成一个日志结构的分布式数据存储。它的特性使它适合作为消息传递系统的一部分使用,但它也可以适应其他用例,如流处理。它起源于linkedin,其核心隐喻是消息、主题和分区。
主观上,我觉得rabbitmq更容易使用:它基于web的管理工具很好;在创建、删除和配置队列和交换时几乎没有摩擦。许多语言的库支持都很好。在默认配置中,rabbit只在内存中存储消息,因此延迟很低。
kafka更年轻,工具感觉更笨拙,在非jvm语言中的支持也相对较差,尽管这一点越来越好。另一方面,它在面对网络分区和代理丢失时有更强的保证,而且由于它是为了尽快将消息移动到磁盘而设计的,因此它可以在典型部署上容纳更大的数据集(rabbit可以将消息分页到磁盘上,但有时性能不好)。
在任何一种情况下,你都可以直接设计(one:one),扇形分叉(one:many),和pub sub(many:many)沟通模式。
如果我要建立一个系统,需要缓冲大量的传入数据和强大的耐久性保证,我肯定会选择Kafka。如果我使用的是jvm语言,或者需要对数据进行一些流处理,那么这只会加强我的选择。
另一方面,如果我有一个用例,其中我重视延迟而不是吞吐量,并且可以处理瞬时消息的丢失,我会选择rabbit。