当前位置: 首页 > 知识库问答 >
问题:

Flink:如何理解并行运算符的实例有多少?

贺佑运
2023-03-14

然后需要对图进行处理/搜索,并可能向下游发出事件。我希望图运算符能够水平伸缩,即每个并行运算符处理图的一个子集(但这将要求每个运算符能够访问整个图)。我感兴趣的是如何将负载分散到所有并行运算符上。

// key input events for processing by key
KeyedStream<MyEvent> keyedStream = myInputStream.keyBy(...);
// process each keyed input stream and produce output events that need to be combined into a graph
SingleOutputStreamOperator<MyGraphEvent> graphStream = keyedStream.process(...));
// recombine into a single graph operator via broadcast(), then process
DataStream<MyOutputEvent> output = graphStream.broadcast().flatMap(new MyGraphFlatmapFunction());

我想我可以使用broadcast()来确保每个键控操作符的所有输出都发送给每个下游操作符。

MyGraphFlatMapFunction获取一个MyGraphEvent对象流,在内部状态中创建一个图,并可选地生成一个MyOutputEvent对象流。我希望每个并行运算符处理图的一个子集。不管存在的运算符的并行实例的数量如何,我都希望处理所有的图(这意味着我不希望每个运算符只处理图的某个随机子集),也不希望并行运算符处理图的相同部分(没有重复处理)。

我希望能够在MyGraphFlatMapFunction中执行以下操作:

int index;
// I want to get the operator instance number & the number of parallel operators in the stream topology
int operatorIndex = getOperatorIndex();
int operatorCount = getTotalNumberOfParallelOperators();
// process every nth object
for (index = 0; index < someCollection.size(); index++) {
    if (index % operatorCount == operatorIndex) {
        // do some processing
    } else {
        continue;
    }
}

有没有办法知道并行运算符存在多少个实例,这是哪个运算符?有没有别的方法可以达到我所追求的目标?

共有1个答案

拓拔弘扬
2023-03-14

如果使用RichFlatMapFunction,则可以通过GetRuntimeContext()访问RuntimeContextruntimeContext具有您需要的两种方法:

  • GetNumberOfParallelSubTasks()
  • GetIndexOfThisSubTask()

希望这有帮助。

 类似资料:
  • 问题内容: 如何理解java三元运算符 : ? ? 问题答案: 是的,它是的简写形式 它称为条件运算符。许多人(错误地)将其称为三元运算符,因为它是Java,C,C ++以及可能还有许多其他语言中唯一的三元运算符。但是理论上可以有另一个三元运算符,而只能有一个条件运算符。 官方名称在Java语言规范中给出: 条件运算符 使用一个表达式的布尔值来确定应评估另外两个表达式中的哪一个。 请注意,两个分支

  • 我读到了四个Kinesis流的数据。每个流中的数据都是不同的数据类型。读取所有四个流后,我分配时间戳和水印,并聚合来自每个流的数据。四个聚合的结果都是使用相同的泛型对象输出的。我想合并四个流的结果,这样我就可以将合并后的流发送到一个ProcessFunction。这基本上允许我像使用CoProcessFunction一样使用ProcessFunction,但我可以处理来自两个以上流的数据(在本例中

  • 有2个指定了时间戳的数据流和定义如下的水印生成器。 当这两个流在一个操作符中连接时,来自streamA或streamB的最小水印作为连接操作符的水印。 组合B运算符的水印是A或B中的最小值。基于C类元素是否标记为延迟。 但是,由于我们没有附加任何分配给的时间戳,这是否意味着运算符中的任何元素都没有被标记为延迟?因此在C上窗口不会有任何延迟记录被删除? 假设我们将分配的时间戳和水印生成器附加到C,如

  • 本文向大家介绍如何在Windows中运行多个MySQL实例详解,包括了如何在Windows中运行多个MySQL实例详解的使用技巧和注意事项,需要的朋友参考一下 前言 在Windows中可以从命令行为每个实例使用合适的操作参数来手动启动多个MySQL实例或者通过以Windows服务方式来安装多个服务器来运行。 1.在windows中MySQL的base目录中创建两个新实例的数据目录data3307,

  • 主要内容:实例位运算符 Erlang提供四个位运算符。以下是在 Erlang 可用的位运算符。 S.No. 操作符 & 描述 1 band 位 “and”运算符 2 bor 位 “or” 运算符 3 bxor 位 “xor”或异运算符 4 bnot 按位反运算符 以下是这些运算符真值表显示 - p q p & q p | q p ^ q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1

  • 我有以下情况 有2个虚拟机正在向Kafka发送流,CEP引擎正在接收这些流,当单个流满足特定条件时,会生成警告。 目前,CEP正在检查两条流上的相同情况(当心率 但我想对这两个流使用不同的条件。例如,如果 如何实现这一点?我需要在同一环境中创建多个流环境或多个模式吗?