繁体   English   中英

如何使用标点符号从 state 商店中删除旧记录? (卡夫卡)

[英]How to remove old records from a state store using a punctuator? (Kafka)

我使用streamsBuilder.table("myTopic")为主题创建了一个Ktable ,我将其具体化到 state 存储,以便我可以使用交互式查询。

每小时,我想从这个 state 存储(以及相关的变更日志主题)中删除其值在过去一小时内未更新的记录。

我相信这可能使用punctuator ,但到目前为止我只使用了 DSL,所以不确定如何进行。 如果有人能给我提供一个例子,我将不胜感激。

谢谢,

杰克

可以将处理器 API 与 DSL 混合搭配,但不能处理 KTable。 您需要转换为 KStream。 或者,您可以使用与 state 存储交互的处理器创建新拓扑。

您需要将 state 存储在某处 - 如何确定记录是否超过一小时。 一种选择是为 state 存储中的每条记录添加时间戳。

在处理器的 init 方法中,您可以调用 schedule (punctuate) 来迭代 state 存储中的记录并删除旧记录:

context.schedule(Duration.ofMillis(everyHourInMillis), PunctuationType.WALL_CLOCK_TIME, timestamp -> {
    myStateStore.all().forEachRemaining(keyValue -> {
        if (Instant.ofEpochMilli(valueInStateStore).compareTo(olderThanAnHour) < 0) {
            myStateStore.delete(keyValue.key);
        }
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM