你好, 没有明白"对每条数据使用slideWindow得出这条数据对应的90天的窗口结束时间"这一步是怎么做的, 滑动窗口中一条数据最大可以包含在size/slide个window中,所以这个结束时间是怎么取值的呢?
在 2019/9/5 下午4:08,“陈赋赟”<astion_...@163.com> 写入: HI 我在项目中有遇到过类似的情况,我说下我的想法和思路。 伊始是需要统计90天事件窗口中用户浏览事件总数,如果是在近30天内有浏览事件则累加1次,在30天内没有浏览事件但在 30天 ~ 90天内有其他浏览事件则记0次(需求比较奇葩),我们使用了滑动窗口(长度90天 步长1天 数据进来实时trigger触发计算)因为需要拿到窗口的结束时间所以一开始是用windowProcessFunction去做的聚合统计,这意味着90个窗口每个窗口里都需要缓存着全部的数据而不是一个聚合汇总数据,在线上跑了两天后发现checkpoint size已经陡增到20个G并且不久就OOM了。后面想了一下,Flink 提供的SlideWindow的算法不是闭包可以直接复用,用flatmap对每条数据使用slideWindow得出这条数据对应的90天的窗口结束时间,然后在keyby后使用ProcessFunction,在里面自定义valueState对数据进行聚合汇总,并且在processFunction内部还可以访问TimeService,可以注册清理过期state数据的Timer,并在onTimer回调方法中清理状态。 以上是我的思路,希望能帮助到你~ 祝好 在 2019-09-05 13:43:00,"Yifei Qi" <qyf...@gmail.com> 写道: >你的意思是自己去实现滑动窗口的功能么? > >戴嘉诚 <a773807...@gmail.com> 于2019年9月4日周三 下午10:51写道: > >> 这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存 >> >> Yifei Qi <qyf...@gmail.com>于2019年9月4日 周三20:07写道: >> >> > 大家好: >> > >> > >> > >> > 不知道大家在使用flink时遇到过内存消耗过大的问题么? >> > >> > >> > >> > 我们最近在用flink算一些实时的统计数据, 但是内存消耗很大, 不知道有没有人知道如何优化? >> > >> > >> > >> > 具体情况是这样的: >> > >> > 准备的测试数据模拟一天时间内3万个用户的5万条数据. 原始数据一共是100M. >> > >> > 按照用户进行分组. >> > >> > 计算两个滑动窗口任务:一个是近1小时, 每5秒滑动一次的窗口. 一个是近24小时, 每1分钟滑动一次的窗口. >> > >> > >> > >> > >> > >> > flink运行在3个节点后, 内存合计就用了5G. >> > >> > >> > >> > >> > >> > flink如此消耗内存, 不知道是它本来就这么吃内存, 还是我使用的有问题. >> > >> > >> > >> > >> > >> > 顺祝商祺 >> > >> > >> > -- >> > >> > >> > Qi Yifei >> > [image: https://]about.me/qyf404 >> > < >> > >> https://about.me/qyf404?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=gmail_api >> > > >> > >> > > >-- > > >Qi Yifei >[image: https://]about.me/qyf404 ><https://about.me/qyf404?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=gmail_api>