数据量大的话,可能会造成内存溢出,即使没有导致内存溢出,也可能比较耗时,所以稳妥的办法就是先进行优化。
groupBy算子操作输出的数据,要覆盖上一次的数据,如果有新的结果出现,就会先将state中旧的消息撤回,然后将新的结果保存到state中,如果上游的数据源源不断,类似kafka之类source端,建议还是最好设置状态的ttl,防止状态无限大。
flink cdc 使用sql 进行group by 录入的时候,尤其是在分组操作的时候会造成一定程度的资源消耗,所以需要先查询数据量再考虑是否需要优化资源。
group by进行分组的话确实会造成一定的资源消耗,使用之前可以先去查询一下数据量,如果数据量大的话,可以先优化资源,这样比较稳妥。
这问题问的不对,“flink cdc 使用sql 进行group by 录入的时候,长时间会造成内存溢出吗?”如果会溢出你想怎样?,如果不会溢出你想怎样?。你应该这样问,“我想通过flink cdc 使用sql 进行group by 录入,想要达到什么样的目的,但是担心内存溢出,大家有什么好的方法嘛?”,回到问题本身 会溢出的
首先GROUP BY语句用于根据一个或多个列对结果集进行分组,根据你的sql可以看出你是想直接通过插入通过分组查询获得的数据到一张新表中,对于你的担忧长时间group by 录入的时候是否会导致内存溢出,个人觉得不会的,Flink作为实时计算的一个流式计算引擎,可以处理多种实时数据,既然可以处理双十一的数据,那么你的数据量应该不足以导致内存溢出,不过如果数据量太大的话,group by进行结果集分组的时候会比较耗时,体验也不会太好,如果有where条件语句的话建议加上条件语句来限制数据量或者通过分页语句通过多次执行录入的方式来提高响应效率,也类似官方文档说的【上下游参数调优】,通过设置batchsize,批量读写上下游存储数据可以降低上下游存储的压力。
还有就是官方文档提到的【作业参数调优】,其中作业参数调优的主要参数tminiBatch设置仅适用于优化GROUP BY,设置batchsize,批量读写上下游存储数据可以降低上下游存储的压力。
还有一种就是【资源调优】,可以通过优化资源配置来保证你的group by录入语句可以正常执行,详细的操作内容可以参考官方文档:https://help.aliyun.com/document_detail/62491.html
时间长内存溢出Framework Heap Memory满了,但是 Managed memory还有很多空余的,把Managed memory 调小,配置文件中taskmanager.memory.managed.size: 1g
groupBy 之前先查询下数据量, 然后确认下服务的内存大小, 数据太大要么很慢, 要么超时, 建议先优化
这个主要看一下数据量有多大,如果数据量很大的话,超过了内存的可用容量,其实会产生内存的溢出。如果数据量不是很大的话,可用等待处理,一般时间比较耗时,也没有意义。最好在做这个groub by的时候,先加上where条件,先把数据的范围限制在一个可用处理的范围内进行处理。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。