我认为Kafka Streams可以提供帮助,但我找不到任何显示方式的文档或示例。
我发现了一个类似的问题,但它没有任何实施建议:Kafka Streams wait function with depending objects
我想做什么:
我想将Kafka主题中的相关记录关联到单个对象中,并将该新对象发布到单独的输出主题。例如,可能有五个消息记录通过唯一键相互关联 - 我想从这些相关对象构建一个新对象,并将其生成一个新主题。
我希望聚合一小时滑动窗口内的所有相关事件。换句话说,只要ID为“123”的消息A到达消费者,应用程序必须至少等待一小时才能到达ID为“123”的剩余记录。在所有记录到达或一小时后,这些记录已过期。
最后,一小时内收集的所有相关消息都用于创建一个新对象,然后将其发送到另一个Kafka主题。
遇到的问题。
Kafka中的滑动窗口似乎只在将两个流连接在一起时才起作用。我们只有一个流连接到主题 - 我不知道为什么需要两个流或我们将如何实现这一点。我在网上找不到这个例子。 我在Kafka中看到的所有流函数在收集相同密钥的事件时简单地聚合/缩减为简单值。例如,键出现的次数或累加某些值
这是一些伪代码来描述我在说什么。如果功能存在,函数名称/语义将会不同。
KStream<Key, Object> kstream = kStreamBuilder.stream(TOPIC);
kstream.windowedBy(
// One hour sliding Window
)
.collectAllRelatedKeys(
// Collect all Records related to each key
// map == HashMap<Key, ArrayList<Value>>
map.get(key).add(value);
)
.transformAndProcess(
if(ALL_EVENTS_COLLECTED) {
// Create new Object from all related records
newObject =
createNewObjectFromRelatedRecordsFunction(map.get(key));
producer.send(newObject);
}
)
问题(谢谢你的帮助):