【问题标题】:Build a Kafka Stream that returns the list of distinct ids into time interval构建一个 Kafka Stream,将不同 id 的列表返回到时间间隔
【发布时间】:2019-06-28 16:02:13
【问题描述】:
我有一个 kafka 对象事件流:
KStream<String, VehicleEventTO> stream = builder.stream("mytopic", Consumed.with(Serdes.String(), new JsonSerde<>(MyObjectEvent.class)));
每个ObjectEvent 都有一个属性idType(长)。我需要构建一个将不同的idTypes 返回到时间间隔(例如:10 分钟)的流。
有可能,使用 KafkaStream DSL?我没有找到解决方案。
【问题讨论】:
标签:
apache-kafka-streams
spring-kafka
【解决方案1】:
根据您的用例,您正在寻找窗口聚合。 Kafka 流 DSL 有 TimeWindowedKStream 或 SessionWindowdKStream 应该能够解决您的问题。
【解决方案2】:
我不太了解KafkaStream的API,但是关于通用流API,
您将有一种方法可以随时间缓冲消息(例如 buffer、groupedWithin 或类似的东西),您可以在其中指定时间(和/或最大消息)。
那么你的流会是这样的:
KStream stream = builder.stream("mytopic", Consumed.with(Serdes.String(), new JsonSerde<>(MyObjectEvent.class)))
.map(record -> record.value().getId()) // assuming you get a stream of records, I don't know the KafkaStreams api
.groupedWithin(Duration.ofMinutes(10)) // <-- pseudocode, search for correct method
然后你会得到一个包含随着时间推移的 id 的流。