Apache flink Flink消息像风暴一样重试

Apache flink Flink消息像风暴一样重试,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在尝试构建一个Flink作业,该作业将从卡夫卡源读取数据并进行一系列处理,包括很少的REST调用,然后最终进入另一个卡夫卡主题 我试图解决的问题是消息重试。如果RESTAPI中存在暂时性错误怎么办?我怎样才能像Storm支持的那样对这些消息进行基于指数退避的重试 我有两种方法可以考虑 使用TimerService,但如果出现故障,状态将开始不可控地扩展 将失败的消息写入另一个卡夫卡主题,并以某种延迟处理它们,但如果接收器本身停机几分钟,问题就会出现 有没有更好、更健壮、更简单的方法来实现这一

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

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

我有两种方法可以考虑

  • 使用TimerService,但如果出现故障,状态将开始不可控地扩展
  • 将失败的消息写入另一个卡夫卡主题,并以某种延迟处理它们,但如果接收器本身停机几分钟,问题就会出现

  • 有没有更好、更健壮、更简单的方法来实现这一点?

    我会使用Flink的方法来完成其余的调用。如果需要,它将对源进行背压,而不是使用超过配置数量的状态。有关重试,请参阅。

    有关方法#2,您的Kafka群集是否经常关闭,如果接收器关闭,仅依靠Flink失败,然后从检查点重新启动是不够的?谢谢,但我必须放弃一致性,对吗?出于实际原因,无法使REST API成为链中的第一个调用。AsyncFunction用于查找比用于更新外部系统更好。它至少提供一次保证。根据文档,AsyncIO只能在运营商链的最前端使用。我理解这意味着它必须是源流上的第一个操作符,对吗?这个限制不再有效;看见但不,这并不意味着它必须是工作中的第一个操作员,而是意味着它必须是其任务中的第一个操作员。