es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Se ha detectado una tecla de acceso rápido en el paso ‘ReadMessageFromPubsubSubscription/PubsubUnboundedSource’. Advertencia ocurre en el flujo de datos en tiempo real del pipeline de Dataflow.

Tenemos un flujo de datos que lee mensajes json desde la suscripción Pub/Sub, transforma los mensajes json a tablas y mutaciones de forma separada, y finalmente los escribe en BigQuery y Spanner después de algunas validaciones.

Pero recibimos una advertencia "Se detectó una clave caliente en el paso'ReadMessageFromPubsubSubscription/PubsubUnboundedSource' " dentro del paso PubsubIO. Hay un deterioro en el rendimiento cuando ocurre esta advertencia.

El primer paso del flujo de datos es PubsubIO.readStrings y los siguientes pasos son transformaciones ParDo. No hay GroupBy ni Combine. Estoy confundido por qué está ocurriendo esta "clave caliente". ¿Qué clave se está utilizando dentro de PubsubIO?

Aquí está parte del código.

PCollection<List<Entry>> p1 = p
                .apply("ReadMessageFromPubsubSubscription", PubsubIO.readStrings().fromSubscription(opt.getPubsubSubscriptionPath()))
                .apply(ParDo.of(new ExtractorEntryFromMessage()));
    //la línea que escribe en BigQuery
    p1
            .apply("ConvertTableRow",ParDo.of(new TransformToTableRow()))
            .apply("WriteToBigQuery", BigQueryIO.writeTableRows()
                    .to(opt.getOutputBQPath())
                    .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
                    .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
                    .withCustomGcsTempLocation(opt.getCustomGcsTempLocation());


    //la línea que escribe en Spanner       
    p1
            .apply("Validation1", ParDo.of(new Validation1()))
            .apply("Validation2", ParDo.of(new Validation2()))
            .apply("Validation3", ParDo.of(new Validation3()))
            .apply("WriteToSpanner", ParDo.of(new WriteToSpanner()));
    p.run();

“`

Tags:  

Answer

  1. Avatar for davy.ai

    La advertencia “Se detectó una tecla rápida en el paso ‘ReadMessageFromPubsubSubscription/PubsubUnboundedSource'” indica que una única fuente o clave está causando problemas de rendimiento en la canalización. En este caso, puede deberse a uno o más mensajes de Pub/Sub que se están procesando con mayor frecuencia que otros, lo que lleva a una distribución desigual de la carga de trabajo entre los trabajadores.

    No está claro qué clave se está utilizando dentro de PubsubIO, ya que Pub/Sub no utiliza claves de forma predeterminada. Sin embargo, es posible que la canalización esté creando inadvertidamente claves rápidas mediante la agrupación de mensajes según un atributo común, como la marca de tiempo del mensaje o el tema.

    Para resolver la advertencia y mejorar el rendimiento de la canalización, puede ser necesario ajustar la distribución de los datos de entrada dividiendo los mensajes en varias particiones de suscripción o reduciendo el número de mensajes de Pub/Sub que se leen a la vez. Además, optimizar las transformaciones de ParDo de la canalización para reducir la cantidad de procesamiento por mensaje también puede ayudar a aliviar los problemas de rendimiento.

Comments are closed.