开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC里你们有调试过全量快照读取+增量binlog的时候吗?

com.ververica.cdc.connectors.mysql.debezium.task.MySqlBinlogSplitReadTask#handleEvent。Flink CDC里你们有调试过全量快照读取+增量binlog的时候吗?在获取低水位到高水位的binlog时 获取到一两条binlog就finish了高水位的offset里取自SHOW MASTER STATUS命令 serverId也获取不到啊 ?531d9edaf0aa74a2549c26d0dcfc0535.png

展开
收起
小小鹿鹿鹿 2024-02-26 16:49:11 47 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在Flink CDC中,全量快照读取和增量binlog读取是一个连贯的过程。首先通过全量快照来同步初始数据状态,然后通过监听binlog来实现数据的实时同步。在全量阶段完成后,CDC Connector会记录下当前的binlog位置(即高水位的offset),并从这个位置开始读取增量数据

    如果在获取低水位到高水位的binlog时只获取到一两条binlog就结束了,可能是由于以下原因:

    • 全量读取耗时过长:如果全量读取的时间超过了MySQL binlog的保留周期,那么在全量读取结束时,那些早期的binlog事件可能已经被清理掉了。这会导致在尝试读取增量数据时,无法找到足够的binlog事件来继续同步。
    • 锁竞争导致的等待:在全量读取期间,为了确保数据的一致性,CDC Connector需要对源表加表级锁。如果这个锁被其他事务长时间占用,CDC Connector可能会等待锁释放,这会增加全量读取的总时间。
    • serverId获取失败:在某些情况下,可能会出现从SHOW MASTER STATUS命令中无法获取到serverId的情况。这可能是由于MySQL配置或网络问题导致的。

    为了解决这些问题,可以考虑以下几个方向:

    1. 调整binlog的保留策略:增加binlog的保留时间,以避免因全量读取耗时过长而导致的binlog丢失问题。
    2. 优化全量读取过程:通过增加并行度、优化查询条件等方式来减少全量读取所需的时间。
    3. 检查锁竞争情况:监控数据库的锁情况,尽量减少全量读取期间的锁竞争。
    4. 检查MySQL的配置:确保MySQL服务器的配置正确,并且网络连接稳定,以便CDC Connector可以顺利获取到serverId和其他必要的信息。
    2024-02-27 13:45:15
    赞同 展开评论 打赏
  • '感觉这里是个bug,不知道和mysql版本有没有关系。show master status的结果里没有server_id。可以在currentBinlogOffset的方法里把serverid查出来放进去。或者参考
    https://github.com/ververica/flink-cdc-connectors/pull/2808/commits/a67d150c4556b73cb7752a949db0681ad3340dfa
    。此回答来自钉群Flink CDC 社区。

    2024-02-26 17:57:05
    赞同 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Apache Flink 案例集(2022版) 立即下载
    Flink峰会 - 陈政羽 立即下载
    PolarDB-X 2.0 全局 Binlog 与备份恢复能 立即下载