You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 刘 家锹 <LJ...@outlook.com> on 2022/03/01 07:08:23 UTC

回复: Flink FailureRateRestartStrategy策略异常

是的,我们用的pipelined region的Failover策略,region切分这块没找到具体规则的文档。
但我们作业只有一个taskmanager,同时并行度为6,逻辑是从kafka消费处理后写到下游kafka。从日志以及拓扑中来看,猜测我们的作业应该只能按并行度切分成6个,故障的时候就直接超过了。

不过还有点疑问,希望可以解答下哈

  1.  对于这种FailoverStrategy+pipeline region的,best practice应该要如何比较好
  2.  测试主动kill taskmanager的,因为只有一个taskmanager,预期行为是否应该也是超过重试次数呢

作业jm日志以及拓扑图
[cid:a6f5540c-def2-4ece-8bde-43ef7e11c6f1]
[cid:54a76182-bb60-49bd-aeaa-48d68a01f14b]
________________________________
发件人: 胡伟华 <hu...@gmail.com>
发送时间: 2022年3月1日 14:07
收件人: user-zh@flink.apache.org <us...@flink.apache.org>
主题: Re: Flink FailureRateRestartStrategy策略异常

Hi, 家锹

 你应该使用了 pipelined region 的 Failover Strategy,这种模式下会将作业划分为多个 region,每次故障恢复只重启涉及到的 region.
单台机器故障时,如果多个 region 的 task 同时部署在这台机器上,那这些涉及到的 region 都会触发 failover,以至于达到了 FailureRateRestartStrategy 配置的重启上限,导致作业退出。

至于主动 kill TaskManager 作业重启而不退出,应该和 TaskManager 上运行的 Task 数量相关。

可以参考社区文档:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/ops/state/task_failure_recovery/#restart-pipelined-region-failover-strategy



> 2022年3月1日 上午10:34,刘 家锹 <LJ...@outlook.com> 写道:
>
> 你好,伙伴们
> 我们最近碰到一个关于FailureRateRestartStrategy策略的问题,有点困惑。情况是这样子的:
>
> Flink版本:0.10.1
> 部署方式: on Yarn
> FailureRateRestartStrategy配置:failuresIntervalMS=60000,backoffTimeMS=15000,maxFailuresPerInterval=4
>
> 当时我们hadoop集群的一台机器假死卡住,而Flink任务的TaskManager就运行在这台机器上。机器故障时,JobManager收到了heartbeat超时异常,从日志上看是连续抛出的4次超时异常(每个异常抛出时间间隔10ms左右)。紧接着就打印触发了FailureRateRestartStrategy策略上限,把整个Flink任务退出了。
> 据我从文档所了解,当TaskManager异常,JobManager应该首先尝试起一个新的TaskManager,再尝试重启恢复任务。但从当时的日志来看并没有。
> 奇怪的是,如果我测试直接kill掉TaskManager的话,是会触发作业重启的。
>
> 有点困惑,希望能得到社区伙伴们的帮助,感谢
> 日志都贴到附件上了


Re:回复: Flink FailureRateRestartStrategy策略异常

Posted by janke <ja...@163.com>.
可以通过降低restratstrategy的统计灵敏度,短时间持续出现同个异常导致的failed只会计数一次,目前已经有相关patch,具体可看:
https://issues.apache.org/jira/browse/FLINK-26315

















