定时器需要keyedStateBackend,所以必须是KeyedStream才能使用定时器。
如果让上游数据不改变subTask可以考虑DataStreamUtils#reinterpretAsKeyedStream方法,这是一个实验功能,见[1]。需要保证原来的DataStream已经是按key分组过的。


[1] 
https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/dev/datastream/experimental/














在 2022-09-08 16:31:36,"junjie.m...@goupwith.com" <junjie.m...@goupwith.com> 写道:
>
>请问ProcessFunction中有onTimer方法,但是使用时提示必须是KeyedStream才能使用定时器,是否有不用转keyedStream就可以使用Timer的Function类。
>
> 
>发件人: r pp
>发送时间: 2022-09-08 16:14
>收件人: user-zh
>主题: Re: 关于keyby()如何保留原并行度的问题
>keyby() 时,还没有选好分组呢,这个只是告诉flink 要根据什么分组,所有也没有Runtime...
> 
>junjie.m...@goupwith.com <junjie.m...@goupwith.com> 于2022年9月8日周四 14:17写道:
> 
>> hi:
>> flink keyby()时能否获取到subTask的编号,根据编号分组,让上游数据可以继续保持原有的数据依然在同一个subTask中进行后续计算。
>>
>> 在AbstractRichFunction类中this.getRuntimeContext().getIndexOfThisSubtask()可以获取编号,但是keyby()的KeySelector类中没有getRuntimeContext()方法。
>>
>>
> 
>-- 
>Best,
>  pp

回复