Flink 消息重试像 Storm

Flink message retries like Storm

我正在尝试构建一个 Flink 作业,该作业将从 Kafka 源读取数据并进行一系列处理,包括少量 REST 调用,然后最终进入另一个 Kafka 主题。

我试图解决的问题是消息重试。如果 REST API 中出现暂时性错误怎么办?我怎样才能像 Storm 支持的那样对这些消息进行基于指数退避的重试?

我有 2 种方法可以考虑

  1. 使用 TimerService 但如果发生故障,状态将开始不受控制地扩展。
  2. 将失败的消息写入不同的 Kafka 主题并以某种延迟处理它们,但是如果 Sink 本身关闭几分钟就会出现问题?

是否有更好更稳健、更简单的方法来实现这一点?

我会使用 Flink 的 AsyncFunction to make the REST calls. If needed, it will backpressure the source(s) rather than use more than a configured amount of state. For retries, see AsyncFunction retries