在 2022-03-02 12:04:39,"刘 家锹" <LJ...@outlook.com> 写道:
>你好,感谢回答我的疑问
>
>我想我大概找到原因了,跟你说的一样。使用pipelined-region的failover策略,而作业本身切分了6个reion,在一次container失败当中就会全部失败。
>目前我们作业改为使用full的faiover策略,因为都是1个TM且拓扑比较简单。
>
>关于回复中的亮点:
>
>  1.  这个确实是一个解决办法,但存在参数不好配置,需要根据重试策略+region数+TM部署来指定
>  2.  测试中没有退出的原因是,测试作业的拓扑与实际运行的作业有差异,测试作业中只有一个region,所以就没有退出了。符合预期
>
>再次感谢哈
>
>________________________________
>发件人: 胡伟华 <hu...@gmail.com>
>发送时间: 2022年3月1日 21:07
>收件人: user-zh@flink.apache.org <us...@flink.apache.org>
>主题: Re: Flink FailureRateRestartStrategy策略异常
>
>
>1. 可以根据作业的 region 数量、单 TaskManager Slot 数量综合来考虑,我个人建议要容忍 1~2 台 TM 故障而不直接退出
>2. 预期也是会超过重试次数退出的,可以从日志看看没有退出的原因
>
>> 2022年3月1日 下午3:08,刘 家锹 <LJ...@outlook.com> 写道:
>>
>> 是的,我们用的pipelined region的Failover策略,region切分这块没找到具体规则的文档。
>> 但我们作业只有一个taskmanager,同时并行度为6,逻辑是从kafka消费处理后写到下游kafka。从日志以及拓扑中来看,猜测我们的作业应该只能按并行度切分成6个,故障的时候就直接超过了。
>>
>> 不过还有点疑问,希望可以解答下哈
>> 对于这种FailoverStrategy+pipeline region的,best practice应该要如何比较好
>> 测试主动kill taskmanager的,因为只有一个taskmanager,预期行为是否应该也是超过重试次数呢
>>
>> 作业jm日志以及拓扑图
>>
>>
>> 发件人: 胡伟华 <hu...@gmail.com>
>> 发送时间: 2022年3月1日 14:07
>> 收件人: user-zh@flink.apache.org <us...@flink.apache.org>
>> 主题: Re: Flink FailureRateRestartStrategy策略异常
>>
>> Hi, 家锹
>>
>>  你应该使用了 pipelined region 的 Failover Strategy,这种模式下会将作业划分为多个 region,每次故障恢复只重启涉及到的 region.
>> 单台机器故障时,如果多个 region 的 task 同时部署在这台机器上,那这些涉及到的 region 都会触发 failover,以至于达到了 FailureRateRestartStrategy 配置的重启上限,导致作业退出。
>>
>> 至于主动 kill TaskManager 作业重启而不退出,应该和 TaskManager 上运行的 Task 数量相关。
>>
>> 可以参考社区文档:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/ops/state/task_failure_recovery/#restart-pipelined-region-failover-strategy
>>
>>
>>
>> > 2022年3月1日 上午10:34,刘 家锹 <LJ...@outlook.com> 写道:
>> >
>> > 你好,伙伴们
>> > 我们最近碰到一个关于FailureRateRestartStrategy策略的问题,有点困惑。情况是这样子的:
>> >
>> > Flink版本:0.10.1
>> > 部署方式: on Yarn
>> > FailureRateRestartStrategy配置:failuresIntervalMS=60000,backoffTimeMS=15000,maxFailuresPerInterval=4
>> >
>> > 当时我们hadoop集群的一台机器假死卡住,而Flink任务的TaskManager就运行在这台机器上。机器故障时,JobManager收到了heartbeat超时异常,从日志上看是连续抛出的4次超时异常(每个异常抛出时间间隔10ms左右)。紧接着就打印触发了FailureRateRestartStrategy策略上限,把整个Flink任务退出了。
>> > 据我从文档所了解,当TaskManager异常,JobManager应该首先尝试起一个新的TaskManager,再尝试重启恢复任务。但从当时的日志来看并没有。
>> > 奇怪的是,如果我测试直接kill掉TaskManager的话,是会触发作业重启的。
>> >
>> > 有点困惑,希望能得到社区伙伴们的帮助,感谢
>> > 日志都贴到附件上了
>

回复: Flink FailureRateRestartStrategy策略异常

Posted by 刘 家锹 <LJ...@outlook.com>.
你好,感谢回答我的疑问

我想我大概找到原因了,跟你说的一样。使用pipelined-region的failover策略,而作业本身切分了6个reion,在一次container失败当中就会全部失败。
目前我们作业改为使用full的faiover策略,因为都是1个TM且拓扑比较简单。

关于回复中的亮点:

  1.  这个确实是一个解决办法,但存在参数不好配置,需要根据重试策略+region数+TM部署来指定
  2.  测试中没有退出的原因是,测试作业的拓扑与实际运行的作业有差异,测试作业中只有一个region,所以就没有退出了。符合预期

再次感谢哈

________________________________
发件人: 胡伟华 <hu...@gmail.com>
发送时间: 2022年3月1日 21:07
收件人: user-zh@flink.apache.org <us...@flink.apache.org>
主题: Re: Flink FailureRateRestartStrategy策略异常


1. 可以根据作业的 region 数量、单 TaskManager Slot 数量综合来考虑,我个人建议要容忍 1~2 台 TM 故障而不直接退出
2. 预期也是会超过重试次数退出的,可以从日志看看没有退出的原因

