2015-09-07 57 views
1

我现在正在做一个小型的研究,以找到一种方法来存储来自各种'消息生产者'(来源)的大量数据(暂时的,直到一些消费者消费这些消息)。数据来自不同的来源,例如HTTP,FTP,SMPP或文件上传,每种类型可能有数十或数百个实例创建消息。由它们产生的消息可能变得如此之大,以至于消息消费者可能会在消费消息方面落后,因为这些过程可能花费很长时间或者不是很短的时间。现在,系统在某些部分使用了RabbitMQ,但是当消耗大量的消息增长时(我正在考虑改进其性能,但这不同),它的性能会下降。作为替代,我正在关注使用磁盘保存消息的Apache Kafka。Cassandra的消息传递

在我阅读互联网上的许多文章时,我阅读了一些关于Apache Cassandra的文章,内容速度非常快,每秒处理一百万个插入和类似的卷读取。我感到惊讶,并试图找到一些线索使用卡桑德拉为我的情况,但没有明确的结果。

假设我有大量的消息生成器,Cassandra(集群)可以如何更快地(整体高吞吐量)处理插入(批量处理),以便生成器不会进行节流?

我相信你们中的一些人可以使用Cassandra来处理这种或类似的用例,分享你的经验。 (如果这还不够,我准备向您提供更多信息)

回答

2

是的! Cassandra可以非常有效地处理写入。但以我的经验,将它用作消息传递系统(队列等)会带来一些技术上的限制,因为tombstones

Cassandra不会立即删除删除的行,并将它们标记为tomstone,以便在稍后收集garbarge。加班时,如果有很多删除(例如出列消息),整体性能会受到影响,并且速度很快。

你可以去Cassandra,但是你必须为tomstone问题(时间段,多个状态表)实施解决方案。

恕我直言,Apache Kafka更适合消息传递的用例,也可以大规模扩展。

+1

不错的答案。我认为将gc_grace_seconds值设置为一个相当合适的值(保持性能和gc开销以及由逻辑删除引起的额外存储)可以为您提供帮助,因为Cassandra专为重读/快速插入而设计,读取和删除较少,因此可能不是您的更好选择。卡夫卡是为这种用例设计的。 –