大家好!
想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题: 1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值, 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。 2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。 DataStream<UvPer10Min> uvPer10MinDataStream = userBehaviorSource .windowAll(TumblingProcessingTimeWindows.of(Time.days(1L))) .trigger(CountTrigger.of(1L)) .evictor(CountEvictor.of(0L, true)) .process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow>() { private transient MapState<String, String> userIdState; private transient ValueState<Long> uvCountState; 谢谢! Jiazhi |
您好: 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------ Sender:ゞ野蠻遊戲χ<[hidden email]> Date:2020/07/07 22:32:51 Recipient:user-zh<[hidden email]> Theme:DataStream统计uv问题 大家好! 想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题: 1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值, 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。 2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。 DataStream<UvPer10Min> uvPer10MinDataStream = userBehaviorSource .windowAll(TumblingProcessingTimeWindows.of(Time.days(1L))) .trigger(CountTrigger.of(1L)) .evictor(CountEvictor.of(0L, true)) .process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow>() { private transient MapState<String, String> userIdState; private transient ValueState<Long> uvCountState; 谢谢! Jiazhi |
意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null?
------------------ 原始邮件 ------------------ 发件人: "Yun Gao"<[hidden email]>; 发送时间: 2020年7月9日(星期四) 上午10:07 收件人: "ゞ野蠻遊戲χ"<[hidden email]>;"user-zh"<[hidden email]>; 主题: Re: DataStream统计uv问题 您好: 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------ Sender:ゞ野蠻遊戲χ<[hidden email]> Date:2020/07/07 22:32:51 Recipient:user-zh<[hidden email]> Theme:DataStream统计uv问题 大家好! &nbsp; &nbsp; &nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题: &nbsp; &nbsp; &nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。 &nbsp; &nbsp; &nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。 DataStream<UvPer10Min&gt; uvPer10MinDataStream = userBehaviorSource .windowAll(TumblingProcessingTimeWindows.of(Time.days(1L))) .trigger(CountTrigger.of(1L)) .evictor(CountEvictor.of(0L, true)) .process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&gt;() { private transient MapState<String, String&gt; userIdState; private transient ValueState<Long&gt; uvCountState; &nbsp; &nbsp; 谢谢! Jiazhi |
逻辑上这么说也没有问题;可以认为它是先把收到的记录(根据key和time)分配到特定的窗口中,然后不同的窗口的状态和计算都是独立的
------------------Original Mail ------------------ Sender:ゞ野蠻遊戲χ <[hidden email]> Send Date:Thu Jul 9 10:16:06 2020 Recipients:user-zh <[hidden email]> Subject:回复: DataStream统计uv问题 意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null? ------------------ 原始邮件 ------------------ 发件人: "Yun Gao"<[hidden email]>; 发送时间: 2020年7月9日(星期四) 上午10:07 收件人: "ゞ野蠻遊戲χ"<[hidden email]>;"user-zh"<[hidden email]>; 主题: Re: DataStream统计uv问题 您好: 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------ Sender:ゞ野蠻遊戲χ<[hidden email]> Date:2020/07/07 22:32:51 Recipient:user-zh<[hidden email]> Theme:DataStream统计uv问题 大家好! &nbsp; &nbsp; &nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题: &nbsp; &nbsp; &nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。 &nbsp; &nbsp; &nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。 DataStream<UvPer10Min&gt; uvPer10MinDataStream = userBehaviorSource .windowAll(TumblingProcessingTimeWindows.of(Time.days(1L))) .trigger(CountTrigger.of(1L)) .evictor(CountEvictor.of(0L, true)) .process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&gt;() { private transient MapState<String, String&gt; userIdState; private transient ValueState<Long&gt; uvCountState; &nbsp; &nbsp; 谢谢! Jiazhi |
我建议你用ContinuousEventTimeTrigger,可以在窗口范围内,连续触发。
你这个countTrigger,促发次数太多了,而且你后面是processWindowFunction,导致计算压力比较大。 建议你用aggregateWindowFuntion ------------------ 原始邮件 ------------------ 发件人: "Yun Gao"<[hidden email]>; 发送时间: 2020年7月9日(星期四) 上午10:18 收件人: "ゞ野蠻遊戲χ"<[hidden email]>;"user-zh"<[hidden email]>; 主题: Re: 回复: DataStream统计uv问题 逻辑上这么说也没有问题;可以认为它是先把收到的记录(根据key和time)分配到特定的窗口中,然后不同的窗口的状态和计算都是独立的 ------------------Original Mail ------------------ Sender:ゞ野蠻遊戲χ <[hidden email]> Send Date:Thu Jul 9 10:16:06 2020 Recipients:user-zh <[hidden email]> Subject:回复: DataStream统计uv问题 意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null? ------------------&nbsp;原始邮件&nbsp;------------------ 发件人:&nbsp;"Yun Gao"<[hidden email]&gt;; 发送时间:&nbsp;2020年7月9日(星期四) 上午10:07 收件人:&nbsp;"ゞ野蠻遊戲χ"<[hidden email]&gt;;"user-zh"<[hidden email]&gt;; 主题:&nbsp;Re: DataStream统计uv问题 您好: &nbsp;&nbsp; 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。 &nbsp;&nbsp; 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------ Sender:ゞ野蠻遊戲χ<[hidden email]&gt; Date:2020/07/07 22:32:51 Recipient:user-zh<[hidden email]&gt; Theme:DataStream统计uv问题 大家好! &amp;nbsp; &amp;nbsp; &amp;nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题: &amp;nbsp; &amp;nbsp; &amp;nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。 &amp;nbsp; &amp;nbsp; &amp;nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。 DataStream<UvPer10Min&amp;gt; uvPer10MinDataStream = userBehaviorSource .windowAll(TumblingProcessingTimeWindows.of(Time.days(1L))) .trigger(CountTrigger.of(1L)) .evictor(CountEvictor.of(0L, true)) .process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&amp;gt;() { private transient MapState<String, String&amp;gt; userIdState; private transient ValueState<Long&amp;gt; uvCountState; &amp;nbsp; &amp;nbsp; 谢谢! Jiazhi |
不错的想法
------------------ 原始邮件 ------------------ 发件人: "1193216154"<[hidden email]>; 发送时间: 2020年7月9日(星期四) 上午10:25 收件人: "user-zh"<[hidden email]>; 主题: 回复: 回复: DataStream统计uv问题 我建议你用ContinuousEventTimeTrigger,可以在窗口范围内,连续触发。 你这个countTrigger,促发次数太多了,而且你后面是processWindowFunction,导致计算压力比较大。 建议你用aggregateWindowFuntion ------------------&nbsp;原始邮件&nbsp;------------------ 发件人:&nbsp;"Yun Gao"<[hidden email]&gt;; 发送时间:&nbsp;2020年7月9日(星期四) 上午10:18 收件人:&nbsp;"ゞ野蠻遊戲χ"<[hidden email]&gt;;"user-zh"<[hidden email]&gt;; 主题:&nbsp;Re: 回复: DataStream统计uv问题 逻辑上这么说也没有问题;可以认为它是先把收到的记录(根据key和time)分配到特定的窗口中,然后不同的窗口的状态和计算都是独立的 &nbsp;------------------Original Mail ------------------ Sender:ゞ野蠻遊戲χ <[hidden email]&gt; Send Date:Thu Jul 9 10:16:06 2020 Recipients:user-zh <[hidden email]&gt; Subject:回复: DataStream统计uv问题 意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null? ------------------&amp;nbsp;原始邮件&amp;nbsp;------------------ 发件人:&amp;nbsp;"Yun Gao"<[hidden email]&amp;gt;; 发送时间:&amp;nbsp;2020年7月9日(星期四) 上午10:07 收件人:&amp;nbsp;"ゞ野蠻遊戲χ"<[hidden email]&amp;gt;;"user-zh"<[hidden email]&amp;gt;; 主题:&amp;nbsp;Re: DataStream统计uv问题 您好: &amp;nbsp;&amp;nbsp; 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。 &amp;nbsp;&amp;nbsp; 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------ Sender:ゞ野蠻遊戲χ<[hidden email]&amp;gt; Date:2020/07/07 22:32:51 Recipient:user-zh<[hidden email]&amp;gt; Theme:DataStream统计uv问题 大家好! &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题: &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值, &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。 DataStream<UvPer10Min&amp;amp;gt; uvPer10MinDataStream = userBehaviorSource .windowAll(TumblingProcessingTimeWindows.of(Time.days(1L))) .trigger(CountTrigger.of(1L)) .evictor(CountEvictor.of(0L, true)) .process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&amp;amp;gt;() { private transient MapState<String, String&amp;amp;gt; userIdState; private transient ValueState<Long&amp;amp;gt; uvCountState; &amp;amp;nbsp; &amp;amp;nbsp; 谢谢! Jiazhi |
In reply to this post by ゞ野蠻遊戲χ
Hi,
我看了下你统计uv的方法,是不是可以思考转换一下计算uv的方式,开一天的窗口可能不是一个合适的方法,可以参考[1]中的方案。 [1] https://lists.apache.org/thread.html/rbe00ee38e2d07310d4e3c796de86c65205d1f5deecfc1678d9ebbdea%40%3Cuser-zh.flink.apache.org%3E ------------------ 原始邮件 ------------------ 发件人: "ゞ野蠻遊戲χ"<[hidden email]>; 发送时间: 2020年7月7日(星期二) 晚上10:32 收件人: "user-zh"<[hidden email]>; 主题: DataStream统计uv问题 大家好! &nbsp; &nbsp; &nbsp;想问下,现在在用DataStream的api来统计每天的UV,代码如下,有2个使用问题: &nbsp; &nbsp; &nbsp;1、在使用Tumbling窗口的时候,由于使用窗口跨度是1天(Time.days(1)),只有以一天结束的时候,才能输出一个uv值, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 这样时间等待太长了,所以加了一个trigger,每来一条都触发一次窗口,不知道这样的用法没有问题。 &nbsp; &nbsp; &nbsp;2、还有想问下在窗口结束后,里面的state状态会自动释放吗?还是要自己手动设置TTL的。 DataStream<UvPer10Min&gt; uvPer10MinDataStream = userBehaviorSource .windowAll(TumblingProcessingTimeWindows.of(Time.days(1L))) .trigger(CountTrigger.of(1L)) .evictor(CountEvictor.of(0L, true)) .process(new ProcessAllWindowFunction<UserBehavior, UvPer10Min, TimeWindow&gt;() { private transient MapState<String, String&gt; userIdState; private transient ValueState<Long&gt; uvCountState; &nbsp; &nbsp; 谢谢! Jiazhi |
Free forum by Nabble | Edit this page |