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

问个问题,flinkcdc在sql模式下同步表是不是只能一对一同步的,如果我有200多张表岂不是要拿

问个问题,flinkcdc在sql模式下同步表是不是只能一对一同步的,如果我有200多张表岂不是要拿200多次binlog? 拿binlog 是拿全量过来再过滤吗?

展开
收起
毛毛虫雨 2022-11-27 10:01:36 379 0
8 条回答
写回答
取消 提交回答
  • 对于linkcdc在SQL模式下同步表的操作,确实是一对一同步的,每个表需要单独进行配置和同步。如果您有200多张表需要同步,那么确实需要配置200多次同步任务。

    关于拿取Binlog的方式,linkcdc并不是将全量的Binlog数据都拿取过来再进行过滤。相反,linkcdc会通过解析MySQL的Binlog日志,只获取变更的数据操作,然后将这些变更的数据操作应用到目标数据库中。

    具体地说,linkcdc会解析MySQL的Binlog日志,并将解析后的数据变更操作(如插入、更新、删除等)转换成对应的SQL语句,然后将这些SQL语句应用到目标数据库中,实现数据的同步。

    这种方式相比全量拿取Binlog数据再过滤的方式,更加高效和节省资源,因为只同步变更的数据操作,避免了不必要的数据传输和处理。

    另外,linkcdc还提供了增量订阅功能,可以通过订阅指定的表或者使用过滤条件来精确控制需要同步的数据,以满足不同的业务需求。

    2023-08-26 22:14:59
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,阿里云 Flink CDC 并不只能一对一同步表,支持一对多同步。对于多个表的同步,可以通过 SQL 中的 JOIN 等方式进行关联查询,这样可以将多个表的数据合并到一个流中,然后进行同步。

    至于拿 binlog 的方式,Flink CDC 会解析 MySQL 的 binlog,增量获取变化数据,不需要拿全量数据过来再过滤。同时,Flink CDC 也支持对获取到的数据进行过滤、转换等操作,可以只选择需要同步的数据列,也可以对数据进行转换、聚合等操作。

    2023-08-21 15:46:01
    赞同 展开评论 打赏
  • 是的,Flink CDC Connector在SQL模式下同步表时,只支持一对一的同步模式。也就是说,每个表只能被一个CDC Connector监听并同步数据。
    如果您有200多张表需要同步数据,那么您需要创建200多个CDC Connector实例,并分别将它们配置到对应的表上。每个CDC Connector会通过监听对应表的binlog来捕捉数据变化,并将变化数据推送到目标数据源中。
    拿binlog是拿全量过来再过滤吗?是的,Flink CDC Connector在拿到binlog时,会将整个binlog事件序列(包括多个操作类型的binlog事件)发送到Flink中进行处理。在Flink中,CDC Connector会解析binlog事件序列,并根据表的增删改查操作类型来过滤出需要同步的数据。因此,Flink CDC Connector需要拿到整个binlog事件序列,并通过过滤器来提取需要同步的数据。
    image.png
    image.png
    image.png

    2023-08-18 09:32:57
    赞同 展开评论 打赏
  • 在SQL模式下,Flink CDC在同步表时,默认情况下是一对一同步的,每张表都会有一个相应的Flink CDC任务进行同步。因此,如果有200多张表,那么通常需要配置200多个Flink CDC任务。

    至于binlog的获取和处理方式,通常有两种策略可供选择:

    1. 全量同步:在初始阶段,Flink CDC会从binlog中获取全量数据,并将其写入目标系统。这意味着它会拿取完整的数据集,并将其同步到目标表中。

    2. 增量同步:一旦完成了全量同步,Flink CDC将开始监听binlog文件,只拿取更新(增量)数据并将其同步到目标表中。这样可以减少网络传输和处理时间。

    需要注意的是,对于大量表的情况,每个表都单独配置一个CDC任务可能会导致任务管理和资源利用上的额外开销。在实际情况下,可能需要根据实际需求和系统资源情况来选择最适合的同步策略和任务配置方式。

    2023-08-17 14:37:21
    赞同 展开评论 打赏
  • 在 SQL 模式下,Flink CDC 可以进行一对一表同步,也可以进行多对一或一对多的表同步。这意味着您可以选择将一个或多个源表的变更事件同步到目标表中,或者将一个源表的变更事件同步到多个目标表中。
    image.png

    如果您有200多张表需要同步,并且选择了一对一的表同步方式,那么确实需要为每个表配置相应的 Flink CDC 任务,并从它们各自的 binlog 中获取变更事件。这样可能会导致较多的任务和连接开销,因此需要权衡资源和性能。

    关于拿取 binlog 数据,Flink CDC 提供了两种模式:全量模式和增量模式。

    • 全量模式:在全量模式下,Flink CDC 在启动时会先读取 binlog 的全量数据,并将其作为初始状态。然后,它会持续监听 binlog 的增量变更,并将这些变更事件应用到目标表中。这种模式适合用于初始化同步,但对于大型数据库可能会产生较大的初始数据量。

    • 增量模式:在增量模式下,Flink CDC 仅监听 binlog 的增量变更,并将这些变更事件应用到目标表中。这种模式可以减少初始数据量,但要求源数据库的 binlog 必须开启并保留足够的时间范围。

    根据您的需求,您可以选择全量模式或增量模式来进行同步。如果是初始化同步或需要保证数据的完整性,则可以选择全量模式。如果只关心最新的变更数据,并且源数据库的 binlog 可用,则可以选择增量模式进行同步。
    image.png
    image.png

    无论选择哪种模式,Flink CDC 都提供了相应的配置选项和灵活性,以适应不同的同步需求。建议参阅 Flink CDC 的官方文档,深入了解不同模式下的配置和使用方式。

    2023-08-16 22:29:52
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在 Flink CDC 的 SQL 模式下,每个 Flink CDC 连接器实例通常只能配置同步一个 MySQL 表。这意味着如果你有 200 多张表需要同步,你需要配置相应数量的 Flink CDC 连接器实例来处理每个表的同步。

    每个 Flink CDC 连接器实例都会监听 MySQL 的 binlog,并将 binlog 中的变更事件转换成 Flink 数据流。因此,你需要为每个表创建一个独立的连接器实例,并配置相应的表名和字段等信息。

    对于 binlog 的处理方式,Flink CDC 会从 binlog 中读取全量的变更事件,并将其转换成 Flink 数据流。这意味着初始加载可能需要一些时间,因为 Flink CDC 需要读取整个 binlog 来获取完整的数据,并将其发送到 Flink 作业中进行处理。之后,Flink CDC 将持续监听 binlog,只处理新的变更事件。

    Flink CDC 支持对变更事件进行过滤,以便只选择感兴趣的表或特定的字段进行同步。你可以在 Flink CDC 的配置中指定表名、字段列表或其他过滤条件,来控制需要同步的数据。

    需要注意的是,配置大量的 Flink CDC 连接器实例来同步大量的表可能会对系统资源产生一定的压力。因此,在设计和部署时,需要评估系统的性能和资源需求,并做出相应的调整。

    2023-08-14 19:17:59
    赞同 展开评论 打赏
  • 在 Flink CDC 的 SQL 模式下,确实是一对一同步的,每张表都需要配置一个对应的 CDC Connector 进行数据同步。这意味着如果你有200多张表,就需要配置200多个 CDC Connector。

    关于 binlog 的获取和处理方式,Flink CDC 会使用数据库的逻辑复制功能来捕获增量变更,而不是全量读取 binlog。逻辑复制可以通过订阅数据库的 binlog 或 redo log,并将变更事件转化为流式数据。

    当启动一个 CDC Connector 时,它会从数据库中当前的位置开始读取 binlog,并将变更事件作为 Flink 数据流进行处理。CDC Connector 可以根据不同的配置参数来决定是否读取历史数据(全量数据),或者只读取增量数据。
    image.png

    • 如果设置了 debezium.snapshot.mode 参数为 initial,则 CDC Connector 会从数据库中读取全量数据。
    • 如果设置了 debezium.snapshot.mode 参数为 neverinitial_schema_only,则 CDC Connector 不会读取全量数据,而只会从当前位置开始读取增量数据。

    对于已经存在的数据,在启动 CDC Connector 时,可以通过设置 debezium.snapshot.mode 参数为 initial 来读取全量数据并进行初始同步。之后,CDC Connector 将持续地读取增量数据进行实时同步。

    image.png

    2023-08-14 15:54:46
    赞同 展开评论 打赏
  • 全栈JAVA领域创作者

    是的,Flink CDC在SQL模式下同步表时,通常是一对一同步的。也就是说,每个源数据库表只能对应一个目标数据库表,不能同时对应多个目标数据库表。
    如果您有200多张表需要同步,那么您需要使用多个Flink CDC实例,每个实例对应一个源数据库表和一个目标数据库表。这样,您就需要拿200多次binlog,将每个源数据库表的binlog信息读取到Flink中,然后根据配置文件中的表结构,将读取到的数据写入到目标数据库中。
    需要注意的是,如果您的源数据库中的表结构存在变化,例如添加/删除/修改了列、修改了索引等,那么您需要在每个Flink CDC实例的配置文件中,根据实际情况进行调整和优化。同时,您需要在配置文件中,指定目标数据库的表结构,以便Flink CDC能够将生成的表结构写入到目标数据库中。

    2023-08-14 13:04:51
    赞同 展开评论 打赏
滑动查看更多

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

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载