Kafka Streams本地状态同步

时间:2019-08-28 06:39:42

标签: apache-kafka synchronization apache-kafka-streams

假设我有两个Kafka Streams应用程序/服务:A和B,每个都具有GlobalKTable以具有某些数据的本地副本,例如产品目录。

当产品服务更新其目录时,更改将在未知的时间内以异步方式传播到A和B。在此期间,可能会有片刻A更新了本地副本,但B没有更新。 如果A发出的某些消息认为B具有相同的目录更新视图(事实并非如此,那么假设对B的更改日志非常慢),我们可能会有差异。

我们如何确保服务A和B中的数据同步,或者至少确保B的数据视图不早于A的视图?

此刻,我只能看到以下可能的解决方案:

  • 服务应该从Kafka获取GlobalKTable主题的最新偏移量,并与本地偏移量进行比较以了解其版本是否为最新。如果没有,那么我猜他们应该等待/阻止直到更改日志到达并得到处理?这种方法有点打败了本地状态的整个要点,因为每次我们需要进行到Kafka的网络往返来了解最新的偏移量。

  • 完全放弃本地状态,而是让A和B从某个中央数据库请求最新数据。

也许我在更大程度上缺少一些东西;可能是Kafka Streams的本地状态不适用于这种情况,并且仅在应用程序应该完全独立的情况下才适用吗?

0 个答案:

没有答案