0

我只是好奇当我们使用 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。

4

0 回答 0