大佬们,我在用flink cdc 采集mysql表时,表里面有一个字段是 signed_pdf longtext COLLATE utf8mb4_bin COMMENT '签章合同' 占用的空间很大, 代码里没有采集这个字段,但是采集任务没有输出,运行一段时间后报错(内存不足),有什么办法解决这个问题
物理和堆内存总量很难计算,因为它在很大程度上取决于您的用户代码、作业的拓扑结构以及您使用的状态后端。 根据经验,如果遇到 OOM 并且仍在使用FileSystemStateBackend或MemoryStateBackend,那么您应该切换到RocksDBStateBackend,因为如果状态变得太大,溢出到磁盘。
如果仍然遇到所描述的 OOM 异常,那么您应该检查您的用户代码是否保留对状态对象的引用或以其他方式生成无法被垃圾收集的大对象。如果是这种情况,那么你应该尝试重构你的代码以依赖 Flink 的状态抽象,因为使用 RocksDB 它可以脱离核心。
RocksDB 本身需要原生内存,这增加了 Flink 的内存占用。这取决于块缓存大小、索引、布隆过滤器和内存表。您可以在此处找到有关这些内容以及如何配置它们的更多信息。
最后但并非最不重要的一点是,您不应taskmanager.memory.preallocate在运行流式作业时激活,因为流式作业当前不使用托管内存。因此,通过激活预分配,将为 Flink 的托管内存分配内存,这会减少可用的堆空间。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。