开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC那个ttl我看官方文档上说默认是0是要打破默认设置一下让他过期的吗?

Flink CDC那个ttl我看官方文档上说默认是0,也就是永不过期。那岂不是缓存规模越来越大,最后内存照样不够用。所以常规是要打破默认设置一下让他过期的吗?

展开
收起
小易01 2023-07-26 08:19:00 233 0
3 条回答
写回答
取消 提交回答
  • 是的,Flink CDC 中的 TTL(time-to-live)默认是 0,即永不过期。这意味着缓存中的数据将一直保存在内存中,可能会导致内存不足的问题。

    为了避免内存溢出的风险,并管理缓存的规模,通常建议根据实际需求打破默认设置并为 CDC 连接器配置一个合适的 TTL 值。通过设置 TTL,可以控制缓存中数据的生命周期,使其在一定时间后过期并被清理出缓存,释放内存资源。

    TTL 的具体值应该根据业务需求和数据变化的频率来确定。如果你的数据变化频繁,且需要及时反映最新状态,则可以选择较短的 TTL 值。相反,如果数据变化较少或对实时性要求不高,可以选择较长的 TTL 值。

    另外,还可以考虑使用基于容量的策略,例如 LRU(Least Recently Used)来限制缓存的大小,并在容量超出限制时自动清理最近最少使用的数据。

    需要注意的是,设置 TTL 和缓存策略是一项权衡任务。太短的 TTL 可能会导致频繁的数据失效和重新加载,增加数据库负载和延迟。而太长的 TTL 则可能导致过时的数据一直存在于缓存中,无法及时更新。

    2023-07-31 22:49:05
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在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小时,

    2023-07-29 15:47:23
    赞同 展开评论 打赏
  • 存在即是合理

    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小时
    );
    
    2023-07-27 16:35:01
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载