chunjun icon indicating copy to clipboard operation
chunjun copied to clipboard

fix[#621] jdbc connection will disconnection for a while.

Open chaozwn opened this issue 3 years ago • 6 comments

fix jdbc connection will disconnection for a while.

chaozwn avatar Mar 03 '22 10:03 chaozwn

connection.isValid(5) 有些jdbc实现类不支持isValid,放在jdbc模块会导致具体的插件实现类报错 sqlserver、DB2驱动包不支持isValid()

yanghuaiGit avatar Mar 04 '22 01:03 yanghuaiGit

connection.isValid(5) 有些jdbc实现类不支持isValid,放在jdbc模块会导致具体的插件实现类报错 sqlserver、DB2驱动包不支持isValid()

ok,我想加入一个connection.select 1用来valid connection useable.

chaozwn avatar Mar 04 '22 02:03 chaozwn

连接不可用的时候,会创建一个新的连接进行写入,那么假设不可用的连接还有事务未提交,此时这部分数据会丢失。 closeInternal里面所有的方法都进行了try catch将异常吞掉了,所以这儿在写入的时候不能直接判断连接不可用就创建一个新的连接进行写入

yanghuaiGit avatar Mar 04 '22 03:03 yanghuaiGit

怎么会被出现这种情况呢,com.dtstack.flinkx.connector.jdbc.sink.JdbcOutputFormat#writeMultipleRecordsInternal,这是jdbc mini batch写入的入口,如果这个位置判断connection失效,是不会有未提交的事务。 kafka -> writeMultipleRecordsInternal -> 写入成功 -> clearbatch -> 出错 -> writeSingleRecordInternal 所以我想不通为啥会有你说的部分数据丢失。

chaozwn avatar Mar 04 '22 03:03 chaozwn

如果事务开启了checkPoint 且EXACTLY_ONCE的话,connection 事务是手动提交,只有checkpoint的时候才会提交事务

yanghuaiGit avatar Mar 04 '22 04:03 yanghuaiGit

如果事务开启了checkPoint 且EXACTLY_ONCE的话,connection 事务是手动提交,只有checkpoint的时候才会提交事务

现在exactly_once提交的时候如果connection是失效的场合会自动rollback,然后重新初始化。

chaozwn avatar Mar 04 '22 06:03 chaozwn