滑动窗口中的Kafka KStream相关消息事件

时间:2018-03-05 21:00:34

标签: apache-kafka apache-kafka-streams rocksdb

我认为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);   
        }
    )

问题(谢谢你的帮助):

  1. 我如何使用单个流的滑动窗口?
  2. 如何自定义KStream / KTable函数以收集时间窗口内的所有相关事件并将新对象生成到另一个主题?
  3. 确认/偏移管理如何与滑动窗口流一起使用?
  4. 这可以保证完全一次交付吗?供参考:https://www.confluent.io/blog/enabling-exactly-kafka-streams/

0 个答案:

没有答案