我可以使用KSQL生成处理时间超时吗?

时间:2018-11-14 03:07:40

标签: apache-flink apache-kafka-streams ksql

我正在尝试使用KSQL在时限内尽我所能进行处理,并在该时限内获取结果。有关使用Apache Beam演示的相同想法,请参见“处理时间定时器”下的Timely (and Stateful) Processing with Apache Beam

给出:

  1. 具有唯一密钥的交易流;
  2. 在同一流中更新这些事务;和
  3. 下游处理器希望在特定的超时时间(例如20秒)接收到更新的交易后,该交易出现在第一个流中。

从概念上讲,我正在考虑创建第一个流的KTable来保存事务的最新状态,并使用KSQL通过向KTable查询具有(create_time + timeout)

我还没有在KSQL文档中找到实现此目的的方法,即使有内置的current_time,我也不确定在下一条记录出现之前它是否会被评估。

如何在KSQL中执行此操作?我需要自定义UDF吗?如果无法在KSQL中完成,我可以在KStreams中完成吗?

=====

更新:看来KStreams今天不支持此功能-Apache Flink似乎是此用例(以及许多其他用例)的方法。如果您知道解决KStreams限制的巧妙方法,请告诉我!

1 个答案:

答案 0 :(得分:0)

看一下Kafka Streams Processor API中的punctuate()功能,这可能就是您想要的。您可以在流时间(默认值:事件时间)和处理时间(通过PunctuationType.WALL_CLOCK_TIME)中使用punctuate()。在这里,您可以根据需要实施ProcessorTransformer,它们将使用punctuate()作为超时功能。

有关更多信息,请参见https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html

提示:您也可以在Kafka Streams的DSL中使用这样的处理器/变压器。这意味着您可以根据需要继续使用更方便的DSL,而只需在基于DSL的代码中的正确位置插入处理器/变压器即可。