> 2022年3月1日 下午3:08,刘 家锹 <LJ...@outlook.com> 写道:
>
> 是的,我们用的pipelined region的Failover策略,region切分这块没找到具体规则的文档。
> 但我们作业只有一个taskmanager,同时并行度为6,逻辑是从kafka消费处理后写到下游kafka。从日志以及拓扑中来看,猜测我们的作业应该只能按并行度切分成6个,故障的时候就直接超过了。
>
> 不过还有点疑问,希望可以解答下哈
> 对于这种FailoverStrategy+pipeline region的,best practice应该要如何比较好
> 测试主动kill taskmanager的,因为只有一个taskmanager,预期行为是否应该也是超过重试次数呢
>
> 作业jm日志以及拓扑图
>
>
> 发件人: 胡伟华 <hu...@gmail.com>
> 发送时间: 2022年3月1日 14:07
> 收件人: user-zh@flink.apache.org <us...@flink.apache.org>
> 主题: Re: Flink FailureRateRestartStrategy策略异常
>
> Hi, 家锹
>
>  你应该使用了 pipelined region 的 Failover Strategy,这种模式下会将作业划分为多个 region,每次故障恢复只重启涉及到的 region.
> 单台机器故障时,如果多个 region 的 task 同时部署在这台机器上,那这些涉及到的 region 都会触发 failover,以至于达到了 FailureRateRestartStrategy 配置的重启上限,导致作业退出。
>
> 至于主动 kill TaskManager 作业重启而不退出,应该和 TaskManager 上运行的 Task 数量相关。
>
> 可以参考社区文档:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/ops/state/task_failure_recovery/#restart-pipelined-region-failover-strategy
>
>
>
> > 2022年3月1日 上午10:34,刘 家锹 <LJ...@outlook.com> 写道:
> >
> > 你好,伙伴们
> > 我们最近碰到一个关于FailureRateRestartStrategy策略的问题,有点困惑。情况是这样子的:
> >
> > Flink版本:0.10.1
> > 部署方式: on Yarn
> > FailureRateRestartStrategy配置:failuresIntervalMS=60000,backoffTimeMS=15000,maxFailuresPerInterval=4
> >
> > 当时我们hadoop集群的一台机器假死卡住,而Flink任务的TaskManager就运行在这台机器上。机器故障时,JobManager收到了heartbeat超时异常,从日志上看是连续抛出的4次超时异常(每个异常抛出时间间隔10ms左右)。紧接着就打印触发了FailureRateRestartStrategy策略上限,把整个Flink任务退出了。
> > 据我从文档所了解,当TaskManager异常,JobManager应该首先尝试起一个新的TaskManager,再尝试重启恢复任务。但从当时的日志来看并没有。
> > 奇怪的是,如果我测试直接kill掉TaskManager的话,是会触发作业重启的。
> >
> > 有点困惑,希望能得到社区伙伴们的帮助,感谢
> > 日志都贴到附件上了


Re: Flink FailureRateRestartStrategy策略异常

Posted by 胡伟华 <hu...@gmail.com>.
1. 可以根据作业的 region 数量、单 TaskManager Slot 数量综合来考虑,我个人建议要容忍 1~2 台 TM 故障而不直接退出
2. 预期也是会超过重试次数退出的,可以从日志看看没有退出的原因

> 2022年3月1日 下午3:08,刘 家锹 <LJ...@outlook.com> 写道:
> 
> 是的,我们用的pipelined region的Failover策略,region切分这块没找到具体规则的文档。
> 但我们作业只有一个taskmanager,同时并行度为6,逻辑是从kafka消费处理后写到下游kafka。从日志以及拓扑中来看,猜测我们的作业应该只能按并行度切分成6个,故障的时候就直接超过了。
> 
> 不过还有点疑问,希望可以解答下哈
> 对于这种FailoverStrategy+pipeline region的,best practice应该要如何比较好
> 测试主动kill taskmanager的,因为只有一个taskmanager,预期行为是否应该也是超过重试次数呢
> 
> 作业jm日志以及拓扑图
> 
> 
> 发件人: 胡伟华 <hu...@gmail.com>
> 发送时间: 2022年3月1日 14:07
> 收件人: user-zh@flink.apache.org <us...@flink.apache.org>
> 主题: Re: Flink FailureRateRestartStrategy策略异常
>  
> Hi, 家锹
> 
>  你应该使用了 pipelined region 的 Failover Strategy,这种模式下会将作业划分为多个 region,每次故障恢复只重启涉及到的 region.
> 单台机器故障时,如果多个 region 的 task 同时部署在这台机器上,那这些涉及到的 region 都会触发 failover,以至于达到了 FailureRateRestartStrategy 配置的重启上限,导致作业退出。
> 
> 至于主动 kill TaskManager 作业重启而不退出,应该和 TaskManager 上运行的 Task 数量相关。
> 
> 可以参考社区文档:https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/ops/state/task_failure_recovery/#restart-pipelined-region-failover-strategy
> 
> 
> 
> > 2022年3月1日 上午10:34,刘 家锹 <LJ...@outlook.com> 写道:
> > 
> > 你好,伙伴们
> > 我们最近碰到一个关于FailureRateRestartStrategy策略的问题,有点困惑。情况是这样子的:
> > 
> > Flink版本:0.10.1
> > 部署方式: on Yarn
> > FailureRateRestartStrategy配置:failuresIntervalMS=60000,backoffTimeMS=15000,maxFailuresPerInterval=4
> > 
> > 当时我们hadoop集群的一台机器假死卡住,而Flink任务的TaskManager就运行在这台机器上。机器故障时,JobManager收到了heartbeat超时异常,从日志上看是连续抛出的4次超时异常(每个异常抛出时间间隔10ms左右)。紧接着就打印触发了FailureRateRestartStrategy策略上限,把整个Flink任务退出了。
> > 据我从文档所了解,当TaskManager异常,JobManager应该首先尝试起一个新的TaskManager,再尝试重启恢复任务。但从当时的日志来看并没有。
> > 奇怪的是,如果我测试直接kill掉TaskManager的话,是会触发作业重启的。
> > 
> > 有点困惑,希望能得到社区伙伴们的帮助,感谢
> > 日志都贴到附件上了