1.概述
FlinkSQL读取kakfa数据然后写入Odps中,作业在运行一段时间之后报java.lang.RuntimeException: org.apache.flink.streaming.runtime.tasks.ExceptionInChainedOperatorException: Could not forward element to next operator,查看详细报错日志发现是如下错误:Caused by: java.lang.RuntimeException: com.aliyun.odps.OdpsException: Catalog Service Failed, ErrorCode: 103, Error Message: ODPS-0110061: Failed to run ddltask - Modify DDL meta encounter exception : ODPS-0121096:MetaStore transaction conflict - Reached maximum retry times because of OTSStorageTxnLockKeyFail(Inner exception: Transaction timeout because cannot acquire exclusive lock.)
这个属于odps这边的错误了,而非flink这边,接下来我们看看为何报这个错
2.解决
先根据com.aliyun.odps.OdpsException去查看源码
发现源码这边无法查看Sources;
那我们去查看Maxcomputer官网看是否有解决方案:根据报错代码ODPS-0110061,我们在SQL错误码(ODPS-01CCCCX)中发现这个代码
大概意思就是针对同一分区有多次读写操作而导致的,查看我们的FLink作业发现我们作业并发数高,这个可能是罪魁祸首。
3.总结
- 产生原因上传数据时高并发写入同一个表,频繁的并发操作导致报错。
- 解决措施适当减少并发数,在请求之间加入延迟时间,并且在出错的时候重试。