以往常见实现 通过Lookup join来实现维表join
弊端:
虽然缓存可以减轻维表负担,但是如果事实表数据量很大,每秒千万条,维度表只有百万条,也就是说 你会看到大量的无法关联的数据仍然需要查询维度表. cache缓存千万数据量内存压力又比较大, 那么怎么减轻维表数据库压力,还能做到低延迟.
新方法 借助 新特性: Configure Operator-level State TTL 配合 regular join + flinkCDC
以往双流join ; a join b,默认两侧状态都一直保留,虽然可以通过 table.exec.state.ttl 配置全局状态过期时间,但是不适合维度表join的场景.
新思路:
a join b(维度表) 既然新版本支持了算子级别的state,那么我们配置a的stateTTL是0,立马失效;
b的state配置为永久,即维度表数据永久不失效. 这里的b表需借助flinkCDC通过维表全量数据和后续增量过来,如果你们以前是hbase,这种方法不适合. 这样做到了状态存储了全量维表数据(前提维度表数据量不能太大)
总结: 维表支持cdc 且数据量不会太大(state存的下 且性能够用) 则可以用方法2
问题:
[FLINK-34001] doc of "Configure Operator-level State TTL" error - ASF JIRA文章来源:https://www.toymoban.com/news/detail-819529.html
目前测试发现 文档写两侧配置ttl=0ms表示不保留状态,但是实际测试发现保留了两侧的状态,且永久保留,目前等待jira回复文章来源地址https://www.toymoban.com/news/detail-819529.html
到了这里,关于flink1.18.0 flink维表join新思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!