Flink CDC使用oraclecdc同步到kafka 在快照阶段就发生了oom 有什么办法解决嘛 taskmanager内存给的是18g?
这个是sql的参数
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC通过oraclecdc
同步数据到Kafka时,如果在快照阶段(Snapshot Phase)发生了OOM(Out of Memory),即使TaskManager的内存已经设置为18GB,仍然可能由于数据量过大或配置不当导致内存不足。以下是针对该问题的详细分析和解决方案:
快照阶段发生OOM的原因通常与以下因素相关: - 分片数据量过大:Oracle CDC在快照阶段会将表按照主键分成多个分片(Chunk),并逐个读取每个分片的数据。如果单个分片的数据量过大,可能会超出TaskManager的可用内存。 - 内存分配不足:虽然TaskManager的总内存为18GB,但堆内存(Heap Memory)可能未合理分配,导致实际可用内存不足以处理大分片。 - 无主键表或分片字段选择不当:对于无主键表或分片字段选择不合理的情况,可能导致某些分片包含过多数据,进一步加剧内存压力。
通过调整分片相关的参数,可以减少单个分片的数据量,从而降低内存压力: - scan.incremental.snapshot.chunk.size
减少该参数值以降低每个分片的数据量。例如,将其从默认值(如10000)调整为更小的值(如5000或更低)。
'scan.incremental.snapshot.chunk.size' = '5000'
这样可以确保每个分片的数据量更小,避免单个分片占用过多内存。
scan.incremental.snapshot.chunk.key-column
'scan.incremental.snapshot.chunk.key-column' = 'your_column_name'
如果分片参数调整后仍无法解决问题,可以尝试增加TaskManager的堆内存(Heap Memory): - 在Flink配置文件中调整taskmanager.memory.process.size
或taskmanager.memory.task.heap.size
,确保堆内存足够大。例如:
taskmanager.memory.process.size: 24g
或者直接在SQL作业中通过运行参数配置增加内存。
根据知识库中的信息,在VVR 8.0.8及之前版本中,最后一个分片可能会读取大量数据,导致OOM。建议升级到VVR 8.0.9及以上版本以避免该问题。
如果作业中包含多张Oracle源表,开启Source复用功能可以减少Binlog连接数,从而降低内存压力:
SET 'table.optimizer.source-merge.enabled' = 'true';
注意:启用Source复用后,需要以无状态方式启动作业,否则可能导致拓扑不匹配或数据丢失。
对于数据量较大的表,建议启用分批读取模式,避免一次性将整个表加载到内存中。可以通过以下参数控制: - debezium.min.row.count.to.stream.results
设置该参数值为较小的值(如1000),以强制使用分批读取模式。例如:
'debezium.min.row.count.to.stream.results' = '1000'
通过调整连接池大小,可以减少数据库连接数,从而降低内存开销: - connection.pool.size
将该参数值设置为较小的值(如10),以减少连接池占用的内存。例如:
'connection.pool.size' = '10'
如果目标端是Kafka,检查Kafka Producer的批量写入配置是否合理。例如,避免单次写入过大的日志数据(如超过8MB),可以通过调整batchGetSize
参数解决:
'sink.batch-size' = '50'
scan.incremental.snapshot.chunk.size
和scan.incremental.snapshot.chunk.key-column
,以减少单个分片的数据量。特别注意:在调整参数后,务必重新测试作业性能,确保问题已解决且不会引入新的问题。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。