关于非keyedstream使用定时器问题

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

关于非keyedstream使用定时器问题

nobleyd
如题,当前flink不支持非keyedStream使用定时器,不清楚有啥解决方法吗?

目前我实现一个sink,带超时希望用到timerservice。但是不支持。
同时不希望使用keyedStream,因为会导致数据不均衡。

除了引入随机key外还有什么方法吗。
Reply | Threaded
Open this post in threaded view
|

Re: 关于非keyedstream使用定时器问题

nobleyd
引入随机key最大问题是,本身希望batch方式sink,key太随机压根无法batch。
如果randomKey%1024这样分桶到1024的话,也不行,会导致每个bucket中数据量太少,进而基本都是timeout而sink,而不是达到batchSize,换言之,每次sink都会有1024个并发sink次数。
实际后端的存储可能不期望这么高并发,本身做batch的目的就是希望降低sink次数。
我希望的是按照并发度(比如30并发度)就每次sink30次(或超过30次,因为可能>batchSize,如果都<batchSize,则30个并发都超时sink,也就是一次触发会30次sink)。

yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:04写道:

> 如题,当前flink不支持非keyedStream使用定时器,不清楚有啥解决方法吗?
>
> 目前我实现一个sink,带超时希望用到timerservice。但是不支持。
> 同时不希望使用keyedStream,因为会导致数据不均衡。
>
> 除了引入随机key外还有什么方法吗。
>
Reply | Threaded
Open this post in threaded view
|

Re: 关于非keyedstream使用定时器问题

nobleyd
当然,如果是 randomeKey %30 这样,虽然最终效果差不多,但却导致30个sink batch可能都集中到某几个并发实例上。

yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:22写道:

> 引入随机key最大问题是,本身希望batch方式sink,key太随机压根无法batch。
> 如果randomKey%1024这样分桶到1024的话,也不行,会导致每个bucket中数据量太少,进而基本都是timeout而sink,而不是达到batchSize,换言之,每次sink都会有1024个并发sink次数。
> 实际后端的存储可能不期望这么高并发,本身做batch的目的就是希望降低sink次数。
>
> 我希望的是按照并发度(比如30并发度)就每次sink30次(或超过30次,因为可能>batchSize,如果都<batchSize,则30个并发都超时sink,也就是一次触发会30次sink)。
>
> yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:04写道:
>
>> 如题,当前flink不支持非keyedStream使用定时器,不清楚有啥解决方法吗?
>>
>> 目前我实现一个sink,带超时希望用到timerservice。但是不支持。
>> 同时不希望使用keyedStream,因为会导致数据不均衡。
>>
>> 除了引入随机key外还有什么方法吗。
>>
>
Reply | Threaded
Open this post in threaded view
|

Re: 关于非keyedstream使用定时器问题

kenyore
如果使用一个常量字段作为key呢。是不是就可以实现你要的效果了

yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:24写道:

> 当然,如果是 randomeKey %30 这样,虽然最终效果差不多,但却导致30个sink batch可能都集中到某几个并发实例上。
>
> yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:22写道:
>
> > 引入随机key最大问题是,本身希望batch方式sink,key太随机压根无法batch。
> >
> 如果randomKey%1024这样分桶到1024的话,也不行,会导致每个bucket中数据量太少,进而基本都是timeout而sink,而不是达到batchSize,换言之,每次sink都会有1024个并发sink次数。
> > 实际后端的存储可能不期望这么高并发,本身做batch的目的就是希望降低sink次数。
> >
> >
> 我希望的是按照并发度(比如30并发度)就每次sink30次(或超过30次,因为可能>batchSize,如果都<batchSize,则30个并发都超时sink,也就是一次触发会30次sink)。
> >
> > yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:04写道:
> >
> >> 如题,当前flink不支持非keyedStream使用定时器,不清楚有啥解决方法吗?
> >>
> >> 目前我实现一个sink,带超时希望用到timerservice。但是不支持。
> >> 同时不希望使用keyedStream,因为会导致数据不均衡。
> >>
> >> 除了引入随机key外还有什么方法吗。
> >>
> >
>
Reply | Threaded
Open this post in threaded view
|

Re: 关于非keyedstream使用定时器问题

nobleyd
不行,那不就导致不均衡了。数据得均衡。
1均衡 2 batch 3 timeout
目前这3者依靠flink现有机制比较难实现,当然并不是所以场景都需要这样,比如mysql还需要考虑死锁问题,但对于部分不需要考虑锁的sink,其实不在意相同key是否分发到一起,所以不需要依靠keyedStream,这样能保证1,2,但无法保证3。
使用keyedStream使用随机key(很随机),会保证1,3,但无法有2(因为key太随机,每个key下数据太少)。
使用keyedStream使用随机key %
N,则会保证3,1和2则是看具体数据分布、数据量,以及N的大小都可能有关系。部分场景下很难有合适的参数保证全部3者。

Kenyore Woo <[hidden email]> 于2021年2月15日周一 下午1:09写道:

> 如果使用一个常量字段作为key呢。是不是就可以实现你要的效果了
>
> yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:24写道:
>
> > 当然,如果是 randomeKey %30 这样,虽然最终效果差不多,但却导致30个sink batch可能都集中到某几个并发实例上。
> >
> > yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:22写道:
> >
> > > 引入随机key最大问题是,本身希望batch方式sink,key太随机压根无法batch。
> > >
> >
> 如果randomKey%1024这样分桶到1024的话,也不行,会导致每个bucket中数据量太少,进而基本都是timeout而sink,而不是达到batchSize,换言之,每次sink都会有1024个并发sink次数。
> > > 实际后端的存储可能不期望这么高并发,本身做batch的目的就是希望降低sink次数。
> > >
> > >
> >
> 我希望的是按照并发度(比如30并发度)就每次sink30次(或超过30次,因为可能>batchSize,如果都<batchSize,则30个并发都超时sink,也就是一次触发会30次sink)。
> > >
> > > yidan zhao <[hidden email]> 于2021年2月9日周二 下午3:04写道:
> > >
> > >> 如题,当前flink不支持非keyedStream使用定时器,不清楚有啥解决方法吗?
> > >>
> > >> 目前我实现一个sink,带超时希望用到timerservice。但是不支持。
> > >> 同时不希望使用keyedStream,因为会导致数据不均衡。
> > >>
> > >> 除了引入随机key外还有什么方法吗。
> > >>
> > >
> >
>