【问题标题】:Cassandra for messagingCassandra 用于消息传递
【发布时间】:2015-12-03 00:12:44
【问题描述】:

我现在正在进行一项小型研究,以找到一种方法来存储来自各种“消息生产者”(来源)的大量数据(暂时,直到一些消费者消费这些消息)。数据来自不同的来源,例如 HTTP、FTP、SMPP 或文件上传,每种类型可能有数十或数百个创建消息的实例。它们产生的消息可能会变得如此庞大,以至于消息消费者在消费消息方面可能会滞后,因为这些过程可能需要很长时间或不短时间​​。现在,系统在某些部分使用了 RabbitMQ,但是当大量未使用的消息增长时,它的性能会下降(我也在考虑提高它的性能,但那是不同的)。作为替代方案,我正在寻找使用磁盘来持久化消息的 Apache Kafka。

当我阅读互联网上的许多文章时,我阅读了一些关于 Apache Cassandra 的文章,这些文章具有非常快的写入、每秒处理一百万次插入和类似的读取量。我很惊讶,并试图在我的案例中找到一些使用 Cassandra 的线索,但没有明确的结果。

假设我有大量消息生产者,Cassandra(集群)能否以如此快的速度(整体高吞吐量)处理插入(批量),以至于生产者不会限制?

我相信你们中的一些人可能已经将 Cassandra 用于这种或类似的用例,分享您的经验。 (如果这还不够,我准备为您提供更多信息)

【问题讨论】:

    标签: cassandra messaging


    【解决方案1】:

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

    Cassandra 不会立即删除已删除的行,而是用墓碑标记它们,以便稍后进行垃圾收集。超时,如果有很多删除(例如,出队消息),整体性能会受到损害,而且很快。

    您可以选择 Cassandra,但您必须解决 tomstone 问题(时间桶、多个状态表)。

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

    【讨论】:

    • 不错的答案。我认为将 gc_grace_seconds 值设置为一个相当合适的值(保持性能和 gc 开销以及由墓碑引起的额外存储)可以帮助您,因为 Cassandra 设计用于读取和删除较少的重/快速插入,因此可能不是您的更好选择. Kafka 就是专为此类用例而设计的。
    猜你喜欢
    • 2016-06-08
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2010-10-20
    相关资源
    最近更新 更多