oceanbase / oblogproxy

A proxy service of incremental log of OceanBase
Other
41 stars 19 forks source link

Duplication exist clientId: xxx #46

Closed yunf17 closed 1 year ago

yunf17 commented 1 year ago

问题一:使用oblogproxy + flink cdc 同步数据的时候,flink cdc的job取消后,然后新建,oblogproxy端的日志就会报:Duplication exist clientId: xxx。 导致数据无法同步。请问这是什么原因呢?怎么解决?

问题二: flink cdc的job会经常报java.util.concurrent.TimeoutException: Timeout to receive message in RecordListener。 建表时已经将connect.timeout 改成了 300000 (5分钟)了,请问该怎么解决呢?

版本说明:

whhe commented 1 year ago

问题1: clientId 是oblogclient请求oblogproxy时带的一个参数,oblogproxy用它来作为连接的唯一标识,所以同一时刻不能出现多个相同 clientId 的请求。你提到这种情况有两种可能,一种可能是之前的任务还没有取消掉,另一种是flink任务中连接已经建立的情况下出错重连了,但是之前的连接没有关闭,也就是说可能就是问题2导致的。

问题2:如果表比较多的话是会出现这种连接建立很慢的情况,不过还是要先确定下logproxy是不是正常的,你可以试一下这个demo包,操作流程在readme里,看看单纯的 logproxy 订阅数据需要花多久。 oblogclient-demo.zip

yunf17 commented 1 year ago

@whhe 您好,关于问题2, 我同时有5个表的同步任务在跑,5个任务是通过脚本同时提交的。 总会出现其中一两个任务报java.util.concurrent.TimeoutException: Timeout to receive message in RecordListener的情况。但其他任务是正常的。 单独提交某一个任务,好像不会有这个情况,oblogproxy会很快就订阅成功。但是也会出现刚开始已经订阅成功了,任务跑一段时间,然后出现了报超时的错误。 所以,针对这种现象,有啥解决方案吗?

另外,关于问题1, oblogproxy已有的连接标识标识存在哪里呢? oblogclient带了唯一参数过来,oblogproxy从哪里获取的已存在的clientId来比较的? working_mode使用的默认的storage, 是在run目录下的对应目录吗? 能从oblogproxy清理一下吗? 因为即使我从flink cdc端把任务取消了,再次提交,还是会报错:Duplication exist ClientId。 从Flink 端我不知道怎样修改这个唯一标识,好像这个标识的组成由ip+某个id+租户?

whhe commented 1 year ago

@whhe 您好,关于问题2, 我同时有5个表的同步任务在跑,5个任务是通过脚本同时提交的。 总会出现其中一两个任务报java.util.concurrent.TimeoutException: Timeout to receive message in RecordListener的情况。但其他任务是正常的。 单独提交某一个任务,好像不会有这个情况,oblogproxy会很快就订阅成功。但是也会出现刚开始已经订阅成功了,任务跑一段时间,然后出现了报超时的错误。 所以,针对这种现象,有啥解决方案吗?

另外,关于问题1, oblogproxy已有的连接标识标识存在哪里呢? oblogclient带了唯一参数过来,oblogproxy从哪里获取的已存在的clientId来比较的? working_mode使用的默认的storage, 是在run目录下的对应目录吗? 能从oblogproxy清理一下吗? 因为即使我从flink cdc端把任务取消了,再次提交,还是会报错:Duplication exist ClientId。 从Flink 端我不知道怎样修改这个唯一标识,好像这个标识的组成由ip+某个id+租户?

同时启动多个任务的情况,建议你在启动参数里指定下 logproxy.client.id,保证几个任务用的值不一样。

oblogproxy 这边会对新请求创建一个新的 logreader 进程,运行目录在 run 下边,名字就是 client id,不用的可以清掉。任务取消后理论上oblogclient 应该是会主动关闭连接的,你说的这个情况可能是个 bug,我要找时间复现一下看看。

yunf17 commented 1 year ago

@whhe 您好,关于问题2, 我同时有5个表的同步任务在跑,5个任务是通过脚本同时提交的。 总会出现其中一两个任务报java.util.concurrent.TimeoutException: Timeout to receive message in RecordListener的情况。但其他任务是正常的。 单独提交某一个任务,好像不会有这个情况,oblogproxy会很快就订阅成功。但是也会出现刚开始已经订阅成功了,任务跑一段时间,然后出现了报超时的错误。 所以,针对这种现象,有啥解决方案吗? 另外,关于问题1, oblogproxy已有的连接标识标识存在哪里呢? oblogclient带了唯一参数过来,oblogproxy从哪里获取的已存在的clientId来比较的? working_mode使用的默认的storage, 是在run目录下的对应目录吗? 能从oblogproxy清理一下吗? 因为即使我从flink cdc端把任务取消了,再次提交,还是会报错:Duplication exist ClientId。 从Flink 端我不知道怎样修改这个唯一标识,好像这个标识的组成由ip+某个id+租户?

同时启动多个任务的情况,建议你在启动参数里指定下 logproxy.client.id,保证几个任务用的值不一样。

oblogproxy 这边会对新请求创建一个新的 logreader 进程,运行目录在 run 下边,名字就是 client id,不用的可以清掉。任务取消后理论上oblogclient 应该是会主动关闭连接的,你说的这个情况可能是个 bug,我要找时间复现一下看看。

好的,我试下,谢谢您。