同事说维表缓存,当缓存项在指定的时间段内没有被读就会被回收,如果被读就会延长ttl时间。如果关联的维表数据变动就会导致无法获取最新维度数据,这种场景必须关闭缓存。
在flink 1.16之前缓存的创建方式如下:
CacheBuilder.newBuilder() .expireAfterWrite(cacheExpireMs, TimeUnit.MILLISECONDS) .maximumSize(cacheMaxSize) .build()
flink1.16后缓存增加了参数给用户设置如下:
CacheBuilder<Object, Object> guavaCacheBuilder = CacheBuilder.newBuilder();if (expireAfterAccessDuration != null) {guavaCacheBuilder.expireAfterAccess(expireAfterAccessDuration);}if (expireAfterWriteDuration != null) {guavaCacheBuilder.expireAfterWrite(expireAfterWriteDuration);}if (maximumSize != null) {guavaCacheBuilder.maximumSize(maximumSize);}if (ticker != null) {guavaCacheBuilder.ticker(ticker);}guavaCache = guavaCacheBuilder.build();
expireAfterAccess: 当缓存项在指定的时间段内没有被读或写就会被回收。
expireAfterWrite:当缓存项在指定的时间段内没有更新就会被回收。
refreshAfterWrite:当缓存项上一次更新操作之后的多久会被刷新。
专栏初衷:
- 要想快速建设实时数仓,对齐离线数仓分层,首选Flink SQL,相比datastream 代码,Flink SQL可大幅提升10倍实时数仓建设落地时间。
- 作者位于大厂实时数仓团队,目前运行实时任务3000+,实时集群规模2万CU,集群checkpoint峰值5TB,单任务最大QPS峰值50W。
- 本专栏将分享作者在实时数仓建设过程中遇到的细节点,帮组大家快速建设实时数仓。
作者信息:
- 1.《深入理解Flink核心设计与实践原理》一书作者
- 2.GitHub 热门项目 fink-boot(800+) 开发者,致力于flink与spring生态集成