如何优化flink内存?

classic Classic list List threaded Threaded
13 messages Options
Reply | Threaded
Open this post in threaded view
|

如何优化flink内存?

Yifei Qi
大家好:



不知道大家在使用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>
Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

Wong Victor
这种情况不建议使用滑动窗口,因为会保存大量的窗口数据(24小时/1分钟);
可以自定义ProcessFunction,参照[1];

[1]. https://stackoverflow.com/questions/51977741/flink-performance-issue-with-sliding-time-window





On 04/09/2019, 8:07 PM, "Yifei Qi" <[hidden email]> wrote:

>大家好:
>
>
>
>不知道大家在使用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>
Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

Shuo Cheng
In reply to this post by Yifei Qi
如果是使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide
份,像你这种大小设置,肯定会导致内存的大量消耗.

On Wed, Sep 4, 2019 at 8:07 PM Yifei Qi <[hidden email]> wrote:

> 大家好:
>
>
>
> 不知道大家在使用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
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

戴嘉诚
In reply to this post by Yifei Qi
这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存

Yifei Qi <[hidden email]>于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
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

zhengzhongni
In reply to this post by Yifei Qi
大家好,

我对这种大窗口的滑动窗口有一个思路,我主要使用的是Flink SQL,方法不知道对不对,大家讨论下哈:

1.将24小时窗口,1分钟的滑动,转化为1分钟的滚动窗口,将结果输出,然后输出给24小时滑动窗口1分钟输出。

2.直接的滑动窗口,好像是需要将所有的明细数据都保存在内存中。(这一点不知对不对,大神们帮忙看看)

        3.使用滚动窗口,进行预聚合,滚动窗口的数据在窗口输出后,不用保存明细数据,减少了内存使用。

4.如果TPS过高,可以减少滚动窗口的大小,但是需要保证输出到的滑动窗口,一次滑动的窗口大小是滚动窗口的N倍。

    祝
顺利
———————
Johnny.Z

 原始邮件
发件人: 戴嘉诚<[hidden email]>
收件人: user-zh<[hidden email]>
发送时间: 2019年9月4日(周三) 22:51
主题: Re: 如何优化flink内存?


这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存

Yifei Qi <[hidden email]<mailto:[hidden email]>>于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
> >
>

hb
Reply | Threaded
Open this post in threaded view
|

Re:Re: 如何优化flink内存?

hb



你这个方法是有限制的吧,对于窗口内去重是不支持的,对于取max,min等应该是可以这样做的.





在 2019-09-05 09:50:51,"郑 仲尼" <[hidden email]> 写道:

>大家好,
>
>我对这种大窗口的滑动窗口有一个思路,我主要使用的是Flink SQL,方法不知道对不对,大家讨论下哈:
>
>1.将24小时窗口,1分钟的滑动,转化为1分钟的滚动窗口,将结果输出,然后输出给24小时滑动窗口1分钟输出。
>
>2.直接的滑动窗口,好像是需要将所有的明细数据都保存在内存中。(这一点不知对不对,大神们帮忙看看)
>
>        3.使用滚动窗口,进行预聚合,滚动窗口的数据在窗口输出后,不用保存明细数据,减少了内存使用。
>
>4.如果TPS过高,可以减少滚动窗口的大小,但是需要保证输出到的滑动窗口,一次滑动的窗口大小是滚动窗口的N倍。
>
>    祝
>顺利
>———————
>Johnny.Z
>
> 原始邮件
>发件人: 戴嘉诚<[hidden email]>
>收件人: user-zh<[hidden email]>
>发送时间: 2019年9月4日(周三) 22:51
>主题: Re: 如何优化flink内存?
>
>
>这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存
>
>Yifei Qi <[hidden email]<mailto:[hidden email]>>于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
>> >
>>
>
Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

Yifei Qi
In reply to this post by Wong Victor
意思是要自己写方法实现滑动窗口的功能?  自己控制中间数据如何保存?

