Flink DataStream KeyedStream 与 AggregateFunction

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

Flink DataStream KeyedStream 与 AggregateFunction

王佩-2
请教下:

1、DataStream 如按用户ID KeyBy后,同一个用户ID的数据最终会被分到一个Partition中吗?

2、假设1成立,这样就会有数据倾斜的问题。该如何解决?

3、假设1成立,如: DataStream
                               .keyBy(userID)
                               .timeWindow(....)
                               .aggregate(new
AggregateFunction(.......)),这里的AggregateFunction
为啥还需要merge呢。因为同一个Key的数据只会在同一个Partition中被计算,觉得不需要merge啊。

这三个问题有点疑惑,大神们帮忙看下!
感谢!
Reply | Threaded
Open this post in threaded view
|

回复: Flink DataStream KeyedStream 与 AggregateFunction

Yuan,Youjun
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啊。

这三个问题有点疑惑,大神们帮忙看下!
感谢!
Reply | Threaded
Open this post in threaded view
|

Re: Flink DataStream KeyedStream 与 AggregateFunction

Px New
建议深入解下 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啊。

这三个问题有点疑惑,大神们帮忙看下!
感谢!
Reply | Threaded
Open this post in threaded view
|

Re: Flink DataStream KeyedStream 与 AggregateFunction

Tony Wei
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啊。
>>
>> 这三个问题有点疑惑,大神们帮忙看下!
>> 感谢!
>>
>
Reply | Threaded
Open this post in threaded view
|

Re: Flink DataStream KeyedStream 与 AggregateFunction

tison
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啊。
>>
>> 这三个问题有点疑惑,大神们帮忙看下!
>> 感谢!
>>
>