Hi,All:
请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。 比如: 数据 {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:22:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} {ts: 2019-12-10 16:26:00 id: 2} 第一种情景,不考虑时间去重,结果如下: {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 第二种情景,考虑时间去重,结果如下: {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:26:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 |
第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果?
-----邮件原件----- 发件人: Jimmy Wong <[hidden email]> 发送时间: Tuesday, December 10, 2019 4:40 PM 收件人: [hidden email] 主题: 窗口去重 Hi,All: 请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。 比如: 数据 {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:22:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} {ts: 2019-12-10 16:26:00 id: 2} 第一种情景,不考虑时间去重,结果如下: {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 第二种情景,考虑时间去重,结果如下: {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:26:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 |
Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢?
| | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 在2019年12月11日 09:04,Yuan,Youjun<[hidden email]> 写道: 第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果? -----邮件原件----- 发件人: Jimmy Wong <[hidden email]> 发送时间: Tuesday, December 10, 2019 4:40 PM 收件人: [hidden email] 主题: 窗口去重 Hi,All: 请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。 比如: 数据 {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:22:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} {ts: 2019-12-10 16:26:00 id: 2} 第一种情景,不考虑时间去重,结果如下: {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 第二种情景,考虑时间去重,结果如下: {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:26:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 |
去重了为什么还会有两个2
| | 梁溪 | | 邮箱:[hidden email] | 签名由 网易邮箱大师 定制 在2019年12月11日 11:19,Jimmy Wong 写道: Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢? | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 在2019年12月11日 09:04,Yuan,Youjun<[hidden email]> 写道: 第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果? -----邮件原件----- 发件人: Jimmy Wong <[hidden email]> 发送时间: Tuesday, December 10, 2019 4:40 PM 收件人: [hidden email] 主题: 窗口去重 Hi,All: 请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。 比如: 数据 {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:22:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} {ts: 2019-12-10 16:26:00 id: 2} 第一种情景,不考虑时间去重,结果如下: {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 第二种情景,考虑时间去重,结果如下: {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:26:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 |
属于不同的window,是window内去重,window间不去重
| | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 在2019年12月11日 12:08,梁溪<[hidden email]> 写道: 去重了为什么还会有两个2 | | 梁溪 | | 邮箱:[hidden email] | 签名由 网易邮箱大师 定制 在2019年12月11日 11:19,Jimmy Wong 写道: Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢? | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 在2019年12月11日 09:04,Yuan,Youjun<[hidden email]> 写道: 第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果? -----邮件原件----- 发件人: Jimmy Wong <[hidden email]> 发送时间: Tuesday, December 10, 2019 4:40 PM 收件人: [hidden email] 主题: 窗口去重 Hi,All: 请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。 比如: 数据 {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:22:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} {ts: 2019-12-10 16:26:00 id: 2} 第一种情景,不考虑时间去重,结果如下: {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 第二种情景,考虑时间去重,结果如下: {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:26:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 |
我觉得可以这样处理:<br/>1:首先把你的stream流注册为表(不管是一个还是多个stream)<br/>2:然后对这个表使用FLINKSQL进行业务表达<br/>3:最后使用FLINK SQL提供的开窗函数指定想要去重的字段<br/>注意:控制state的大小<br/>参考文档:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sql.html#deduplication
在 2019-12-11 15:53:00,"Jimmy Wong" <[hidden email]> 写道: >属于不同的window,是window内去重,window间不去重 > > >| | >Jimmy Wong >| >| >[hidden email] >| >签名由网易邮箱大师定制 > > >在2019年12月11日 12:08,梁溪<[hidden email]> 写道: >去重了为什么还会有两个2 > > > > >| | >梁溪 >| >| >邮箱:[hidden email] >| > >签名由 网易邮箱大师 定制 > >在2019年12月11日 11:19,Jimmy Wong 写道: >Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢? > > >| | >Jimmy Wong >| >| >[hidden email] >| >签名由网易邮箱大师定制 > > >在2019年12月11日 09:04,Yuan,Youjun<[hidden email]> 写道: >第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果? > >-----邮件原件----- >发件人: Jimmy Wong <[hidden email]> >发送时间: Tuesday, December 10, 2019 4:40 PM >收件人: [hidden email] >主题: 窗口去重 > >Hi,All: >请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。 >比如: >数据 >{ts: 2019-12-10 16:24:00 id: 1} >{ts: 2019-12-10 16:22:00 id: 1} >{ts: 2019-12-10 16:23:00 id: 2} >{ts: 2019-12-10 16:21:00 id: 1} >{ts: 2019-12-10 16:29:00 id: 2} >{ts: 2019-12-10 16:27:00 id: 3} >{ts: 2019-12-10 16:26:00 id: 2} > > >第一种情景,不考虑时间去重,结果如下: >{ts: 2019-12-10 16:24:00 id: 1} >{ts: 2019-12-10 16:23:00 id: 2} >{ts: 2019-12-10 16:29:00 id: 2} >{ts: 2019-12-10 16:27:00 id: 3} > > >第二种情景,考虑时间去重,结果如下: >{ts: 2019-12-10 16:21:00 id: 1} >{ts: 2019-12-10 16:23:00 id: 2} >{ts: 2019-12-10 16:26:00 id: 2} >{ts: 2019-12-10 16:27:00 id: 3} > > >请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。 > > > > >| | >Jimmy Wong >| >| >[hidden email] >| >签名由网易邮箱大师定制 > |
谢谢大家,我想到了解决方案:
情景一:可以每来一条数据就Trigger一次计算,然后再Window计算完的时候,清除状态 情景二:确实要等窗口计算完 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 在2019年12月11日 16:26,yanggang_it_job<[hidden email]> 写道: 我觉得可以这样处理:<br/>1:首先把你的stream流注册为表(不管是一个还是多个stream)<br/>2:然后对这个表使用FLINKSQL进行业务表达<br/>3:最后使用FLINK SQL提供的开窗函数指定想要去重的字段<br/>注意:控制state的大小<br/>参考文档:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sql.html#deduplication 在 2019-12-11 15:53:00,"Jimmy Wong" <[hidden email]> 写道: 属于不同的window,是window内去重,window间不去重 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 在2019年12月11日 12:08,梁溪<[hidden email]> 写道: 去重了为什么还会有两个2 | | 梁溪 | | 邮箱:[hidden email] | 签名由 网易邮箱大师 定制 在2019年12月11日 11:19,Jimmy Wong 写道: Hi, Yuan,Youjun 谢谢。 你这种方案是 SQL 的角度吧,如果用 DataStream 算子要怎么处理呢? | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 在2019年12月11日 09:04,Yuan,Youjun<[hidden email]> 写道: 第一种情况,用firstvalue这种聚合函数; 第二种情况,用min聚合函数,然后group by id,是不是就是你要的结果? -----邮件原件----- 发件人: Jimmy Wong <[hidden email]> 发送时间: Tuesday, December 10, 2019 4:40 PM 收件人: [hidden email] 主题: 窗口去重 Hi,All: 请教一个问题,现在有个实时场景:需要对每 5 分钟内数据进行去重,然后 Sink。 比如: 数据 {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:22:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} {ts: 2019-12-10 16:26:00 id: 2} 第一种情景,不考虑时间去重,结果如下: {ts: 2019-12-10 16:24:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:29:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 第二种情景,考虑时间去重,结果如下: {ts: 2019-12-10 16:21:00 id: 1} {ts: 2019-12-10 16:23:00 id: 2} {ts: 2019-12-10 16:26:00 id: 2} {ts: 2019-12-10 16:27:00 id: 3} 请教下,对于上面两种情景,分别有什么高效实时的解决方案么, 谢谢?我想了一下用 5min 窗口,和 ProcessWindowFunction 可以解决,但是 ProcessWindowFunction 要缓存 5min 的窗口数据,但是有延迟。 | | Jimmy Wong | | [hidden email] | 签名由网易邮箱大师定制 |
Free forum by Nabble | Edit this page |