繁体   English   中英

Kafka Stream KeyValue 状态存储(KTable)

[英]Kafka Stream KeyValue state Store (KTable)

我有一个要求,无论何时,每当消息到达 kafka 主题时,我都需要根据密钥聚合所有这些消息。

下面的逻辑我写来实现这个工作正常。

 KStream<String, Sample> sampleKStream =
            builder.stream("inprocess-topic");


 final Materialized<String, Sample, KeyValueStore<Bytes, byte[]>> sampleStore =
            Materialized.<String, Sample, KeyValueStore<Bytes, byte[]>>as("changelog-topic").withLoggingEnabled(changeLogConfigs)
                    .withCachingDisabled();

   KGroupedStream<String,Sample> kgroup = sampleKStream.groupByKey();

   kgroup.
           aggregate(()-> new Sample(null, "", "", "", "", "", "", "", new ArrayList<>()),
           (key , value , aggregator) -> Aggregator.merge(key , value , aggregator),sampleStore )
           .toStream()
           .map((key, value) -> KeyValue.pair(key, value))
           .selectKey((key, value) -> value.getName())
           .peek(Demo::logOut)
           .filter((k,v) -> v!=null && isComplete(v))
           .to("output-topic");

任何人都可以帮忙 - 除了墓碑消息之外,是否有任何情况会错过来自 KeyValue Store (KTable) 的最新聚合消息?

如果我们从相应的路径(state.dir)中删除状态目录,KTable 数据会被删除吗?

从理论上讲,容错状态存储由压缩的变更日志主题支持,如果您要删除状态存储,则可以从其变更日志主题中完全恢复应用程序的状态,并且您不会丢失任何聚合数据。

您也可以使用 bin/kafka-streams-application-reset 以有效的方式清理应用程序。

供你参考:

https://www.confluent.io/blog/data-reprocessing-with-kafka-streams-resetting-a-streams-application/

http://docs.confluent.io/current/streams/developer-guide.html#application-reset-tool

暂无
暂无

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

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