Flink SQL Streaming - 如何在记录更改不确定的情况下有效地连接表

问题描述 投票:0回答:1

卡卡话题(输入:table1,table2,输出:table3)

Flink SQL Streaming 作业

CREATE TEMPORARY VIEW distinct_table1 AS
SELECT *
FROM (SELECT *,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY change_date desc) AS rownum
FROM table1)
WHERE rownum = 1;


CREATE TEMPORARY VIEW distinct_table2 AS
SELECT *
FROM (SELECT *,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY change_date desc) AS rownum
FROM table2)
WHERE rownum = 1;


Insert into table3
Select t1.col1,t1.col2..,t1.coln,t2.col1,t2.col2,t2.coln
From distinct_table t1 inner join distinct_table t2 on t1.id=t2.t1_id 

表 1 和表 2 中相同记录的变化率是不确定的,有时是 10k/天,有时是一个月没有变化。 Kafka 主题配置了压缩

问题#1: 在这种情况下,在某个时刻,状态将增长到超出本地磁盘的程度。那会发生什么情况,任务管理器会失败?

问题#2: 在上述变化率不确定的场景中,任何指示 RocksDB 维护最新记录的配置(不是基于时间的,如果没有发生更新则清除记录),我们必须保留至少 1 条记录进行连接)在 level0 并清除较旧的历史记录,这样就不需要大的磁盘空间和磁盘空间不足的问题?

flink-streaming flink-sql
1个回答
0
投票

#1 当 RocksDB 状态超过本地磁盘的容量时,那么是的,Flink 将失败。作为解决方法,您可以通过增加并行度来重新分片状态。

#2 可用的是 https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/table/config/#table-exec-state-ttl,这不是你所拥有的要求。

为了更好地控制状态保留策略,您可以使用 DataStream API 编写作业,但这将是一项艰巨的任务。

© www.soinside.com 2019 - 2024. All rights reserved.