逻辑上这么说也没有问题;可以认为它是先把收到的记录(根据key和time)分配到特定的窗口中,然后不同的窗口的状态和计算都是独立的
------------------Original Mail ------------------ Sender:ゞ野蠻遊戲χ <zhoujiazhi1...@vip.qq.com> Send Date:Thu Jul 9 10:16:06 2020 Recipients:user-zh <user-zh@flink.apache.org> Subject:回复: DataStream统计uv问题 意思是当我使用滚动窗口之后,在第一个滚动窗口中的state自动会被清除,第二个滚动窗口进来之后,获取相同的Descriptor,里面的值是null? ------------------ 原始邮件 ------------------ 发件人: "Yun Gao"<yungao...@aliyun.com.INVALID>; 发送时间: 2020年7月9日(星期四) 上午10:07 收件人: "ゞ野蠻遊戲χ"<zhoujiazhi1...@vip.qq.com>;"user-zh"<user-zh@flink.apache.org>; 主题: Re: DataStream统计uv问题 您好: 1. 这个应该是预期内的用法,如果执行起来没有遇到问题应该是Ok的。 2. 窗口的状态会在超过最大时间+最大允许的延迟时间之后被清理。------------------------------------------------------------------ Sender:ゞ野蠻遊戲χ<zhoujiazhi1...@vip.qq.com> Date:2020/07/07 22:32:51 Recipient:user-zh<user-zh@flink.apache.org> 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