请教下:
1、DataStream 如按用户ID KeyBy后,同一个用户ID的数据最终会被分到一个Partition中吗? 2、假设1成立,这样就会有数据倾斜的问题。该如何解决? 3、假设1成立,如: DataStream .keyBy(userID) .timeWindow(....) .aggregate(new AggregateFunction(.......)),这里的AggregateFunction 为啥还需要merge呢。因为同一个Key的数据只会在同一个Partition中被计算,觉得不需要merge啊。 这三个问题有点疑惑,大神们帮忙看下! 感谢! |
1, 是
2,没有标准答案,是否可以本地先聚合? 3,AggFunc是指定做何种聚合,是sum, 还是avg, 还是count。不指定的话,Flink哪里指导你要计算啥? -----邮件原件----- 发件人: 王佩 <[hidden email]> 发送时间: Saturday, November 9, 2019 11:45 AM 收件人: user-zh <[hidden email]> 主题: Flink DataStream KeyedStream 与 AggregateFunction 请教下: 1、DataStream 如按用户ID KeyBy后,同一个用户ID的数据最终会被分到一个Partition中吗? 2、假设1成立,这样就会有数据倾斜的问题。该如何解决? 3、假设1成立,如: DataStream .keyBy(userID) .timeWindow(....) .aggregate(new AggregateFunction(.......)),这里的AggregateFunction 为啥还需要merge呢。因为同一个Key的数据只会在同一个Partition中被计算,觉得不需要merge啊。 这三个问题有点疑惑,大神们帮忙看下! 感谢! |
建议深入解下 keyWindow,NoKeyWindow 与Assigner TimeWindow And WindowsFunction 😃 Yuan,Youjun <[hidden email]> 于2019年11月9日周六 下午7:46写道: 1, 是 |
Hi,
補充一下第三個問題,merge 的用途是給所謂的 mergeable window 使用的 (i.e. SessionWindow) 舉個例子,當 SessionWindow 的時間間隔設定為 10s,如果收到 event A (ts = t1), event B (ts = t1 + 15s), 這個狀況下 event A, event B 會被當作是兩個 session。假如此時收到了一個 event C (ts = t1 + 5s), 且前兩個 window 都還沒被觸發處理,這個時候 event A, B, C 就會被 merge 成同一個 session。 這時調用的就會是 merge function 去把三者合併。 Best Tony Wei Px New <[hidden email]> 於 2019年11月10日 週日 上午10:58寫道: > [image: image.png]建议深入解下 keyWindow,NoKeyWindow 与Assigner TimeWindow > And WindowsFunction 😃 > > Yuan,Youjun <[hidden email]> 于2019年11月9日周六 下午7:46写道: > >> 1, 是 >> 2,没有标准答案,是否可以本地先聚合? >> 3,AggFunc是指定做何种聚合,是sum, 还是avg, 还是count。不指定的话,Flink哪里指导你要计算啥? >> >> -----邮件原件----- >> 发件人: 王佩 <[hidden email]> >> 发送时间: Saturday, November 9, 2019 11:45 AM >> 收件人: user-zh <[hidden email]> >> 主题: Flink DataStream KeyedStream 与 AggregateFunction >> >> 请教下: >> >> 1、DataStream 如按用户ID KeyBy后,同一个用户ID的数据最终会被分到一个Partition中吗? >> >> 2、假设1成立,这样就会有数据倾斜的问题。该如何解决? >> >> 3、假设1成立,如: DataStream >> .keyBy(userID) >> .timeWindow(....) >> .aggregate(new >> AggregateFunction(.......)),这里的AggregateFunction >> 为啥还需要merge呢。因为同一个Key的数据只会在同一个Partition中被计算,觉得不需要merge啊。 >> >> 这三个问题有点疑惑,大神们帮忙看下! >> 感谢! >> > |
In reply to this post by Px New
关于第二点,BLINK 和腾讯的 FLINK 定制版本 TDFLINK 都做了 local keyby 功能,
社区相关的讨论见 FLIP-44,可惜社区一直没啥时间跟进这个 Thread Best, tison. Px New <[hidden email]> 于2019年11月10日周日 上午10:58写道: > [image: image.png]建议深入解下 keyWindow,NoKeyWindow 与Assigner TimeWindow > And WindowsFunction 😃 > > Yuan,Youjun <[hidden email]> 于2019年11月9日周六 下午7:46写道: > >> 1, 是 >> 2,没有标准答案,是否可以本地先聚合? >> 3,AggFunc是指定做何种聚合,是sum, 还是avg, 还是count。不指定的话,Flink哪里指导你要计算啥? >> >> -----邮件原件----- >> 发件人: 王佩 <[hidden email]> >> 发送时间: Saturday, November 9, 2019 11:45 AM >> 收件人: user-zh <[hidden email]> >> 主题: Flink DataStream KeyedStream 与 AggregateFunction >> >> 请教下: >> >> 1、DataStream 如按用户ID KeyBy后,同一个用户ID的数据最终会被分到一个Partition中吗? >> >> 2、假设1成立,这样就会有数据倾斜的问题。该如何解决? >> >> 3、假设1成立,如: DataStream >> .keyBy(userID) >> .timeWindow(....) >> .aggregate(new >> AggregateFunction(.......)),这里的AggregateFunction >> 为啥还需要merge呢。因为同一个Key的数据只会在同一个Partition中被计算,觉得不需要merge啊。 >> >> 这三个问题有点疑惑,大神们帮忙看下! >> 感谢! >> > |
Free forum by Nabble | Edit this page |