持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
问题: # Flink exactly-once 报错 Timeout expired after 60000 milliseconds while awaiting InitProducerId
背景:
2022.6.11下午一点开始,接到客户现场电话,说目前从测试环境迁移到生产环境的任务运行出现大量失败,其中写kafka的任务全部失败,主要原因是kafka事务超时导致checkpoint超时,进而导致Flink任务失败。
解决过程:
这是一个Flink任务,Source为MySQL,Sink为Kafka,处理逻辑为一些简单的转换映射,就任务逻辑本身来说肯定不会有问题。任务报错的意思就是Kafka事务超时,根据网上的意见呢,主要两方面原因,一方面是Flink开启了exactly once的机制,另一方面是kafka的事务机制。由于这个任务是从测试环境迁移过来的,exactly once一直是默认的,测试环境才刚刚测试结束,无论是吞吐还是结果正确性都是优秀的,然鹅在生产环境居然跑都跑不起来,直接让客户联系运维排查生产环境的kafka服务配置是否正常,参考flink检查点不断失败(等待initproducerid时超时)_大数据知识库 (saoniuhuo.com),后面运维排查了果然就是kafka服务的问题,但是客户运维没有透露具体是什么问题,而且解决问题十分粗暴,修改配置后,直接删除了原topic,然后建立了一个同名topic。等运维处理完毕后,我方现场同学再次重启流程便正常了。为了保险起见,我又让现场把checkpoint的超时时间调成了2min(正常cp 20s-40s左右)
总结:
当Flink的报错是由数据源服务返回报错信息的时候,可能flink任务本身是没有问题的,不要一个劲死磕在自己身上。