是否有可能实现"延迟执行"用KSQL?

时间:2018-06-18 07:06:48

标签: apache-kafka delayed-execution ksql

  1. 实施KSQL UDF" NOW()"
  2. 在my_event_stream中创建流my_notification_stream作为select *,其中,eventTime + threshold < NOW()
  3. 收听my_notification_stream主题

1 个答案:

答案 0 :(得分:0)

我认为您提出的解决方案不会像您期望的那样起作用,因为流数据会尽快得到处理。结果不会随着时间的推移而重新计算。

但是,您也许可以通过其他方式实现您想要的。

例如,如果未收到付款,则希望在30分钟后自动关闭订单。这可以通过在30分钟的窗口内将订单流与付款流左连接,然后用付款过滤掉任何结果来实现。这将为您提供一系列未付订单:

-- create stream of unpaid orders:
CREATE STREAM UNPAID AS 
   SELECT * FROM ORDERS 
     LEFT JOIN PAYMENTS WITHIN 30 MINUTES ON ORDERS.ORDERID = PAYMENTS.ORDERID
   WHERE PAYMENTS.ORDERID IS NULL;

第二个示例,如果我理解正确的话,可能会更棘手。您可以轻松地建立一个用户表,包括他们的订阅何时结束。但是,这还不足以达到您需要的“到期前3天”。问题是您所谈论的NOW udf仅在处理数据时执行,而不是在墙上时钟时间改变时执行。您需要以其他方式提示ksqlDB重新评估您的表达式。

我认为ksqlDB目前无法做到这一点,至少要等到它支持非键联接之后才能实现。