将数据存储到GlobalKTable

时间:2020-03-18 14:31:07

标签: java apache-kafka apache-kafka-streams

我无法理解如何将数据保存到globalKTable。 我尝试使用

在java中创建GlobalKTable

GlobalKTable globalTable = builder.globalTable(inputTopic, Materialized.>as("global-store"));

在此之后,我找不到任何直接将数据存储到此GlobalKTable的示例。 可以用于连接或流的任何地方。

2 个答案:

答案 0 :(得分:4)

由于每个Stream应用程序实例均加载全部GlobalKTable数据,因此默认情况下它将禁用记录到changelog主题,并且GlobalKTable使用输入主题作为还原过程的更改日志源(以达到容错性),因此更改全局存储没有任何意义,而您不能这样做。

您可以使用ProcessorContext.getStateStore("global-store")获得对Processor API中全局状态的只读访问权限,而无需将存储添加到Processor

一种实现此目的的方法是将要进行的更新推送到inputTopic,以便它在所有应用程序实例中更新每个GlobalKTable。

答案 1 :(得分:2)

我无法理解如何将数据保存到globalKTable。 [...]我找不到任何直接将数据存储到此GlobalKTable的示例。

今天,您不能直接写到GlobalKTable。您只能通过将事件/记录/消息写入填充全局表的主题来间接更改全局表。