向大佬们请教一个问题,FLInk 1.16版本中 维表缓存的用法,目前我这边遇到维表ttl后不会更新数据问题
CREATE TABLE order_device_info_source (
order_id BIGINT,
consume_date TIMESTAMP(0),
upload_date TIMESTAMP(0),
up_status_id INT,
consume_money INT,
project_id BIGINT,
PRIMARY KEY (order_id, consume_date) NOT ENFORCED
) WITH ( 'connector' = 'mysql-cdc', 'server-id' = '5591', 'hostname' = '127.0.0.1:3306', 'port' = '3306', 'username' = 'root', 'password' = '123456', 'database-name' = 'wit_order', 'table-name' = 'order_[0-9]+', 'scan.snapshot.fetch.size' = '5000', 'scan.startup.mode' = 'latest-offset' );
CREATE TEMPORARY TABLE project_info_lookup ( project_id
bigint, project_name
VARCHAR, tenant_id
bigint, PRIMARY KEY (project_id) NOT ENFORCED ) WITH ( 'connector' = 'jdbc', 'driver' = 'com.mysql.cj.jdbc.Driver', 'url' = 'jdbc:mysql://127.0.0.1:3306/project', 'username' = 'root', 'password' = '123456', 'table-name' = 'project_info', 'lookup.cache.max-rows' = '5000', 'lookup.cache.ttl' = '60 s' );
SELECT o.order_id,o.consume_date,o.consume_money,p.project_id,p.project_name LEFT JOIN project_info_lookup AS p ON p.project_id = oa.projectId;单独SELECT project_info_lookup 维表会更新 但是join后 维表 lookup.cache.ttl 好像未生效 ,在project_info发生改变,且lookup.cache.ttl时间过了,project_info_lookup还是以前的数据
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Flink 1.16版本中,维表缓存的使用是通过Table API和SQL来实现的,你已经正确地设置了lookup.cache.max-rows
和lookup.cache.ttl
参数来控制缓存的最大行数和过期时间。但是,根据你的描述,似乎在JOIN操作后,维表的更新行为没有达到预期。
这里有几个可能的原因和解决思路:
TTL机制理解:首先需要明确的是,Flink的维表缓存TTL机制是在没有查询发生时才会触发更新或移除过期数据。这意味着,如果JOIN操作频繁进行,且每次JOIN都命中了缓存中的项目,那么即使TTL时间已过,由于持续的访问,这些条目可能不会立即被刷新。这是为了减少数据库的查询压力并提高性能。
异步缓存更新:Flink的维表缓存在后台采用异步方式更新,以减少对主流程的影响。因此,即使源表的数据发生变化,到实际看到维表更新之间可能会有一个小延迟。
JOIN策略:确保你的JOIN策略正确无误。虽然你没有展示完整的JOIN语句,但请确认JOIN条件、表别名等是否完全符合预期。错误的JOIN逻辑可能导致看起来像是缓存未更新的情况。
测试与验证:为了准确判断问题所在,可以尝试以下方法:
project_info
表确实有数据更新,并且更新的时间戳超过了TTL设定的时间。project_info_lookup
,观察其数据是否能按预期更新。考虑使用Blink Planner:如果你还没有使用Blink Planner(现在通常默认就是Blink Planner),请确保启用它,因为Blink Planner在处理维表JOIN方面提供了更优化的实现。
版本兼容性问题:虽然不太常见,但有时候特定版本的Flink可能存在已知的问题或限制。检查Flink的官方文档或社区论坛,看是否有其他用户报告了类似的问题,以及是否有已知的解决方案或工作绕行。
如果以上建议都不能解决问题,建议详细查看Flink的日志输出,寻找可能的错误信息或异常情况,并考虑在Flink的社区论坛或GitHub上提交问题,获取更专业的帮助。