我正在尝试使用KSQL在时限内尽我所能进行处理,并在该时限内获取结果。有关使用Apache Beam演示的相同想法,请参见“处理时间定时器”下的Timely (and Stateful) Processing with Apache Beam。
给出:
从概念上讲,我正在考虑创建第一个流的KTable来保存事务的最新状态,并使用KSQL通过向KTable查询具有(create_time + timeout) 我还没有在KSQL文档中找到实现此目的的方法,即使有内置的current_time,我也不确定在下一条记录出现之前它是否会被评估。 如何在KSQL中执行此操作?我需要自定义UDF吗?如果无法在KSQL中完成,我可以在KStreams中完成吗? ===== 更新:看来KStreams今天不支持此功能-Apache Flink似乎是此用例(以及许多其他用例)的方法。如果您知道解决KStreams限制的巧妙方法,请告诉我!
答案 0 :(得分:0)
看一下Kafka Streams Processor API中的punctuate()
功能,这可能就是您想要的。您可以在流时间(默认值:事件时间)和处理时间(通过PunctuationType.WALL_CLOCK_TIME
)中使用punctuate()。在这里,您可以根据需要实施Processor
或Transformer
,它们将使用punctuate()
作为超时功能。
有关更多信息,请参见https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html。
提示:您也可以在Kafka Streams的DSL中使用这样的处理器/变压器。这意味着您可以根据需要继续使用更方便的DSL,而只需在基于DSL的代码中的正确位置插入处理器/变压器即可。