开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC中我昨天提了一个issue,这个会导致flink的内存爆?

Flink CDC中我昨天提了一个issue,从MySQL同步数据到doris,如果MySQL的表的主键有多个列,且第一个列是varchar,且第一个列重复的值非常多,分片成chunk的时候每个chunk的数据就会有很多很多行,有几百万行,这个会导致flink的内存爆?https://github.com/ververica/flink-cdc-connectors/issues/2676 [Bug] flink-connector-mysql-cdc-2.4.2 when a multi-column primary key index starts with a varchar column, a snapshot chunk can potentially return a large number of rows and cause jvm to OOM. #2676

展开
收起
真的很搞笑 2023-11-16 08:07:45 177 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这个问题描述了在多列主键中存在字符串类型(如 varchar)时,可能导致 Flink CDC 中的内存溢出。
    对于这种情况,目前的解决方法是通过调整配置参数 scan.incremental.snapshot.chunk.size.bytes 来限制单次 chunk 的大小。例如,如果默认值为 10M,则每个 chunk 将包含不超过 10MB 的数据。您可以根据实际情况调整此参数,以便将每个 chunk 的大小限制在合理的范围内。
    另外,可以考虑设置其他列为主键的一部分,以避免将整个列设为主键导致主键长度过长。

    2023-11-16 13:17:48
    赞同 展开评论 打赏
  • 这个问题是由于Flink CDC在获取MySQL表的全量数据时,使用了多列主键索引,且第一列是VARCHAR类型,导致每个分片(chunk)的数据量过大,超过了Flink任务的内存限制,从而导致OOM。

    为了解决这个问题,你可以尝试以下方法:

    1. 调整Flink任务的内存配置,例如增加JVM的堆内存大小,或者调整Flink任务的并行度,以减少每个分片的数据量。

    2. 在MySQL数据库中,尝试将多列主键索引的第一列改为非VARCHAR类型,以减少每个分片的数据量。

    3. 在Flink CDC的任务中,尝试使用更小的分片大小,以减少每个分片的数据量。

    4. 如果可能,可以尝试在MySQL数据库中添加额外的索引,以提高查询性能,从而减少每个分片的数据量。

    2023-11-16 10:08:24
    赞同 展开评论 打赏
  • 可以指定一个分布较为均匀的列作为chunk列,有参数可以配置,此回答整理自钉群“Flink CDC 社区”

    2023-11-16 08:43:20
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载