![](/img/trans.png)
[英]How to join two KTable and write the result ktable in state store
[英]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.