oceanbase cdc同步数据到ES,会同步成功,但是几分钟后Flink JOB运行后会挂掉

组件版本:OB版本4.2,Flink1.17.1,oblogproxy-ce-for-4x-1.1.3-x86_64
oceanbase cdc同步数据到ES,会同步成功,但是几分钟后Flink JOB运行后会挂掉,ES中有同步的数据,Flink日志中message: "Failed to create oblogreader"这种错误最多

Flink 这边挂掉的时候有报错日志吗?同步到 ES 的数据里是全量数据同步的还是增量实时数据?

flink–taskexecutor-0-dip.log (1.1 MB)
第一次全量,后面的捕获增量实时数据

从这个日志看起来,好像同时启动了多个 clientId 一样的 source function,您可以确认下 logproxy 那边运行日志是不是报了 client id 已存在之类的。

按道理 flink cdc oceanbase connector 的 source function 并发度只会是1,如果您在一个 flink 任务中有多个源端读取的 connector 存在,需要将他们的 logproxy.client.id 设置为不同的值。

老师,client Id是每一张source表都需要配置吗,还是一个job中配置统一的一个client id,我刚给每张表都配置了client id,机器直接卡死了

目前 flink cdc 中构建 client id 是用的跟时间和租户相关的规则,如果是在同一个 job 中,而且读的是同一个租户,因为启动时间差不多,有可能会生成相同的 client id。而 oblogproxy 是根据 client id 来标识客户端请求的,如果客户端请求的 client id 已存在,该请求会被拒绝。所以这种情况下需要手动设置 client id 来避免撞车,也就是在 flink 里一张表配一个。

老师,我给每张source表都设置了client id,Flink JOB还是会挂掉,而且特别耗费机器资源,这是日志,麻烦您再看看
flink–taskexecutor-0-dip.log (955.8 KB)

需要再看看 logproxy 这几个 client id 对应目录的运行日志,另外你可以 lsof -i:2983 看下 logproxy 部署机器上以往任务的进程有没有正常结束,如果没有退出的话建议也 kill 掉。

老师,基本定位到问题,机器资源的问题导致的,更换了硬件更好的,这次倒没有挂掉了,我看flink中一个client id对应一个 oblogreader,oblogreader比较耗费资源,这个有办法自己设置占用内存CPU吗

目前没有办法严格限制内存。

libobcdc 有一个内存控流的参数,不过实际上它也不会真的限制住 logproxy 的内存 https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000035821

如果你想使用的话,因为现在 flink cdc 的 sql 模式并没有放开这个配置,只能在 stream 模式中通过参数 obReaderConfig 自己创建 OceanBaseRichSourceFunction 来设置。https://github.com/oceanbase/oblogclient/blob/master/docs/quickstart/logproxy-client-tutorial-cn.md#基本使用