MongoDB ChangeStream 与 Apache Kafka
MongoDB ChangeStream vs. Apache Kafka
我希望在确保更新插入(由我)成功写入后,能够继续处理来自 MongoDB 的数据。我有两个选择来完成这个:
- 写入 MongoDB 成功后写入 Kafka(来自写入 Mongo 的同一作业)
- 通过MongoChangeStream接收写入文档的事件,并从那里继续处理
至于我的理解,我看到 Kafka 的优点是它是分布式的并且可以从多个实例读取(我理解 ChangeStream 不会轻易让这个)。我看到的 ChangeStream 优势是它让我知道那是什么类型的操作(我执行更新插入,这样我就可以知道每个更新插入是插入还是更新)。我不是在问哪个更好,因为它显然服务于不同的用例。但是,在我考虑的这些选项中,是否还有更多的特性或缺点是我在这里遗漏的?
我还了解到,在客户端读取失败一段时间后,两者都可以继续(Kafka 在其配额内,ChangeStream 具有 resume token)
Two-phase 提交可能导致不一致;您应该只写入一个位置,并且是您认为可用性更高的位置。
您可以写入 Mongo,然后使用 Debezium 将数据从 ChangeStream 流式传输到 Kafka(例如,包括操作)。这被称为“发件箱模式”。
或者您可以写入 Kafka 并使用 MongoDB 接收器连接器将数据发送到数据库。
我希望在确保更新插入(由我)成功写入后,能够继续处理来自 MongoDB 的数据。我有两个选择来完成这个:
- 写入 MongoDB 成功后写入 Kafka(来自写入 Mongo 的同一作业)
- 通过MongoChangeStream接收写入文档的事件,并从那里继续处理
至于我的理解,我看到 Kafka 的优点是它是分布式的并且可以从多个实例读取(我理解 ChangeStream 不会轻易让这个)。我看到的 ChangeStream 优势是它让我知道那是什么类型的操作(我执行更新插入,这样我就可以知道每个更新插入是插入还是更新)。我不是在问哪个更好,因为它显然服务于不同的用例。但是,在我考虑的这些选项中,是否还有更多的特性或缺点是我在这里遗漏的?
我还了解到,在客户端读取失败一段时间后,两者都可以继续(Kafka 在其配额内,ChangeStream 具有 resume token)
Two-phase 提交可能导致不一致;您应该只写入一个位置,并且是您认为可用性更高的位置。
您可以写入 Mongo,然后使用 Debezium 将数据从 ChangeStream 流式传输到 Kafka(例如,包括操作)。这被称为“发件箱模式”。
或者您可以写入 Kafka 并使用 MongoDB 接收器连接器将数据发送到数据库。