当前位置: 首页 > 知识库问答 >
问题:

Flink消息像Storm一样重试

张炳
2023-03-14

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

我试图解决的问题是消息重试。如果REST API中存在瞬时错误怎么办?如何像Storm支持的方式那样,对这些消息进行基于指数退避的重试?

我有两种方法可以考虑

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

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

共有1个答案

阎英朗
2023-03-14

我将使用Flink的AsyncFunction进行REST调用。如果需要,它将对源施加反压力,而不是使用超过配置的状态量。有关重试,请参阅AsyncFunction重试。

 类似资料:
  • 我已经设置了一个Flink 1.2独立集群,其中包含2个JobManager和3个TaskManager,我正在使用JMeter通过生成Kafka消息/事件对其进行负载测试,然后处理这些消息/事件。处理作业在TaskManager上运行,通常需要大约15K个事件/秒。 作业已设置EXACTLY_ONCE检查点,并将状态和检查点持久化到Amazon S3。如果我关闭运行作业的TaskManager需

  • 如何从动物园管理员那里获得最后一次偏移时间?当使用Storm喷口阅读来自Kafka的消息时。上下文:Kafka 不断获取消息,使用者读取一段时间,然后由于任何原因关闭,然后使用者仅读取最新消息,但不读取上次偏移量读取

  • 我第一次试着让它工作,所以请容忍我。我正在尝试学习Kafka的检查点设置和处理“错误”消息,在不丢失状态的情况下重新启动。 用例:使用检查点。从Kafka那里读取一个整数流,保持一个连续的和。如果读到“坏”Kafka消息,请重新启动应用程序,跳过“坏”消息,保持状态。我的流看起来像这样: set1,5 set1,7 set1,foobar set1,6 我希望我的应用程序保留它看到的整数的运行总和

  • 主要内容:1 并发消费重试,1.1 失败重试,1.2 超时重试,2 顺序消费重试,2.1 失败重试,2.2 超时重试,3 broker处理回退请求,3.1 asyncConsumerSendMsgBack处理回退请求,3.2 handleRetryAndDLQ处理重试和死信消息基于RocketMQ release-4.9.3,深入的介绍了DefaultMQPushConsumer消费者重试消息和死信消息源码。 消费重试:并发消费和顺序消费对于消费失败的消息均会有消息重试机制。 1 并发消费重试