在同一使用者组中的KStream应用程序之间使用globalStateStore共享状态

问题描述

我要解决的当前问题是关于在同一使用者组中的多个应用程序之间共享状态,它们使用来自相同主题但不同分区的数据。

所以我有一个带有3个分区的inputTopic。我将在每个分区上运行3个KStream微服务(例如:MS1,MS2,MS3),每个微服务将处理并将结果写入输出主题

问题:在大多数情况下,微服务可以在其分区内独立运行,但是在某些情况下,微服务需要先拉出属性的先前状态才能进行处理,并且该状态可能先前已经过处理和存储通过另一个微服务。

例如,如果我有一个人在一条道路的3段上行走的数据,则为例。每个部分代表一个分区。因此,如果此人从第1节转到第2节,我们将不再从第1节发布者发布他的状态。他的状态现在由第2节发布者发布。如果我有微服务,可以按节处理他的数据。当我看到记录进入第2部分时,我需要检查该家伙的先前状态是他是刚刚开始在我的部分上行走还是从另一部分来我的部分,以便我继续处理他的数据。

建议的解决方案:我一直在阅读有关globalStateStore的信息,看来它可以解决我的问题。因此,我将在这里写下我的想法和一些问题,只是想知道您是否可以在我的方法中看到任何问题:

  • 让微服务从其分配的分区中读取输入主题
  • 具有一个GlobalStateStore来存储状态,以便所有3个微服务都可以读取它。
  • 由于您不能直接写入globalStateStore,因此可能必须创建一个中间主题来存储状态(例如:; )。将从此主题(“ global-topic”)创建全局状态存储-这正确吗?
  • 然后,每次我的微服务收到消息时,我将始终读取globalStateStore以更新其状态,然后处理记录-我是否将其读取为GlobalKTable?
  • 然后将状态更新为“ global-topic”

重启过程是否有影响?当我一直从全局状态存储中存储状态时,当一个应用程序死掉而另一个应用程序接管时是否存在问题?

非常感谢你们!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)