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

Flink CDC中一张流表去look upjoin其他的表的其他表是不是就不能用cdc连接建表了?

问题1:Flink CDC中一张流表去look upjoin其他的表的其他表是不是就不能用cdc连接建表了?而要用jdbc建表?
问题2:那多流join情况下,超大数据量远超内存怎么整?如果用lookup就不是多流了呀。

展开
收起
小易01 2023-07-26 08:19:01 79 0
3 条回答
写回答
取消 提交回答
  • 在 Flink CDC 中,如果你有一张流表需要进行 Lookup Join 操作,并且这个表无法使用 CDC 连接器来建立增量数据源,你可以考虑以下几种解决方案:

    1. 手动缓存:将那些无法使用 CDC 连接器的表数据手动缓存在 Flink 任务中。你可以使用 Flink 的 MapStateBroadcastState 来实现这个缓存功能,然后在流表上执行 Lookup Join 操作。

    2. 批处理离线加载:如果那些无法使用 CDC 连接器的表数据是相对稳定的,你可以采用批处理的方式将这些表的数据导入到 Flink 支持的外部存储或内存数据库中,例如 MySQL、HBase 等。然后在 Flink 中直接从外部存储或内存数据库中加载这些数据,并在流表上执行 Lookup Join 操作。

    3. 使用异步 I/O:如果那些无法使用 CDC 连接器的表数据变化频繁,但仍然需要进行 Lookup Join 操作,你可以尝试使用 Flink 的异步 I/O 功能。通过异步 I/O,你可以将请求发送给外部系统(如数据库),并在收到响应后继续处理流表。这样可以避免直接在流上进行同步连接操作。

    2023-07-31 22:44:02
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在Flink CDC中,一张流表如果需要进行LookUpJoin操作,需要先将需要Join的维表数据加载到内存中,然后通过TableFunction等方式将维表数据作为参数传递给流表进行Join操作。这种方式并不依赖于CDC连接,而是通过读取维表数据来实现Join操作。
    因此,即使一张流表需要进行LookUpJoin操作,也可以使用CDC连接来建表。例如,如果您需要从MySQL中捕获一张流表的数据,并将其与另外两张MySQL表进行Join操作,可以通过以下方式建立Flink SQL CDC表:
    sql
    Copy
    CREATE TABLE stream_table (
    id INT,
    name STRING,
    age INT,
    address STRING
    ) WITH (
    'connector' = 'mysql-cdc',
    'hostname' = 'localhost',
    'port' = '3306',
    'username' = 'root',
    'password' = 'root',
    'database-name' = 'test',
    'table-name' = 'stream_table'
    );

    CREATE TABLE dimension_table1 (
    id INT,
    name STRING
    ) WITH (
    'connector' = 'mysql',
    'hostname' = 'localhost',
    'port' = '3306',
    'username' = 'root',
    'password' = 'root',
    'database-name' = 'test',
    'table-name' = 'dimension_table1'
    );

    CREATE TABLE dimension_table2 (
    id INT,
    address STRING
    ) WITH (
    'connector' = 'mysql',
    'hostname' = 'localhost',
    'port' = '3306',
    'username' = 'root',
    'password' = 'root',
    'database-name' = 'test',
    'table-name' = 'dimension_table2'
    );

    SELECT s.id, s.name, s.age, d1.name, d2.address
    FROM stream_table s
    LEFT JOIN LATERAL (
    SELECT
    FROM TABLE(dimension_table1(id)) d
    ) d1 ON true
    LEFT JOIN LATERAL (
    SELECT

    FROM TABLE(dimension_table

    2023-07-29 15:44:09
    赞同 展开评论 打赏
  • 意中人就是我呀!

    "回答1:具体怎么用,具体对待。如果想多流join,就是每个流的数据更新都会产生计算,如果使用维表jjoin,维表数据在业务数据库更新是不会触发计算的。
    回答2:试试这个。abfd4097c1a990090d87e438e32a7f5c.png
    此回答整理至钉群“Flink CDC 社区”。"

    2023-07-26 12:10:16
    赞同 展开评论 打赏

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

相关产品

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

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