【发布时间】:2021-07-23 22:54:45
【问题描述】:
我有一个包含多个任务的 Flink 应用。如果其中一项任务在处理过程中出现错误,我想在不重新启动整个作业的情况下对该一项任务进行指数退避。当直接使用 Kafka 而不是通过 Flink 时,我可以暂停消费者,然后在经过一定时间后恢复它。是否可以暂停 Flink 数据源或任务?是否有另一种方法可以仅在一项任务上完成指数退避而不影响其他任务?
【问题讨论】:
标签: apache-flink
我有一个包含多个任务的 Flink 应用。如果其中一项任务在处理过程中出现错误,我想在不重新启动整个作业的情况下对该一项任务进行指数退避。当直接使用 Kafka 而不是通过 Flink 时,我可以暂停消费者,然后在经过一定时间后恢复它。是否可以暂停 Flink 数据源或任务?是否有另一种方法可以仅在一项任务上完成指数退避而不影响其他任务?
【问题讨论】:
标签: apache-flink
通常 Flink 本身不提供这种能力。现在,可以在某些操作符中模拟这种能力,例如特定的 sinks 或 AsyncIO。例如,对于 Kafka,您可以设置生产者,使其重试失败的消息并在任何后续重试之前等待给定的时间。这并不完全是指数退避,但在不编写自己的接收器的情况下尽可能接近。
因此,这通常取决于您想要实现这一目标的位置,可能会有开箱即用的非指数退避。作为最后的手段,您可以尝试简单地编写自己的接收器来实现指数退避。
【讨论】: