Flink结果集写Mysql的异常分析

2018-12-14  本文已影响158人  醉清风_55a1

报错信息:Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

在实时计算 Flink中,下游数据库使用Mysql等关系数据库(对应的connector为TDDL和RDS),当实时计算频繁写某个表或者资源时,存在死锁风险。

死锁形成的示例

假设完成一次insert需要依次抢占(A, B) 2个锁。A是一个范围锁,有2个事务(T1,T2),表的schema为(id(自增主键), nid(唯一键))。T1包含2条insert(null, 2),(null, 1), T2包含1条insert(null, 2)。

当T1和T2相互依赖且相互等待时死锁形成。

RDS/TDDL、OTS数据库引擎锁的区别

死锁的解决方案

高QPS/TPS或高并发写入情况场景,建议使用OTS作为结果表,可以解决死锁的问题。一般不建议使用TDDL或者RDS作为Flink Job的结果表。

如果必须要使用Mysql等关系数据库作为sink节点,有以下建议:

上一篇下一篇

猜你喜欢

热点阅读