[英]How to use Cassandra for transactional messaging [closed]
我正在做一个基于微服务的系统。
现在我需要一种方法来确保我的更新操作和为这些更新发布的消息是原子的(事务性消息传递)。
我使用 Cassandra 作为我的操作数据库。
所以我的选择是:
将我的事件放在一个表中,并不断使用系统中的另一个组件轮询事件以使用 kafka 发布它(我认为这样查询数据并不容易,我认为查询不会像它那样高效可能跨越多个节点。我仍然必须找到一种方法来进行更新并在某种事务中发布我的事件。Cassandra 有批处理,但我不确定使用该功能必须进行的权衡,但是我认为这会给我带来一些一致性问题)
第二种选择是利用 Cassandra cdc 并使用 kafka connect 将消息发布到 kafka,但我不确定它在性能、一致性和消息排序方面带来的问题,因为它们来自不同的分区,并且在需要的地方按顺序处理它们将具有挑战性。 实际上,我什至不确定如何使用 CDC,因为我没有找到很多关于此的资源。 另一个问题是我使用的是 astra db 免费套餐。 astra 基本上是 cassandra 即服务,但我找不到任何关于在免费层中特别启用 cdc 的信息,因为您需要在 yaml 文件和桌面上启用它,但我没有找到在 astra 中启用它的方法. 我刚刚发现的另一件事是 Cassandra cdc 不会通知我数据的更改,直到内存表已满并且不再引用提交日志段,这可能会导致巨大的延迟,尽管有办法强制刷新内存表,但在我的情况下不会那么有效。
另一个解决方案是使用 cqrs,其中我使用 cassandra 进行读取,并使用另一个对事务性消息传递(特别是事务日志拖尾)有更好支持的数据库,甚至可能使用事件源,以便无需进行很多转换就可以发布数据。
我可以将我的数据直接写入 kafka,然后将其发布到我需要更新的 Cassandra 表中,但我认为这种方法的问题是我将不得不过多依赖最终一致性,这需要我实现一种机制用于向我的客户推送通知,告诉他们他们的请求已成功处理或刚刚失败。
结合最后两个解决方案,但我认为如果我使用 cqrs,则无需直接写入 kafka,并且在写入数据库后我将能够响应客户端。
所以这是我对问题的分析(如果我错了,请纠正我)但是正如你所看到的,有很多选择,但它们都有问题,并且每种方法都需要付出代价。
所以总结一下我的问题是:
有没有办法以合理的延迟有效地使用 cassandra 对 cdc 的支持,如果是这样,我如何在 astraDB 中启用它(免费试用)
您能想出一种使用 cassandra 定期查询我的事件而不跨越多个节点的方法,因为这对我来说似乎是不可能的(请注意,我正在使用 kafka)。
我可以考虑在 cqrs 解决方案中使用哪些适合事务日志拖尾的候选数据库来进行写操作。
在直接写入 kafka 时,我可能会遇到哪些我错过的其他问题,以及我将不得不实施一种将通知推送给我的客户的大量请求的方法。
请注意,该项目是我为学习而做的一个副项目,因此我希望尽可能降低成本。
由于您已经在使用 Astra DB,请查看Astra Streaming 。 它是一种与 Astra DB 集成的事件流处理服务,因此您可以快速创建 Apache Pulsar 实例。
为发布/订阅创建流主题就像启动您已经熟悉的 Astra 数据库实例一样简单。
您不必担心配置 CDC 或任何其他 Cassandra 后端功能,因为 Astra Streaming 开箱即用为您完成所有工作。 免费试用。 干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.