Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Duplication exist clientId: xxx #46

Closed
yunf17 opened this issue Jun 7, 2023 · 4 comments
Closed

Duplication exist clientId: xxx #46

yunf17 opened this issue Jun 7, 2023 · 4 comments

Comments

@yunf17
Copy link

yunf17 commented Jun 7, 2023

问题一:使用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分钟)了,请问该怎么解决呢?

版本说明:

  • flink-sql-connector-oceanbase-cdc-2.3.0.jar
  • oblogproxy-ce-for-3x-1.1.0-20221201191325.tar
  • flink-1.14.4
  • ob_ce-3.1.4
@whhe
Copy link
Member

whhe commented Jun 7, 2023

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

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

@yunf17
Copy link
Author

yunf17 commented Jun 7, 2023

@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
Copy link
Member

whhe commented Jun 7, 2023

@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
Copy link
Author

yunf17 commented Jun 7, 2023

@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,我要找时间复现一下看看。

好的,我试下,谢谢您。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants