Apache Flink 延迟处理某些事件
Apache Flink delay processing of certain events
我有延迟处理某些事件的要求。
例如。我有三个事件(发布在 Kafka 上):
- A(id:1,重试时间:现在)
- B (id: 2, retryAt: 10 分钟后)
- C(id:3,重试时间:现在)
我需要立即处理记录A和C,而记录B需要十分钟后处理。
这在 Apache Flink 中是否可行?
到目前为止,无论我研究过什么,“触发器”似乎都有助于在 Flink 中实现它,但尚未能够正确实现它。
我也查看了 Kafka 文档,但那里看起来不可行。
触发器适用于 windows,但开窗似乎不适合您的用例。
更好的解决方案是使用具有 KeyedProcessFunction
的计时器。根据您是要等待 10 分钟的处理时间还是 10 分钟的事件时间,您将选择处理时间计时器或事件时间计时器。
您还需要使用 Flink 状态来存储需要稍后处理的事件。
您将找到流程函数的文档 here. There are some additional examples in the Flink training, here and here。
FWIW,Flink 的有状态函数 API 可能更适合你正在做的事情,在这种情况下你会使用 delayed messages.
我有延迟处理某些事件的要求。
例如。我有三个事件(发布在 Kafka 上):
- A(id:1,重试时间:现在)
- B (id: 2, retryAt: 10 分钟后)
- C(id:3,重试时间:现在)
我需要立即处理记录A和C,而记录B需要十分钟后处理。 这在 Apache Flink 中是否可行?
到目前为止,无论我研究过什么,“触发器”似乎都有助于在 Flink 中实现它,但尚未能够正确实现它。
我也查看了 Kafka 文档,但那里看起来不可行。
触发器适用于 windows,但开窗似乎不适合您的用例。
更好的解决方案是使用具有 KeyedProcessFunction
的计时器。根据您是要等待 10 分钟的处理时间还是 10 分钟的事件时间,您将选择处理时间计时器或事件时间计时器。
您还需要使用 Flink 状态来存储需要稍后处理的事件。
您将找到流程函数的文档 here. There are some additional examples in the Flink training, here and here。
FWIW,Flink 的有状态函数 API 可能更适合你正在做的事情,在这种情况下你会使用 delayed messages.