V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xianzhe
V2EX  ›  问与答

请问如何清除 flink 的状态?

  •  
  •   xianzhe · 303 天前 · 630 次点击
    这是一个创建于 303 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大佬们,有这样一个需求:将报警信息同步到 ES 中。

    流程如下:

    • 报警数据写入数据库
    • flink cdc 同步数据库的报警信息
    • join 一些其他表,加上附加信息
    • 写入到 ES

    听起来很简单的需求,但问题是 flink 的内存一直涨,搜索一番得知是没有清除 flink 的状态,问题是我设了 ttl 清除状态,相应的数据在 ES 中就被删了,请问各位大佬是我哪里使用姿势不对吗?

    8 条回复    2023-07-03 10:13:49 +08:00
    liprais
        1
    liprais  
       303 天前
    你处理完了手动清除下状态不就完了
    QunLeLZ
        2
    QunLeLZ  
       303 天前
    看看是不是 ttl 的时间设置的太短,数据还没 join 上就把 state 清了呗
    xianzhe
        3
    xianzhe  
    OP
       303 天前
    @liprais 怎么手动清理啊,大佬给个关键字
    xianzhe
        4
    xianzhe  
    OP
       303 天前
    @QunLeLZ 问题在于我无法给出一个合适的 ttl ,收到的报警的状态是会改变的,比如昨天报警出现了,没人知道它什么时候能恢复,不管我怎么设置 ttl 都有可能使得 es 中的状态不对
    liprais
        5
    liprais  
       303 天前
    @xianzhe 你怎么设置状态就怎么清理呗
    我很好奇你是怎么把 state 和 es 关联起来的
    state ttl 应该只影响 flink 自己的 state,要清除 es 里面的不是得写 code 去改么...
    sijue
        6
    sijue  
       303 天前
    flink state 设置 ttl 是可以清理状态的,需要注意 ttl 的清理策略,是写时和创建更新还是读时和写时更新;
    xianzhe
        7
    xianzhe  
    OP
       303 天前
    @liprais 比如 join 进来信息是用 inner join 的,join 进来的表里 ttl 过期了,那 join 的结果就是空的,然后 es 里的数据就没了。大佬你看我上面的回复,我感觉核心问题在于我没法给一个确定的 ttl 。
    QunLeLZ
        8
    QunLeLZ  
       299 天前
    @xianzhe #7 修改状态后端吧,把 state 写到本地文件系统,就不会内存一直涨,能避免 flink 任务持续运行可能导致的状态数量暴增而内存不足的情况,但是最好还是给一个 ttl ,不然本地文件系统的 state 还是会一直涨,不过可以把 ttl 设置长些。因为 flink 的 join 是比较麻烦的事情,尤其是这种后面数据会更新的情况。当然,写 java 代码的话,可以识别是更新数据,就让 flink 抛弃,你自己写代码去更新 es 的某个字段。。这是我的想法,有问题轻喷。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2889 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:46 · PVG 22:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.