在Apache Flink中使用自定义分区,我们为每个要分配给特定任务管理器的记录指定密钥。
考虑我们向所有节点,任务管理员广播数据集。在地图或faltmap中是否有任何时间来获取taskmanagef Id?
答案 0 :(得分:3)
自定义分区程序不会将记录分配给TaskManager,而是分配给后续运算符的特定并行任务实例(TM可以执行同一运算符的多个并行任务实例)。
您可以访问并行任务实例的ID,扩展RichFunction
,例如,扩展RichMapFunction
而不是实现MapFunction
。丰富的功能可用于所有转换。 RichFunction
可以访问RuntimeContext
,告诉您并行任务实例的ID:
public static class MyMapper extends RichMapFunction<Long, Long> {
@Override
public void open(Configuration config) {
int pId = getRuntimeContext().getIndexOfThisSubtask();
}
@Override
public Long map(Long value) throws Exception {
// ...
}
}