维护单独的KTable

时间:2020-06-17 11:46:51

标签: apache-kafka apache-kafka-streams ktable

我有一个主题,其中包含每个会话的用户连接和断开事件。我想使用Kafka流来处理此主题并根据某些条件更新KTable。每个记录不能更新KTable。因此,我需要处理多个记录,以了解是否必须更新KTable。

例如,按用户然后按sessionid处理流和聚合。如果该用户的至少一个sessionid仅具有Connected事件,则必须将KTable更新为在线用户(
)。 如果用户的所有sessionId都有Disconnected事件,则必须将KTable更新为离线用户(如果尚未离线)。

如何实现这样的逻辑?
我们可以在所有应用程序实例中实现此KTable以便每个实例在本地都有此数据吗?

1 个答案:

答案 0 :(得分:0)

听起来像是一个相当复杂的场景。

也许,在这种情况下最好使用处理器 API? KTable 基本上只是一个 KV 存储,并且使用处理器 API,允许您应用复杂的处理来决定是否要更新状态存储。 KTable 本身不允许您应用复杂的逻辑,但它会应用它收到的每个更新。

因此,使用 DSL,您需要进行一些 per-processing,如果您想更新 KTable,请仅针对这种情况发送更新记录。像这样:

KStream stream = builder.stream("input-topic");
// apply your processing and write an update record into `updates` when necessary
KStream updates = stream...
KTable table = updates.toTable();
相关问题