Flink cdc + oblogproxy + ob系列问题咨询-04

【测试环境】

【 OB 】

【 4.2.1】

【问题描述】

通过flink cdc 监听一张OB大表(存量数据大概2.5亿行),写入到另一张OB表里,

写入的并发设置的很高的时候(‘sink.parallelism’=‘200’),oblogreader进程会经常挂掉

查看日志显示:


提示是内存或者租户内存不足。
看下当前资源使用情况select a.zone,concat(a.svr_ip,’:’,a.svr_port) observer,a.CPU_CAPACITY cpu_total,(CPU_CAPACITY-cpu_assigned) cpu_free, round(a.memory_limit/1024/1024/1024 )mem_total_gb, round((memory_limit-mem_assigned)/1024/1024/1024) mem_free_gb,round(a.LOG_DISK_CAPACITY/1024/1024/1024) logdisk_total, round((a.LOG_DISK_CAPACITYa.LOG_DISK_ASSIGNED)/1024/1024/1024) logdisk_free ,round(a.DATA_DISK_CAPACITY/1024/1024/1024) data_total ,round((DATA_DISK_CAPACITYa.DATA_DISK_IN_USE)/1024/1024/1024) data_free,b.status,usec_to_time(b.start_service_time) start_service_time, usec_to_time(b.stop_time)stop_time ,b.build_version from GV$OB_SERVERS a join __all_server b on (a.svr_ip=b.svr_ipand a.svr_port=b.svr_port) order by a.zone, a.svr_ip;

修改方式:
修改内存大小:alter system set memory_limit=‘XXG’;
通过调整租户资源规格
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508360#2-title-调整资源规格

看了下 没有发现内存不够的情况,

是怎么看的没有内存不足的情况,日志里的信息是租户的内存已经写满了,即使租户内存比较大,但是写入速度比转储速度快的话还是可能会有这种情况

那这个确实有可能,这个有办法准确看到是不是么。如果是这样情况的话,有参数能优化吗。
我是根据上面那个老师给我的SQL看的free mem值还有很多

[quote=“chris-sun, post:6, topic:35606213”]
写入速度比转储速度快
[/quote]还有一个问题就是为什么这样只对oblogreader进程有影响,存量数据却没有影响

这个对于写入应该都有影响


可以直接查一下 GV$MEM_STORE

但是存量数据是正常写入的,有影响的只是logreader进程断掉了。这个怎么弄啊

这里显示的已经冻结了43次了

并发调整的小一些呢

现在问题就是想把并发弄上去,

现在看起来 Flink cdc 应该没有考虑 OB 的内存模型的逻辑,之前用其他数据同步工具的时候,如果有 OB 的插件的话(比如 datax), 会读取内存的值,然后判断是否要继续写入,如果代码没有类似的逻辑,那么还是有可能内存爆的

现在的链路是怎样的呢,存量的数据已经同步完了吗,还是仍然在同步的,如果只是增量数据的话应该两个租户一样配置就可以

如果写入端要一直追数据,只能调大内存,调大转储次数,调小冻结的阈值,但是具体设置多少值合适,这个并不能准确给出来

存量的没有同步完,这个任务刚起来oblogreader就会挂掉,但是同步存量由于走的是obproxy没有影响,等同步完存量的再去同步增量的时候任务就会结束