我只是好奇当我们使用 RocksDB 作为状态后端时,faust 是如何在内部更新变更日志的。
据我了解,我们将在表更新期间出现下一个行为:
将新的变更日志发送到带有回调的 kafka 变更日志主题_on_changelog_sent
(来自有关此回调的文档:这是在 RocksDB 中保留偏移量的原因,以便在启动时我们知道我们在数据库中已有数据的偏移量。)
但是最重要的一个问题:在kafka log中成功存储changelog消息后会不会调用这个回调?或者我们可以有这样的情况,当我们向 kafka 发送 changelog 消息,通过回调更新 Rocksdb 中的偏移量,但最后发送到 kafka 会失败?(因为一些kafka集群问题)
在这种情况下,rocksdb 中 changelog 主题的最后偏移量和 kafka 中的实际高水位偏移量不一致。
如果 Faust 现在尝试重新启动,那么由于这种不一致,我们将失败。
我问这个是因为当rocksdb中的偏移量大于kafka changelog主题中的最后一条消息偏移量时,我在生产中遇到了这样的问题。
我相信 kafka 生产者应该等待确认更改日志事件已保存到 kafka 日志,然后才运行回调以更新 RocksDB。