flink检查点时间与缓冲区对齐大小或对齐时间的关系如何?

k3bvogb1  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(357)

我的流flink作业的检查点时间为2-3秒(15-20%)和3-4分钟(8-12%)以及平均2分钟。我们有两个有状态的操作符。第一个是kafka consumer作为源(flinkkafkaconsumer010),另一个是hdfs sink(custombucketingsink)。这两种情况使得保存点的状态约为1-1.5gb,检查点的状态约为800mb-6gb(平均3gb)。我们有30秒的翻滚处理窗口。检查点持续时间和两个检查点之间的最小暂停时间为3分钟。我的工作平均每分钟消耗约300万条记录,高峰时间消耗约2000万条/分钟记录。有足够的cpu和内存供flink使用。
现在我的疑问是:
1) 即使少数检查点状态的大小比其他检查点状态小(70-80%),也需要几分钟(15-20%的时间),而其他检查点状态需要5-10秒。
2) 缓冲区对齐大小有时会增加到7-8gb,而平均值为800mb-1gb,但检查点时间不受此影响。我想它应该需要更多的时间,因为它应该等待检查站的障碍。
3) 如果我们增加翻滚窗口的尺寸,检查时间会受到影响吗。我认为它既不应该影响保存点时间,也不应该影响检查点时间。
4) 很少有进入hdfs的子任务需要2-3分钟(5-10%的时间)。因此,虽然98%的子任务是在30-50秒内完成的。1-2(95%的时间,只有一个)子任务需要2-3分钟。耽误了整个检查时间。问题不在于运行此子任务的节点,因为它有时发生在某个节点上,有时发生在另一个节点上。
5) 我们每6-8小时会收到一个异常,它将重新启动作业。位于org.apache.flink.streaming.runtime.tasks.systemprocessingtimeservice$triggertask.run(systemprocessingtimeservice)的timerexception{java.nio.channels.closedbyinterruptexception}。java:288)
6) 如何最小化对齐缓冲时间。
7) 保存点时间随输入速率或状态大小的增加或减少而增加或减少,但检查点时间并不相同。检查点时间有时与状态大小呈反比关系,或者我们可以看到它不受状态大小的影响。
8) 每当我们重新启动作业时,所有子任务在所有节点上都需要2-3天的统一时间,但之后1-2个子任务需要2-3分钟,而其他子任务需要15-30秒。我的这种行为可能是错误的,但据我观察,这也是一种情况。

k75qkfdt

k75qkfdt1#

请注意,窗口是有状态的,除非您进行增量聚合,否则较长的窗口具有更多的状态,这将反过来影响检查点大小和持续时间。
了解您使用的是哪种状态的后端,以及是否使用增量检查点将很有帮助。
我将首先尝试找出导致背压的慢下沉子任务的原因,而背压反过来又会导致痛苦的检查点。例如,可能是数据扭曲或资源匮乏。一些常见的原因包括cpu、网络或磁盘带宽不足,或aws(或其他api)速率限制。例如,看起来您有很多cpu,但是一个热键可能会给一个线程带来太多的负载,从而阻碍整个集群。
如果您找到一种方法来纠正接收器的不平衡,那么检查点对齐问题应该会平静下来(请注意,如果可以容忍重复的结果,则可以通过选择 CheckpointingMode.AT_LEAST_ONCE .)

相关问题