请问如何清除 flink 的状态?

316 天前
 xianzhe

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

流程如下:

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

651 次点击
所在节点    问与答
8 条回复
liprais
316 天前
你处理完了手动清除下状态不就完了
QunLeLZ
316 天前
看看是不是 ttl 的时间设置的太短,数据还没 join 上就把 state 清了呗
xianzhe
316 天前
@liprais 怎么手动清理啊,大佬给个关键字
xianzhe
316 天前
@QunLeLZ 问题在于我无法给出一个合适的 ttl ,收到的报警的状态是会改变的,比如昨天报警出现了,没人知道它什么时候能恢复,不管我怎么设置 ttl 都有可能使得 es 中的状态不对
liprais
316 天前
@xianzhe 你怎么设置状态就怎么清理呗
我很好奇你是怎么把 state 和 es 关联起来的
state ttl 应该只影响 flink 自己的 state,要清除 es 里面的不是得写 code 去改么...
sijue
316 天前
flink state 设置 ttl 是可以清理状态的,需要注意 ttl 的清理策略,是写时和创建更新还是读时和写时更新;
xianzhe
316 天前
@liprais 比如 join 进来信息是用 inner join 的,join 进来的表里 ttl 过期了,那 join 的结果就是空的,然后 es 里的数据就没了。大佬你看我上面的回复,我感觉核心问题在于我没法给一个确定的 ttl 。
QunLeLZ
312 天前
@xianzhe #7 修改状态后端吧,把 state 写到本地文件系统,就不会内存一直涨,能避免 flink 任务持续运行可能导致的状态数量暴增而内存不足的情况,但是最好还是给一个 ttl ,不然本地文件系统的 state 还是会一直涨,不过可以把 ttl 设置长些。因为 flink 的 join 是比较麻烦的事情,尤其是这种后面数据会更新的情况。当然,写 java 代码的话,可以识别是更新数据,就让 flink 抛弃,你自己写代码去更新 es 的某个字段。。这是我的想法,有问题轻喷。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/952658

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX