Flink CDC那个ttl我看官方文档上说默认是0,也就是永不过期。那岂不是缓存规模越来越大,最后内存照样不够用。所以常规是要打破默认设置一下让他过期的吗?
是的,Flink CDC 中的 TTL(time-to-live)默认是 0,即永不过期。这意味着缓存中的数据将一直保存在内存中,可能会导致内存不足的问题。
为了避免内存溢出的风险,并管理缓存的规模,通常建议根据实际需求打破默认设置并为 CDC 连接器配置一个合适的 TTL 值。通过设置 TTL,可以控制缓存中数据的生命周期,使其在一定时间后过期并被清理出缓存,释放内存资源。
TTL 的具体值应该根据业务需求和数据变化的频率来确定。如果你的数据变化频繁,且需要及时反映最新状态,则可以选择较短的 TTL 值。相反,如果数据变化较少或对实时性要求不高,可以选择较长的 TTL 值。
另外,还可以考虑使用基于容量的策略,例如 LRU(Least Recently Used)来限制缓存的大小,并在容量超出限制时自动清理最近最少使用的数据。
需要注意的是,设置 TTL 和缓存策略是一项权衡任务。太短的 TTL 可能会导致频繁的数据失效和重新加载,增加数据库负载和延迟。而太长的 TTL 则可能导致过时的数据一直存在于缓存中,无法及时更新。
在Flink CDC中,如果您使用了Debezium作为CDC源,那么Debezium的默认time-to-live(TTL)为0,即不过期。这意味着Flink CDC将会保留所有捕获到的变化数据,直到任务终止。如果您的任务需要长期运行,或者需要处理大量的数据,那么这可能会导致存储空间的不足,从而影响任务的稳定性。
为了避免存储空间的不足,建议您在Flink CDC中手动设置Debezium的TTL参数,以便自动清理过期的变化数据。例如,如果您希望将变化数据保存一段时间,可以将TTL设置为几个小时或几天,具体取决于您的需求。设置TTL的方式如下:
sql
Copy
CREATE TABLE my_table (
id INT,
name STRING,
age INT
) WITH (
'connector' = 'mysql-cdc',
'scan.startup.mode' = 'latest-offset',
'debezium-json.ignore-parse-errors' = 'true',
'debezium-json.timestamp-format.standard' = 'ISO-8601',
'debezium-json.schema-include' = 'false',
'debezium-json.key.fields' = 'id',
'debezium-json.ignore-delete' = 'true',
'debezium-json.filter.condition' = '',
'debezium-json.table-name.case' = 'lower',
'debezium-json.database-name.case' = 'lower',
'debezium-json.column-name.case' = 'lower',
'debezium-json.tombstones.on.delete' = 'false',
'debezium-json.ttl' = '3600' -- 设置TTL为3600秒,即1小时
);
在上述示例中,通过将debezium-json.ttl参数设置为3600秒,即1小时,
Flink CDC的TTL默认值为0,这意味着状态将永不过期。如果状态缓存规模不断增长,最终可能会导致内存不足。因此,可以打破默认设置并将其设置为过期状态以释放内存。
要设置 TTL,请使用以下语法:
CREATE TABLE my_table (
id INT,
name STRING,
state MAP<STRING, BINARY>,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc',
'hostname' = 'localhost',
'port' = '3306',
'username' = 'root',
'password' = 'password',
'database-name' = 'mydb',
'table-name' = 'mytable',
'debezium.startup.mode' = 'latest-offset',
'debezium.sql.query.default.schema.field-whitelist' = 'STATE::*',
'state.ttl' = '1h' -- 设置状态过期时间为1小时
);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。