【发布时间】:2016-06-11 14:54:58
【问题描述】:
使用 Cassandra 作为队列:
真的有那么糟糕吗?
设置:5 节点集群,所有操作均按法定人数执行
使用 DateTieredCompaction 应该会显着降低 TombStones 的成本,并允许一次性删除整个 SSTable。
- 我们将所有消息添加到具有相同 TTL 的队列中
- 我们根据时间(例如 1 分钟间隔)对消息进行分区,并跟踪读取位置。
- 使用的消息将被显式删除。 (只有 1 个线程提取消息)
- 某些消息可能在被读取之前被显式删除(即,我们可能在读取位置之后有墓碑)。 (即最初使用的 TTL 是一个上限) gc_grace 可能会设置为 0,因为仲裁读取将执行阻塞修复(即我们可以关闭修复,因为消息仅驻留在 1 个集群(DC)中,并且所有操作法定人数))
- 只能添加/删除消息,不允许更新。
- 在我们的用例中,如果墓碑没有复制它没什么大不了的,我们可以偶尔多次看到相同的消息。 (此外,我们可能不会定期运行修复,因为所有操作都按法定人数执行。)
想法?
【问题讨论】:
-
如果您了解其中的一些陷阱,则可以避免它们。也可以看看github.com/paradoxical-io/cassieq。
-
有趣的是,这几乎完全符合我们的用例。
-
请报告任何问题(文档或其他)devshorts,我有兴趣获得反馈!感谢您提及@AdamHolmberg