使用Cassandra作为队列

时间:2016-02-28 16:02:51

标签: cassandra cassandra-2.0

使用Cassandra作为队列:

真的那么糟糕吗?

设置:5节点集群,所有操作都在仲裁中执行

使用DateTieredCompaction可以显着降低TombStones的成本,并允许一次性删除整个SSTable。

  • 我们使用相同的TTL
  • 将所有消息添加到队列中
  • 我们根据时间(例如1分钟间隔)对消息进行分区,并跟踪读取位置。
  • 将明确删除消耗的消息。 (只有1个线程提取消息)
  • 在阅读之前可以明确删除某些消息(即我们可能在阅读位置之后有墓碑)。 (即最初使用的TTL是一个上限)gc_grace可能会设置为0,因为仲裁读取将执行阻塞修复(即我们可以关闭修复,因为消息只驻留在1个群集(DC)中,并且所有操作法定人数))
  • 只能添加/删除邮件,不允许更新。
  • 在我们的用例中,如果墓碑没有复制它不是什么大不了的话,我们可以偶尔多次看到相同的消息。 (此外,我们可能不会定期运行修复,因为所有操作都在仲裁执行。)

思想?

1 个答案:

答案 0 :(得分:1)

一般来说,这是一种反模式,这个链接谈论了对墓碑的大部分影响:http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

我的意见是,尽可能避免这种情况,但如果您真的了解性能影响,并且它不是您架构中的问题,当然您可以这样做。

如果可能的话,不这样做的另一个原因是,cassandra数据结构不是为队列设计的,它总是看起来很难看,UGLY!

强烈建议在做出最终决定之前考虑Redis或RabbitMQ。