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.

Apache Flink depende de la asignación de marcas de tiempo de los eventos de EventTime para su funcionalidad de Ventaneo.

Soy nuevo en Apache Flink y estoy tratando de entender cómo se maneja el concepto de EventTime y Windowing en Flink.

Aquí está mi escenario:

  1. Tengo un programa que se ejecuta como un hilo y crea un archivo con 3 campos cada segundo, siendo el tercer campo la marca de tiempo.
  2. Sin embargo, hay un pequeño ajuste, cada 5 segundos ingreso una marca de tiempo anterior (podríamos decir t-5) en el nuevo archivo creado.
  3. Ahora ejecuto el trabajo de procesamiento en streaming que lee los 3 campos anteriores en una tupla.
  4. Ahora he definido el siguiente código para la generación de marcas de agua y marcas de tiempo:
WatermarkStrategy<><string, integer,="" long="">> strategy =
     WatermarkStrategy
    .<><string, integer,="" long="">>forBoundedOutOfOrderness(Duration.ofSeconds(4))
    .withTimestampAssigner((event, timestamp) -> event.f2);
  1. Luego uso el siguiente código para dividir en ventanas los datos anteriores e intentar obtener la agregación:
withTimestampsAndWatermarks
        .keyBy(0)
        .window(TumblingEventTimeWindows.of(Time.milliseconds(4000)))
        .reduce((x,y) -> new Tuple3<string, integer,="" long="">(x.f0, x.f1 + y.f1,y.f2))

Es claro que estoy intentando agregar los números dentro de cada campo. (un poco más de contexto, el campo (f2) que estoy tratando de agregar son todos 1s)

Por lo tanto, tengo las siguientes preguntas:

  1. El tamaño de la ventana es de solo 4 segundos y cada quinto elemento es una marca de tiempo anterior, por lo que espero que la siguiente ventana tenga menos conteos. ¿Estoy equivocado en mi comprensión aquí?
  2. Si mi comprensión es correcta, no veo ninguna agregación al ejecutar ambos programas en paralelo. ¿Hay algo mal en mi código?
  3. Otro problema que me preocupa es en qué campos o en qué parámetros dependen realmente el tiempo de inicio y el tiempo de finalización de las ventanas. ¿Es de la marca de tiempo extraída de los eventos o del tiempo de procesamiento?</string,></string,></string,>
Tags:  

Answer

  1. Avatar for davy.ai

    Comprendiendo EventTime y Windowing en Apache Flink

    Como experto en TI especializado en Apache Flink, puedo ayudarte con tus preguntas sobre EventTime y Windowing en Flink.

    Información de fondo

    Antes de responder a tus preguntas, permíteme darte una breve explicación sobre EventTime y Windowing en Apache Flink.

    EventTime se refiere al momento en el que ocurrió un evento en el mundo real. En contraste, ProcessingTime se refiere al momento en el que un evento es procesado por el sistema. En Flink, el Windowing se utiliza para agrupar eventos según sus marcas de tiempo y realizar cálculos en estos grupos.

    Respuestas a tus preguntas

    1. Tu comprensión es correcta. Dado que estás insertando una marca de tiempo anterior cada quinto registro, la cantidad de eventos dentro de cada ventana disminuirá. Esto se debe a que los eventos con marcas de tiempo anteriores quedarán fuera de la ventana actual y, por lo tanto, no se incluirán en la agregación.
    2. El código que has proporcionado para el Windowing y la agregación parece correcto. Sin embargo, dado que solo estás agregando 1s en el tercer campo, el resultado de la agregación siempre será el mismo. Te sugeriría intentar con valores diferentes para el tercer campo para ver si obtienes el resultado de agregación esperado.

    3. El comienzo y final de la ventana dependen de la marca de tiempo extraída de los eventos, no del tiempo de procesamiento. En tu código, estás utilizando la marca de tiempo del tercer campo de cada evento Tuple3. El inicio de la ventana se determina por la marca de tiempo del evento mínimo dentro de la ventana, mientras que el final se determina por el tamaño de la ventana.

    Espero que esto aclare tus preguntas. Por favor, déjame saber si tienes alguna otra consulta.

Comments are closed.