求助,Flink CDC 之前yarn session 上了二十多个SQL任务。一次新提交一个任务,估计是AM资源紧张,一直在提交尝试中。后来就出事故了,网络带宽占满,被数据中心人员找了过来。一看YARN SESSION中的所有的JOB都在initing 中,把任务停掉就降下来了。这种情况帮忙分析一下,是怎么产生的,要如何才能避免呢?动不动就占满带宽影响太大了。所有的CDC表都是latest 启动模式,不涉及到snapshot,按理说不应该有那么大网络IO?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的情况,Flink CDC任务在YARN Session模式下运行时,由于新任务提交导致AM(Application Master)资源紧张,所有任务进入initing
状态,最终引发网络带宽占满的问题。以下是可能的原因分析:
CDC表的Binlog读取机制
即使使用latest
启动模式,Flink CDC仍然需要从MySQL的Binlog中读取数据。而MySQL的Binlog是实例级别的,包含整个数据库的所有变更记录,即使只涉及一张表的变更。这种机制会导致Flink CDC读取大量无关的Binlog数据,从而占用较高的网络带宽。
多个CDC任务的并发压力
当多个CDC任务同时运行时,每个任务都会独立连接到MySQL数据库并读取Binlog。如果这些任务没有复用Binlog连接(例如通过相同的Server ID配置),会导致MySQL服务器的压力倍增,同时也会增加网络带宽的消耗。
YARN资源不足导致的任务堆积
在YARN Session模式下,所有任务共享同一个Application Master(AM)。当AM资源紧张时,新任务无法正常初始化,导致任务堆积。这种情况下,所有任务可能会尝试重新连接MySQL数据库,进一步加剧网络和数据库的压力。
网络带宽的突发性占用
如果多个CDC任务同时进入initing
状态并尝试初始化,它们可能会同时发起对MySQL Binlog的读取请求,导致网络带宽瞬间被占满。
为了避免类似问题再次发生,可以从以下几个方面进行优化和调整:
启用CDC Source复用
通过为多个CDC任务配置相同的server-id
,可以实现Binlog连接的复用,减少对MySQL服务器的压力以及网络带宽的占用。
'server-id' = '100-200'
这里的server-id
范围应根据实际任务数量进行合理分配。
限制Binlog读取范围
确保每个CDC任务只读取必要的表数据,避免读取整个实例的Binlog。可以通过table-name
正则表达式精确指定需要同步的表。
增加AM资源
在YARN Session模式下,AM的资源分配直接影响任务的初始化速度。可以通过以下参数增加AM的内存和CPU资源:
yarn.applicationmaster.memory=4096
yarn.applicationmaster.vcores=2
限制并发任务数
避免一次性提交过多任务,建议分批提交任务,并监控AM的资源使用情况。可以通过YARN的队列管理功能限制单个Session中的任务数量。
引入Kafka作为中间层
将MySQL的Binlog数据先同步到Kafka消息队列中,再由Flink消费Kafka中的数据。这种方式可以解耦MySQL和Flink之间的直接连接,减少网络带宽的瞬时占用。
调整Flink的网络缓冲区大小
通过调整Flink的网络缓冲区参数,可以减少网络传输的峰值压力:
taskmanager.network.memory.fraction=0.1
taskmanager.network.memory.min=64mb
taskmanager.network.memory.max=1gb
监控网络带宽和数据库压力
使用阿里云的监控工具(如ARMS或CloudMonitor)实时监控Flink作业的网络带宽使用情况以及MySQL数据库的压力指标(如Binlog读取延迟、连接数等)。
设置资源使用告警
在YARN和Flink中配置资源使用告警,当AM资源不足或网络带宽接近上限时,及时通知运维人员进行干预。
savepoint
机制,确保任务可以在失败后快速恢复,而不是重新初始化。此次问题的根本原因在于多个CDC任务并发读取MySQL Binlog导致的网络带宽占用过高,以及YARN资源不足引发的任务堆积。为了避免类似问题再次发生,建议采取以下措施: 1. 启用CDC Source复用,减少Binlog连接数。 2. 增加YARN AM资源,避免任务堆积。 3. 引入Kafka作为中间层,解耦MySQL和Flink之间的直接连接。 4. 优化网络带宽使用,调整Flink的网络缓冲区参数。 5. 加强监控与告警,及时发现并处理资源瓶颈。
通过以上优化措施,可以有效降低网络带宽的占用,提升系统的稳定性和可靠性。