问题1:Flink CDC中一张流表去look upjoin其他的表的其他表是不是就不能用cdc连接建表了?而要用jdbc建表?
问题2:那多流join情况下,超大数据量远超内存怎么整?如果用lookup就不是多流了呀。
在 Flink CDC 中,如果你有一张流表需要进行 Lookup Join 操作,并且这个表无法使用 CDC 连接器来建立增量数据源,你可以考虑以下几种解决方案:
手动缓存:将那些无法使用 CDC 连接器的表数据手动缓存在 Flink 任务中。你可以使用 Flink 的 MapState
或 BroadcastState
来实现这个缓存功能,然后在流表上执行 Lookup Join 操作。
批处理离线加载:如果那些无法使用 CDC 连接器的表数据是相对稳定的,你可以采用批处理的方式将这些表的数据导入到 Flink 支持的外部存储或内存数据库中,例如 MySQL、HBase 等。然后在 Flink 中直接从外部存储或内存数据库中加载这些数据,并在流表上执行 Lookup Join 操作。
使用异步 I/O:如果那些无法使用 CDC 连接器的表数据变化频繁,但仍然需要进行 Lookup Join 操作,你可以尝试使用 Flink 的异步 I/O 功能。通过异步 I/O,你可以将请求发送给外部系统(如数据库),并在收到响应后继续处理流表。这样可以避免直接在流上进行同步连接操作。
在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
"回答1:具体怎么用,具体对待。如果想多流join,就是每个流的数据更新都会产生计算,如果使用维表jjoin,维表数据在业务数据库更新是不会触发计算的。
回答2:试试这个。
此回答整理至钉群“Flink CDC 社区”。"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。