Victor Wong <[hidden email]> 于2019年9月4日周三 下午10:36写道:

> 这种情况不建议使用滑动窗口,因为会保存大量的窗口数据(24小时/1分钟);
> 可以自定义ProcessFunction,参照[1];
>
> [1].
> https://stackoverflow.com/questions/51977741/flink-performance-issue-with-sliding-time-window
>
>
>
>
>
> On 04/09/2019, 8:07 PM, "Yifei Qi" <[hidden email]> wrote:
>
> >大家好:
> >
> >
> >
> >不知道大家在使用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>
Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

Yifei Qi
In reply to this post by Shuo Cheng
你们遇到这种问题怎么处理的了?

Shuo Cheng <[hidden email]> 于2019年9月4日周三 下午10:47写道:

> 如果是使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide
> 份,像你这种大小设置,肯定会导致内存的大量消耗.
>
> On Wed, Sep 4, 2019 at 8:07 PM Yifei Qi <[hidden email]> wrote:
>
> > 大家好:
> >
> >
> >
> > 不知道大家在使用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>
Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

Yifei Qi
In reply to this post by 戴嘉诚
你的意思是自己去实现滑动窗口的功能么?

戴嘉诚 <[hidden email]> 于2019年9月4日周三 下午10:51写道:

> 这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存
>
> Yifei Qi <[hidden email]>于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>
Reply | Threaded
Open this post in threaded view
|

答复: 如何优化flink内存?

戴嘉诚
对,你可以自己再state中维持一整天的数据,让后根据时间戳来删除过期数据来替换滑动窗口


发件人: Yifei Qi
发送时间: 2019年9月5日 13:42
收件人: [hidden email]
主题: Re: 如何优化flink内存?

你的意思是自己去实现滑动窗口的功能么?

戴嘉诚 <[hidden email]> 于2019年9月4日周三 下午10:51写道:

> 这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存
>
> Yifei Qi <[hidden email]>于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>

Reply | Threaded
Open this post in threaded view
|

Re:Re: 如何优化flink内存?

陈赋赟
In reply to this post by Yifei Qi
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" <[hidden email]> 写道:

>你的意思是自己去实现滑动窗口的功能么?
>
>戴嘉诚 <[hidden email]> 于2019年9月4日周三 下午10:51写道:
>
>> 这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存
>>
>> Yifei Qi <[hidden email]>于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>
Reply | Threaded
Open this post in threaded view
|

答复: Re: 如何优化flink内存?

戴嘉诚
对,我这边使用的也是相同的操作

发件人: 陈赋赟
发送时间: 2019年9月5日 16:08
收件人: [hidden email]
主题: Re:Re: 如何优化flink内存?

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" <[hidden email]> 写道:

>你的意思是自己去实现滑动窗口的功能么?
>
>戴嘉诚 <[hidden email]> 于2019年9月4日周三 下午10:51写道:
>
>> 这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存
>>
>> Yifei Qi <[hidden email]>于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>

Reply | Threaded
Open this post in threaded view
|

Re: 如何优化flink内存?

cai yi
In reply to this post by 陈赋赟
你好, 没有明白"对每条数据使用slideWindow得出这条数据对应的90天的窗口结束时间"这一步是怎么做的, 滑动窗口中一条数据最大可以包含在size/slide个window中,所以这个结束时间是怎么取值的呢?

在 2019/9/5 下午4:08,“陈赋赟”<[hidden email]> 写入:

    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" <[hidden email]> 写道:
    >你的意思是自己去实现滑动窗口的功能么?
    >
    >戴嘉诚 <[hidden email]> 于2019年9月4日周三 下午10:51写道:
    >
    >> 这里我建议你是用key process然后在里面用state来管理和聚集数据,这样会节省很大一部分内存
    >>
    >> Yifei Qi <[hidden email]>于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>