有没有遇到过这种情况?flinkcdc读mysql数据的时候,checkpoint 一直卡着不报错。

有没有遇到过这种情况呀,flinkcdc读mysql数据的时候,checkpoint 一直卡着也不报错,有什么排查的思路吗?17f91a4c3a020de7fb3abf183d964d49.png138991df3aa9905b00e43a2ee9c8d8ba.png

展开
收起
小小鹿鹿鹿 2024-04-08 20:27:22 68 发布于山西 分享
分享
版权
举报
阿里云 AI 助理回答

在使用 Flink CDC 读取 MySQL 数据时,如果遇到 Checkpoint 一直卡着且不报错的情况,可能是由于多种原因导致的。以下是详细的排查思路和解决方案:


1. 检查反压问题

反压是导致 Checkpoint 卡住的常见原因之一。当作业中某些算子处理速度较慢时,会导致数据积压,从而影响 Checkpoint 的完成。

  • 排查方法

    • 在 Flink UI 中查看作业的反压情况。
    • 如果发现某些算子存在高反压(High Backpressure),需要定位这些算子并分析其性能瓶颈。
  • 解决方案

    • 调整资源分配,例如增加 TaskManager 的 CPU 或内存。
    • 优化慢算子的逻辑,例如减少复杂计算或调整并行度。
    • 如果使用了 Python UDF,可以尝试调小缓存参数以加快 Checkpoint:
    python.fn-execution.bundle.size: 50000  # 默认值为100000
    python.fn-execution.bundle.time: 500    # 默认值为1000
    


2. 检查 Binlog 数据量过大

Flink CDC 会读取 MySQL 的 Binlog 数据,而 Binlog 是实例级别的,可能包含大量无关表的变更记录。这会导致带宽占用过高,进而影响 Checkpoint 的完成。

  • 排查方法

    • 确认 MySQL 实例中是否存在大量无关表的变更。
    • 检查网络带宽是否被占满。
  • 解决方案

    • 使用 Source 复用机制,避免多个 CDC 作业重复读取相同的 Binlog 数据。
    • 如果可能,将 MySQL 表同步到 Kafka 中,通过消费 Kafka 数据解耦数据库压力。

3. 检查全量到增量切换的延迟

在 MySQL CDC 全量读取完成后,进入增量阶段前需要等待一个 Checkpoint 完成,以确保全量数据已写入下游。如果 Checkpoint 间隔时间设置过长(如 20 分钟),会导致增量阶段延迟。

  • 排查方法

    • 查看 Checkpoint 配置的间隔时间。
    • 确认当前作业是否处于全量到增量的切换阶段。
  • 解决方案

    • 缩短 Checkpoint 间隔时间,例如设置为 1 分钟:
    execution.checkpointing.interval: 60000  # 单位为毫秒
    

    - 确保全量读取阶段的并发度合理,避免单个分片数据量过大导致 OOM。


4. 检查 MiniBatch 配置问题

如果作业中同时包含 WindowAggregate 和 GroupAggregate,并且未正确配置 MiniBatch 参数,可能导致 LocalGroupAggregate 节点长时间卡住无输出。

  • 排查方法

    • 检查 table.exec.mini-batch.size 参数是否未配置或设置为负值。
    • 确认作业中是否存在 WindowAggregate 和 GroupAggregate 的组合。
  • 解决方案

    • 设置 table.exec.mini-batch.size 为正值,例如:
    table.exec.mini-batch.size: 1000  # 单位为条数
    

    - 缩短 Checkpoint 间隔时间,确保 LocalGroupAggregate 节点能够及时触发输出。


5. 检查上游数据源的空闲分区

如果上游数据源(如 Kafka)存在空闲分区,且未设置合理的超时时间,可能导致 Watermark 无法推进,进而影响 Checkpoint。

  • 排查方法

    • 确认上游数据源是否存在空闲分区。
    • 检查是否有分区长时间无数据流入。
  • 解决方案

    • 设置空闲分区的超时时间,例如:
    table.exec.source.idle-timeout: 1s
    


6. 检查 Server ID 配置冲突

每个 MySQL CDC 数据源需要配置唯一的 Server ID。如果多个 CDC 数据源共享相同的 Server ID,可能导致 Binlog 位点错乱,进而影响 Checkpoint。

  • 排查方法

    • 检查作业中所有 MySQL CDC 数据源的 Server ID 配置。
    • 确认是否存在冲突或重复。
  • 解决方案

    • 为每个 MySQL CDC 数据源配置不同的 Server ID,例如:
    SELECT * FROM source_table /*+ OPTIONS('server-id'='123456') */;
    

    如果开启增量快照框架且并行度大于 1,需指定 Server ID 范围:

    SELECT * FROM source_table /*+ OPTIONS('server-id'='123456-123458') */;
    


7. 检查日志和异常信息

如果以上方法均未解决问题,可以通过日志进一步排查。

  • 排查方法

    • 在 Flink UI 的 Checkpoints 界面查看历史 Checkpoint 信息。
    • 点击异常 Checkpoint 的详细信息,跳转至对应的 TaskManager 日志。
    • 搜索关键字 errorexception,定位具体问题。
  • 解决方案

    • 根据日志提示进行针对性修复。例如,如果是磁盘空间不足导致的写入失败,需清理磁盘或扩容存储。

总结

通过以上步骤,您可以逐步排查 Flink CDC 读取 MySQL 数据时 Checkpoint 卡住的问题。重点检查反压、Binlog 数据量、全量到增量切换、MiniBatch 配置、空闲分区、Server ID 配置以及日志信息。根据具体问题采取相应的优化措施,确保作业稳定运行。

如果问题仍未解决,建议联系阿里云技术支持团队获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

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

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

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

你好,我是AI助理

可以解答问题、推荐解决方案等