Apache Flink 延迟处理某些事件

Ham*_*mid 3 apache-kafka apache-flink flink-streaming flink-cep flink-sql

我需要延迟处理某些事件。

例如。我有三个事件(发布在 Kafka 上):

  • A(id:1,重试时间:现在)
  • B(id:2,重试时间:10分钟后)
  • C(id:3,重试时间:现在)

我需要立即处理记录A和C,而记录B需要十分钟后处理。在 Apache Flink 中这是否可行?

到目前为止,无论我研究过什么,“触发器”似乎可能有助于在 Flink 中实现它,但尚未能够正确实现它。

我也查看了 Kafka 文档,但看起来不太可行。

Dav*_*son 5

触发器适用于窗口,但窗口似乎不适合您的用例。

更好的解决方案是将计时器与KeyedProcessFunction. 根据您想要等待 10 分钟的处理时间还是 10 分钟的事件时间,您将选择处理时间计时器或事件时间计时器。

您还需要使用 Flink 状态来存储稍后需要处理的事件。

您可以在此处找到流程功能的文档。Flink 训练中还有一些其他示例,请参见此处此处

FWIW,Flink 的 Stateful Functions API 可能更适合您正在做的事情,在这种情况下您将使用延迟消息