【问题标题】:Is it possible to achieve "Delayed Execution" with KSQL?是否可以用 KSQL 实现“延迟执行”?
【发布时间】:2021-11-24 23:52:41
【问题描述】:
  1. 实现 KSQL UDF “NOW()”
  2. create stream my_notification_stream as select * from my_event_stream where occurTime + threshold
  3. 收听 my_notification_stream 主题

【问题讨论】:

  • 您能否添加更多关于您正在尝试做的什么的上下文?这里的用例是什么?
  • 延迟队列的一些用例是: 1. 订单已创建但未付款,30分钟后系统会自动关闭。 2.会员在到期前3天收到更新通知消息。

标签: apache-kafka delayed-execution ksqldb


【解决方案1】:

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

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

以想要在未收到付款的情况下在 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 天”来说是不够的。问题是你说的NOWudf只在处理数据时执行,而不是随着挂钟时间的变化。您需要的是提示 ksqlDB 重新评估您的表达式的其他方式。

我认为 ksqlDB 目前无法做到这一点,至少在它支持非键连接之前是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多