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

Flink CDC中四张表做leftjoin关联然后sink。flinkCDC是怎么做join?

Flink CDC中四张表做leftjoin关联,然后sink到一张表。flinkCDC是怎么做join的?是把所有数据发送到flink内存里,在内存里做的关联?造了一千万数据,MySQL显示有两张表的数据已经全部发送了。1587585ee0e298caed8b5f1cdb463954.png

展开
收起
十一0204 2023-07-26 07:43:13 141 0
2 条回答
写回答
取消 提交回答
  • 在 Flink CDC 中,执行 join 操作时并不是将所有数据发送到 Flink 内存中进行关联。实际上,Flink CDC 使用了增量变化数据捕获(CDC)的机制,只获取源数据表中发生变化的数据,并将其作为事件流传递给 Flink 任务进行处理。

    具体来说,在你的场景中,四张表做 left join 关联后,Flink CDC 会监听这四张表的变更情况,一旦有数据的插入、更新或删除操作,相应的变化会以事件流的形式发送给 Flink 任务。

    当 Flink 接收到这些事件流时,它会使用状态管理机制来维护和更新数据的状态。然后,Flink 在处理新的事件时,根据指定的 join 条件将相关数据进行关联,并输出结果到指定的 sink(如 MySQL 表)中。

    总结起来,Flink CDC 并不会将所有数据加载到内存进行关联操作,而是通过增量变化数据捕获的方式,仅处理发生变化的数据,并使用状态管理机制来维护数据的状态和关联结果。

    至于你提到的在 MySQL 中显示两张表的数据已经全部发送的情况,请确保你的 Flink CDC 配置正确,并检查是否存在配置错误、数据倾斜、网络延迟等问题导致数据无法正常处理和输出。同时,建议检查 Flink CDC 的日志以获取更多详细的错误信息。

    2023-07-31 23:28:48
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在 Flink CDC 中进行 Join 操作时,可以使用 Flink SQL 中的 Join 操作。对于您的情况,假设要对四张表 A、B、C、D 进行 Left Join,并将 Join 后的结果 Sink 到另一个数据源中,可以按照以下步骤进行操作:
    定义四张表的 Schema:首先需要定义四张表的 Schema,包括字段名、字段类型等信息。可以通过类似如下的 SQL 语句定义:
    scheme
    Copy
    CREATE TABLE A (
    id INT,
    name STRING,
    ...
    ) WITH (
    'connector.type' = 'jdbc',
    'connector.url' = 'jdbc:mysql://localhost:3306/db',
    'connector.table' = 'A',
    ...
    );

    CREATE TABLE B (
    id INT,
    name STRING,
    ...
    ) WITH (
    'connector.type' = 'jdbc',
    'connector.url' = 'jdbc:mysql://localhost:3306/db',
    'connector.table' = 'B',
    ...
    );

    CREATE TABLE C (
    id INT,
    name STRING,
    ...
    ) WITH (
    'connector.type' = 'jdbc',
    'connector.url' = 'jdbc:mysql://localhost:3306/db',
    'connector.table' = 'C',
    ...
    );

    CREATE TABLE D (
    id INT,
    name STRING,
    ...
    ) WITH (
    'connector.type' = 'jdbc',
    'connector.url' = 'jdbc:mysql://localhost:3306/db',
    'connector.table' = 'D',
    ...
    );
    使用 Join 进行关联:接下来可以使用 Flink SQL 中的 Join 操作对四张表进行关联。假设要对 A、B、C、D 四张表的 id 字段进行关联,可以使用类似如下的 SQL 语句进行 Join:
    reasonml
    Copy
    SELECT A.*, B.name as b_name, C.name as c_name, D.name as d_name
    FROM A
    LEFT JOIN B ON A.id = B.id
    LEFT JOIN C ON A.id = C.id
    LEFT JOIN D ON A.id = D.id
    在这个例子中,使用了 Left Join 将 A 表与 B、C、D 三张表进行关联,

    2023-07-29 16:54:14
    赞同 展开评论 打赏

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

相关产品

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

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载