我希望在确保(我(向MongoDB的upstart写入成功后,能够继续处理来自MongoDB的数据。我有两种选择:
- 在成功写入MongoDB之后写入Kafka(来自写入Mongo的同一作业(
- 通过Mongo ChangeStream接收书面文档的事件,并从那里继续处理它们
就我的理解而言,我看到Kafka的优势在于它是分布式的,并且能够从多个实例中读取(我知道ChangeStream不容易让这个实例(。我看到的ChangeStream的优势是,它让我知道那是什么样的操作(我执行追加启动,这样我就可以知道每个追加启动是插入还是更新(。我不是在问哪一个更好,因为它显然适用于不同的用例。但是,对于我在考虑中遗漏的这些选项,还有更多的功能或缺点吗?
我也知道,两者都可以在客户端的读取失败一段时间后继续(Kafka在其配额内,ChangeStream带有恢复令牌(
两阶段提交可能导致不一致;你应该只给一个地方写信,而且是你认为可用性更高的地方。
如果您已经有了Kafka,那么您可以向Mongo写入,然后使用Debezium等工具将数据从oplog流式传输到Kafka中(例如,包括操作(。这被称为";发件箱模式";。
或者,您可以编写Kafka并使用MongoDB接收器连接器将数据发送到数据库。