最近部署在Yarn 集群的实时计算节点频繁的报警,出现了IO 过高的问题,调整了任务的checkpoint间隔之后,整个IO都下来了。
tsar.io.await app=io;partition=io_vdb 251.3>200 AND tsar.io.qusize app=io;partition=io_vdb 26>10

其实这个问题不难定位,Flink 涉及到磁盘相关的主要就是在checkpoint的时候需要进行IO操作,那这个问题肯定就是因为checkpoint的原因导致的IO瓶颈。
然后去机器上通过 iotop 查看是那个进程IO过高,去定位一下具体的任务,通过iotop 查看发现这台机器上的几个进程是同一个任务的TaskManager,然后查看任务的配置发现checkpoint间隔设置的 10 s,而且是一个比较大状态的任务,这就不难定位到问题了,主要是以下几个原因:
其实在我们的实时任务中,对于绝大部分任务消费的是Kafka,checkpoint时会进行offset上报,如果checkpoint设置的过大,如果配置太长可能会造成容错时候较多数据重复消费,但是如果下游是可以保证幂等的情况下这些数据的重复消费是不会造成一定的影响的。同时checkpoint设置过长可能在容错时造成一定的数据延迟,因为要消费上一次上报的offset到容错的时间点的数据。因此checkpoint的设置需要考虑任务本身的数据延迟容忍度和数据重复消费的容忍度,如果再可接受的范围还是可以设置的大一点,不然还是度集群节点的IO有一定的挑战的。