ApacheKafka—有没有可能用ksql实现“延迟执行”?

m0rkklqb  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(442)

实现ksql udf“now()”
创建流my\u notification\u stream作为select*from my\u event\u stream where occurtime+threshold<now()
收听我的\u通知\u流主题

mec1mxoz

mec1mxoz1#

我认为您提出的解决方案不会像您预期的那样起作用,因为流数据会尽快得到处理。结果不会随着时间的推移而重新计算。
然而,你可以通过其他方式实现你想要的。
举一个例子,如果没有收到付款,就想在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 您所说的自定义项仅在处理数据时执行,而不是在挂钟时间变化时执行。您需要的是另一种方法来提示ksqldb重新计算表达式。
我认为这在ksqldb中是不可能的,至少在它支持非键联接之前是不可能的。

相关问题