Apache Flink 延迟处理某些事件

3
我有一个需求,需要延迟处理一些事件。
例如,我有三个事件(在Kafka上发布):
A(id:1,retryAt:now)
B(id:2,retryAt:十分钟后)
C(id:3,retryAt:now)
我需要立即处理记录A和C,而记录B需要在十分钟后处理。这在Apache Flink中是否可行?
到目前为止,无论我做了多少研究,似乎“触发器”是可以帮助在Flink中实现它的东西,但我还没有能够正确地实现它。
我也查阅了Kafka文档,但在那里似乎不可行。
1个回答

4

触发器是为Windows设计的,但窗口似乎不太适合您的用例。

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

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

您可以在这里找到过程函数的文档。在Flink培训中还有一些其他示例,此处此处

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


谢谢David。这些信息很有用。“Flink状态用于存储待稍后处理的事件”:为此,我需要使用RocksDB或任何外部数据库吗?因为内存存储在Flink节点关闭时会丢失消息。 - undefined
1
Flink依赖于检查点来实现容错性。工作状态由状态后端管理,如果选择HashMapStateBackend,则状态将存储在内存中;如果选择EmbeddedRocksDBStateBackend,则状态将存储在本地磁盘上。 - undefined
嗨大卫,你能给出你对另一个Flink问题的意见吗? https://stackoverflow.com/questions/68725502/flink-with-atomic-sink-function - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接