Flink CDC里MySQL源Binlog复用这块社区有没有什么优化方案?

Flink CDC里MySQL源Binlog复用这块社区有没有什么优化方案?

展开
收起
小小鹿鹿鹿 2024-02-01 17:50:41 81 分享 版权
阿里云 AI 助理回答

在Flink CDC中,针对MySQL源表的Binlog复用问题,社区和阿里云实时计算Flink版均提供了一些优化方案。以下是具体的优化措施和配置建议:


1. 开启Source复用功能

当同一个作业中有多个MySQL CDC源表时,每个源表都会启动一个独立的Binlog Client,这会导致数据库连接数增加,从而对数据库造成较大压力。为了解决这一问题,可以通过开启Source复用功能来减少Binlog连接数。

  • 配置方法: 在SQL作业中使用以下SET命令开启Source复用功能:

    SET 'table.optimizer.source-merge.enabled' = 'true';
    
  • 注意事项

    • 开启Source复用后,具有相同配置参数的MySQL源表会被合并,从而减少Binlog连接数。
    • 对于已有作业,启用Source复用后需要无状态启动,因为Source复用会改变作业拓扑结构,可能导致原有状态无法启动或数据丢失。
    • 重要提醒
    • 在VVR 8.0.8及8.0.9版本中,开启CDC Source复用时还需额外设置:
      SET 'sql-gateway.exec-plan.enabled' = 'false';
      
    • 不建议将pipeline.operator-chaining设为false,因为断开算子链会增加序列化和反序列化的开销,尤其是在合并多个Source时,性能开销会显著增加。

2. 减少Binlog连接数的具体效果

开启Source复用后,Binlog连接数的变化如下: - 全量读取阶段:Binlog连接数等于Source并发度。 - 增量读取阶段:Binlog连接数等于1。

通过这种方式,可以显著减少MySQL实例的连接压力,尤其是在多表同步场景下。


3. 结合自动调优功能

在全量阶段,为了提高读取效率,通常采用并发的方式读取历史数据;而在增量阶段,由于Binlog数据量较少且需要保证全局有序,通常只需单并发读取。为了平衡资源使用和性能,可以结合自动调优功能来动态调整并发度。

  • 配置方法: 在作业运维页面,将自动调优模式设置为Active模式。

  • 工作原理: 自动调优会监控MySQL CDC Source的每个task的流量。当进入Binlog阶段时,如果只有一个task负责Binlog读取,其他task均空闲,自动调优会自动缩小Source的CU数和并发度。


4. 通过Kafka解耦Binlog读取

如果多个CDC作业导致数据库压力过大,可以考虑将MySQL的Binlog数据同步到Kafka消息队列中,再通过消费Kafka中的数据进行解耦。这种方式可以有效降低MySQL实例的压力。

  • 实现方式: 使用Flink CDC将MySQL的变更数据写入Kafka,然后通过下游作业消费Kafka中的数据完成后续处理。

5. 优化Debezium参数

在增量阶段,MySQL连接器会解析Binlog文件生成变更消息。为了加速Binlog文件的解析,可以通过调整Debezium参数来优化性能。

  • 推荐配置

    debezium.max.queue.size: 162580
    debezium.max.batch.size: 40960
    debezium.poll.interval.ms: 50
    
  • 参数说明

    • debezium.max.queue.size:阻塞队列可以容纳的记录的最大数量,默认值为8192。
    • debezium.max.batch.size:每次迭代处理的事件条数最大值,默认值为2048。
    • debezium.poll.interval.ms:连接器请求新变更事件前的等待时间,默认值为1000毫秒(1秒)。

6. 并行解析和解析过滤

在Flink计算引擎VVR 8.0.7及以上版本中,支持开启并行解析和解析过滤功能,以进一步加速Binlog文件的解析。

  • 配置方法

    'scan.only.deserialize.captured.tables.changelog.enabled' = 'true', -- 仅对指定表的变更事件进行解析
    'scan.parallel-deserialize-changelog.enabled' = 'true' -- 使用多线程对Binlog进行解析
    
  • 适用场景: 该功能适用于需要高效解析大量Binlog数据的场景,能够显著提升增量阶段的读取性能。


总结

通过以上优化方案,可以有效解决Flink CDC中MySQL源表Binlog复用的问题,包括减少数据库连接数、降低带宽消耗以及提升增量阶段的读取效率。具体优化措施包括开启Source复用、结合自动调优功能、通过Kafka解耦Binlog读取、优化Debezium参数以及启用并行解析和解析过滤功能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

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

还有其他疑问?
咨询AI助理