OperadorChain de análisis del código fuente de Flink1.15

Tabla de contenido

¿Cómo determina Flink si los operadores pueden formar una cadena de operación?

Aquí utilizo el código de recuento de palabras para explicar y analizar.

Resumir:


Este artículo primero resume bajo qué circunstancias los operadores pueden formar una cadena de operación y luego procede paso a paso para determinar realmente isChainable según el código de recuento de palabras para el análisis del código fuente (versión Flink 1.15.2).

¿Cómo determina Flink si los operadores pueden formar una cadena de operación?

  • Cuando se cumplan las siguientes condiciones
  • El borde entrante del operador descendente debe ser 1 y el operador descendente no se puede conectar, unir ni unir.
  • Tanto el operador ascendente como el operador descendente están en el mismo SlotSharingGroup
  • El operador descendente no es nulo o el operador ascendente no es nulo
  •  downStreamOperator no pertenece a la clase YieldingOperatorFactory y el tipo de fuente no es LegacySource
  • upStreamOperator.ChainingStrategy es SIEMPRE, tipo HEAD, HEAD_WITH_SOURCES
  • downStreamOperator.ChainStrategy es SIEMPRE, HEAD_WITH_SOURCES (solo el flujo ascendente es fuente)
  • outputPartitioner es ForwardPartitioner, es decir, la partición aguas abajo del operador es ForwardParttioner
  • ExchangeMode de StreamEdge no está en modo BATCH
  • streamGraph.isChainingEnabled es verdadero y el trabajo no llama a enableChaining()

Aquí utilizo el código de recuento de palabras para explicar y analizar.

 WordCount.java

public class WordCount {
    public static void main(String[] args) throws Exception {
​
        StreamExecutionEnvironment env=
                StreamExecutionEnvironment.getExecutionEnvironment();
​
        env.socketTextStream("localhost",9999)
                .flatMap(new FlatMapFunction<String,Tuple2<String, Integer>>() {
                    @Override
                    public void flatMap(String value, Collector<Tuple2<String, Integer>> out) throws Exception {
                        String[] words=value.split(",");
                        for (String word:words) {
                            out.collect(new Tuple2<>(word,1));
                        }
                    }
                }).keyBy(0)
                .window(TumblingProcessingTimeWindows.of(Time.seconds(10)))
                .sum(1).print();
        env.execute();
    }
}

Realice un juicio isChainable en el método createChain() en StreamingJobGenerator.java

Ingrese el método isChainable (outEdge, streamGraph)

   public static boolean isChainable(StreamEdge edge, StreamGraph streamGraph) {
        StreamNode downStreamVertex = streamGraph.getTargetVertex(edge);
​
        return downStreamVertex.getInEdges().size() == 1 && isChainableInput(edge, streamGraph);
    }
​

Tomando el código de recuento de palabras como ejemplo, el primer borde ingresado es fuente->mapa plano

downStreamVertex: para el StreamNode descendente, que es un mapa plano, determine si el borde entrante del mapa plano es 1. Después de cumplir las condiciones, ingrese isChanableInput (edge, streamGraph)

El método areOperatorChainable() realiza principalmente el juicio ChainingStrategy

En el proceso de fuente->mapa plano, salidaPartitioner=REBALANCE no es una clase ForwardPartitioner, por lo tanto, fuente->mapa plano no es una cadena de operador.

La partición de mapa plano-> ventana es KeyGroupStreamPartitioner, que no es un ForwardPartitioner ni puede formar una operatorChain.

ventana->la partición del fregadero está ADELANTE, que se puede llamar operatorChain

Por supuesto, también puede agregar diferentes grupos para compartir espacios y configurar deshabilitarChaining en el nivel del operador para realizar pruebas.

Resumir:

Cuando el operador ascendente no está en unión, conexión o unión y la partición del operador está en modo Forwardpartitioner, y los operadores ascendentes y descendentes están en el mismo grupo de uso compartido de ranuras. Si no se establece enableChaining, se formará una cadena de operadores.

Supongo que te gusta

Origin blog.csdn.net/qq_24186017/article/details/127027744
Recomendado
Clasificación