keyedstream的不平衡处理

idfiyjo8  于 2021-06-24  发布在  Flink
关注(0)|答案(2)|浏览(493)

我面临一个问题,当keyedstream的数量接近并行时,它在worker上是纯并行的
我的输入记录的范围是0-n。当我使用keyby时,有些工作人员处理零个键,有些工作人员处理多个键。这是因为 KeyGroupRangeAssignment.assignKeyToParallelOperator()KeyGroupStreamPartitioner 对key.hascode使用hash并选择频道
我知道partitioncustom可以处理这种情况,但是partitioncustom只返回datastream,而不是keystream
那么,如果没有黑客,我能对handler做些什么呢

bnlyeluc

bnlyeluc1#

嗯,这有点像黑客,但请参阅makekeyforoperatorindex。我已经习惯了 RichMapFunction 找出它所在的子任务索引 open() 呼叫,然后使用 makeKeyForOperatorIndex 创建一个键(整数或字符串),该键作为字段添加,然后用于 keyBy() .

kmynzznz

kmynzznz2#

不幸的是它有点埋了,但有一种方法可以改变它 DataStream 变成一个 KeyedStream .

DataStream<T> partitioned = input.partitionCustom(...);
KeyedStream<T> keyed = DataStreamUtils.reinterpretAsKeyedStream(partitioned, ...)

相关问题