Apache flink 密钥流的非平衡处理
我面临一个问题,KeyedStream在工人身上完全是并行的 对于键数接近并行的情况 我的输入记录的范围为0-N。当我使用keyBy时,一些工人处理零键,一些工人处理多个键。这是因为KeyGroupStreamPartitioner中的KeyGroupRangeSignment.assignKeyToParallelOperator对key.hasCode使用杂音哈希并选择通道 我知道partitionCustom可以处理这种情况,但是partitionCustom只返回DataStream,而不是KeyStreamApache flink 密钥流的非平衡处理,apache-flink,Apache Flink,我面临一个问题,KeyedStream在工人身上完全是并行的 对于键数接近并行的情况 我的输入记录的范围为0-N。当我使用keyBy时,一些工人处理零键,一些工人处理多个键。这是因为KeyGroupStreamPartitioner中的KeyGroupRangeSignment.assignKeyToParallelOperator对key.hasCode使用杂音哈希并选择通道 我知道partitionCustom可以处理这种情况,但是partitionCustom只返回DataStream,而
那么,如果没有hack-ish,我能对handler做些什么呢?嗯,这有点像hack-ish,但是请看。我使用了一个定制的RichMap函数,该函数计算出它在其打开调用中是哪个子任务索引,然后使用makeKeyForOperatorIndex创建一个键整数或字符串,作为字段添加,然后用于keyBy。不幸的是,它有点隐蔽,但有一种方法可以将数据流转换为KeyedStream
感谢您的支持,对于makeKeyForOperatorIndex,我也有同样的问题。1。对于参数operatorIndex,是0-N(平行度)?2。如果找不到目标运算符索引,会发生什么情况?3。我使用0-3,并行度是3。控制台输出3>9,13>0,21>4,0。我认为结果应该是1>9,12>0,20>4,0。我的方法有没有做错
DataStream<T> partitioned = input.partitionCustom(...);
KeyedStream<T> keyed = DataStreamUtils.reinterpretAsKeyedStream(partitioned, ...)