Apache kafka 是否有可能实现;“延迟执行”;使用KSQL? 实现KSQL UDF“NOW()” 创建流my_notification_stream作为从my_event_stream中选择*,其中发生时间+阈值

Apache kafka 是否有可能实现;“延迟执行”;使用KSQL? 实现KSQL UDF“NOW()” 创建流my_notification_stream作为从my_event_stream中选择*,其中发生时间+阈值,apache-kafka,delayed-execution,ksqldb,Apache Kafka,Delayed Execution,Ksqldb,我认为您提出的解决方案不会像您预期的那样有效,因为流数据会尽快处理。结果不会随着时间的推移而重新计算 然而,你可以通过其他方式实现你想要的 例如,如果未收到付款,则希望在30分钟后自动关闭订单。这可以通过在30分钟的时间内将订单流与付款流连接起来,然后通过付款过滤出任何结果来实现。这将为您提供一系列未付订单: -- create stream of unpaid orders: CREATE STREAM UNPAID AS SELECT * FROM ORDERS LEFT

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

然而,你可以通过其他方式实现你想要的

例如,如果未收到付款,则希望在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中目前是不可能的,至少在它支持非键联接之前是不可能的

你能为你想做的事情增加一些背景知识吗?这里的用例是什么?延迟队列的一些用例有:1。已创建订单但未付款,30分钟后系统将自动关闭该订单。2.会员在到期前3天收到续订通知消息。