Flink debe conocer el curso clásico 4: tolerancia a fallas en Flink

Introducción:  Este artículo es compartido por Apache Flink PMC, el experto técnico senior de Alibaba Li Yu. Principalmente presenta el principio del mecanismo de tolerancia a fallas de Flink desde cuatro aspectos: computación de flujo con estado, instantáneas consistentes globalmente, mecanismo de tolerancia a fallas de Flink y administración de estado de Flink.

Autor | Li Yu

Compartido por: Apache Flink PMC, experto técnico senior de Alibaba, Li Yu, comparte este artículo. Se presenta principalmente el principio del mecanismo de tolerancia a fallas de Flink. El esquema del contenido es el siguiente:

  1. Computación de flujo con estado
  2. Instantánea globalmente consistente
  3. Mecanismo de tolerancia a fallas de Flink
  4. Gestión estatal de Flink

1. Computación de flujo con estado

Streaming de computación

Slide04.png

Stream computing significa que hay una fuente de datos que puede enviar mensajes continuamente y, al mismo tiempo, hay un programa residente que ejecuta el código. Después de recibir un mensaje de la fuente de datos, lo procesará y luego enviará el resultado a el río abajo.

Computación de flujo distribuido

Diapositiva 05.png

La computación de flujo distribuido se refiere a dividir el flujo de entrada de cierta manera y luego usar múltiples instancias distribuidas para procesar el flujo.

Estado en la computación de flujo

Diapositiva 06.png

La informática se puede dividir en con estado y sin estado. La informática sin estado solo necesita procesar un único evento, mientras que la informática con estado necesita registrar y procesar varios eventos.

Dé un ejemplo sencillo. Por ejemplo, un evento consta de dos partes: ID de evento y valor de evento. Si la lógica de procesamiento es analizar y generar su valor de evento cada vez que se obtiene un evento, entonces este es un cálculo sin estado; por el contrario, si cada vez que se obtiene un evento Se obtiene el estado, después de analizar su valor, es necesario compararlo con el valor del evento anterior y solo se genera cuando es mayor que el valor del evento anterior. Este es un cálculo con estado.

Diapositiva 07.png

Hay muchos estados en la informática de flujo. Por ejemplo, en el escenario de deduplicación, se registran todas las claves primarias; o en el cálculo de la ventana, los datos que ingresaron a la ventana pero no se activaron, este es también el estado de la computación en flujo; en el escenario de aprendizaje automático / aprendizaje profundo , el modelo entrenado y Los datos de parámetros son el estado de la computación de flujo.

2. Instantánea coherente a nivel mundial

Las instantáneas coherentes a nivel mundial son un mecanismo que se puede utilizar para la copia de seguridad y la recuperación de fallos de los sistemas distribuidos.

Instantánea global

¿Qué es una instantánea global?

Diapositiva 11.png

La instantánea global es, en primer lugar, una aplicación distribuida, que tiene múltiples procesos distribuidos en múltiples servidores; en segundo lugar, tiene su propia lógica de procesamiento y estado dentro de la aplicación; tercero, las aplicaciones pueden comunicarse entre sí; cuarto, en Este tipo de aplicación distribuida tiene internos el estado y el hardware pueden comunicarse. El estado global en un momento determinado se denomina instantánea global.

Por qué se necesita una instantánea global

Diapositiva 12.png

  • En primer lugar, utilícelo como punto de control, puede realizar periódicamente una copia de seguridad del estado global y, cuando la aplicación falla, puede utilizarse para restaurar;
  • En segundo lugar, realice la detección de interbloqueo. Después de tomar la instantánea, el programa actual continúa ejecutándose, y luego la instantánea se puede analizar para ver si la aplicación está en un estado de interbloqueo y, de ser así, se puede procesar en consecuencia.

Ejemplo de instantánea global

La siguiente figura es un ejemplo de una instantánea global en un sistema distribuido.

Diapositiva 16.png

P1 y P2 son dos procesos, y existen conductos para enviar mensajes entre ellos, que son C12 y C21. Para el proceso P1, C12 es el canal a través del cual envía mensajes, llamado canal de salida; C21 es el canal a través del cual recibe mensajes, llamado canal de entrada.

A excepción de las tuberías, cada proceso tiene un estado local. Por ejemplo, en la memoria de cada proceso de P1 y P2, hay tres variables XYZ y sus valores correspondientes. Entonces, el estado local de los procesos P1 y P2 y el estado de la canalización para enviar mensajes entre ellos es un estado global inicial, que también se puede llamar una instantánea global.

Diapositiva 17.png

Suponga que P1 envía un mensaje a P2 y le pide a P2 que cambie el valor de estado de x de 4 a 7, pero este mensaje está en proceso y aún no ha llegado a P2. Este estado también es una instantánea global.

Diapositiva 18.png

A continuación, P2 recibió el mensaje de P1, pero aún no ha sido procesado, este estado también es una instantánea global.

Diapositiva 19.png

Finalmente, P2, que recibió el mensaje, cambió el valor de X local de 4 a 7, que también es una instantánea global.

Entonces, cuando ocurre un evento, el estado global cambiará. Los eventos incluyen procesos que envían mensajes, procesos que reciben mensajes y procesos que modifican su propio estado.

2. Instantáneas coherentes a nivel mundial

Diapositiva 20.png

Si hay dos eventos, ayb, en tiempo absoluto, si a ocurre antes de que b y b se incluyan en la instantánea, entonces a también se incluye en la instantánea. Una instantánea global que cumple esta condición se denomina instantánea globalmente coherente.

2.1 Método de implementación de una instantánea coherente a nivel mundial

Diapositiva 22.png

La sincronización del reloj no puede lograr instantáneas de coherencia global; aunque se puede lograr la sincronización global, sus deficiencias también son muy obvias, detendrá todas las aplicaciones y afectará el rendimiento global.

3. Algoritmo de instantánea de coherencia global asincrónica - Chandy-Lamport

El algoritmo de instantánea asíncrono y coherente globalmente Chandy-Lamport puede lograr una instantánea coherente globalmente sin afectar el funcionamiento de la aplicación.

Los requisitos del sistema de Chandy-Lamport son los siguientes:

  • Primero, no afecta el funcionamiento de la aplicación, es decir, no afecta el envío y recepción de mensajes, y no es necesario detener la aplicación;
  • En segundo lugar, cada proceso puede registrar el estado local;
  • En tercer lugar, el estado registrado se puede recopilar de forma distribuida;
  • Cuarto, cualquier proceso puede iniciar una instantánea

Al mismo tiempo, existe otro requisito previo para que se pueda ejecutar el algoritmo de Chandy-Lamport: los mensajes son ordenados y no repetitivos, y se puede garantizar la fiabilidad de los mensajes.

3.1 Flujo del algoritmo de Chandy-Lamport

Diapositiva 24.png

El flujo del algoritmo de Chandy-Lamport se divide principalmente en tres partes: iniciar instantánea, instantánea de ejecución distribuida y terminar instantánea.

Iniciar una instantánea

Cualquier proceso puede iniciar una instantánea. Como se muestra en la figura siguiente, cuando P1 inicia una instantánea, el primer paso es registrar el estado local, es decir, tomar una instantánea del local y luego enviar inmediatamente un mensaje de marcador a todos sus canales de salida. intervalo de tiempo en el medio. El mensaje de marcador es un mensaje especial, que es diferente de los mensajes que se transmiten entre aplicaciones.

Diapositiva 25.png

Después de enviar el mensaje Marker, P1 comenzará a grabar todos los mensajes del canal de entrada, que es el mensaje de la tubería C21 que se muestra en la figura.

Instantánea de ejecución distribuida

Como se muestra en la figura siguiente, primero asuma que cuando Pi recibe un mensaje de marcador de Cki, es decir, un mensaje de marcador enviado por Pk a Pi. Se puede ver en dos situaciones:

Diapositiva 26.png

El primer caso: Este es el primer mensaje marcador que recibe Pi desde otras tuberías. Primero registrará el estado local y luego marcará la tubería C12 como vacía. Es decir, si el mensaje se envía desde P1 más tarde, not Se incluye en esta instantánea y, al mismo tiempo, envía inmediatamente un mensaje de marcador a todos sus canales de salida. Finalmente, comience a grabar mensajes de todos los canales de entrada excepto Cki.

Diapositiva 27.png

Como se mencionó anteriormente, los mensajes de Cki no se incluyen en la instantánea en tiempo real, pero los mensajes en tiempo real seguirán apareciendo, por lo que el segundo caso es que si Pi ha recibido mensajes de marcador antes, dejará de grabar mensajes de Cki y también grabará todos. Mensajes de Cki previamente grabados. El mensaje se guarda como el estado final de Cki en esta instantánea.

Terminar instantánea

Hay dos condiciones para finalizar una instantánea:

  • Primero, todos los procesos han recibido el mensaje de marcador y lo han registrado en la instantánea local;
  • En segundo lugar, todos los procesos recibieron mensajes de marcadores de sus n-1 canales de entrada y registraron el estado de la tubería.

Diapositiva 28.png

Cuando finaliza la instantánea, el recopilador de instantáneas (servidor central) comienza a recopilar cada parte de la instantánea para formar una instantánea coherente globalmente.

Pantalla de muestra

En el ejemplo de la figura siguiente, algunos estados ocurren internamente, como A, que no tiene interacción con otros procesos. El estado interno es que P1 se envía un mensaje a sí mismo, y se puede pensar en A como C11 = [A->].

Diapositiva 29.png

¿Cómo se implementa el algoritmo de instantáneas coherente globalmente de Chandy-Lamport?

Diapositiva 30.png

Suponga que una instantánea se inicia desde p1. Cuando inicia una instantánea, primero toma una instantánea del estado local, que se llama S1, y luego envía inmediatamente mensajes de marcador a todos sus canales de salida, a saber, P2 y P3, y luego registra El mensaje del canal de entrada es el mensaje de P2 y P3 y de sí mismo.

Diapositiva 31.png

Como se muestra en la leyenda, el eje vertical es el tiempo absoluto. Según el tiempo absoluto, ¿por qué hay una diferencia de tiempo entre P3 y P2 cuando reciben el mensaje de marcador? Porque si se trata de un proceso distribuido en un entorno físico real, las condiciones de la red entre diferentes nodos son diferentes, lo que dará lugar a diferencias en el tiempo de entrega de los mensajes.

P3 recibe primero el mensaje de marcador y es el primer mensaje de marcador que recibe. Después de recibir el mensaje, primero tomará una instantánea del estado local, luego marcará la tubería C13 como cercana y, al mismo tiempo, comenzará a enviar mensajes de marcadores a todos sus canales de salida, y finalmente enviará todos los canales de entrada desde todas las entradas. Canales excepto C13 El mensaje comienza a grabarse.

Slide32.png

Es P1 el que recibe la información de marcador enviada por P3, pero este no es el primer marcador que recibe. Cerrará inmediatamente la tubería del canal C31 y tomará el mensaje de registro actual como una instantánea de este canal, y luego lo recibirá de Las noticias de P3 no se actualizarán en este estado de instantánea.

Diapositiva 33.png

A continuación, P2 recibe un mensaje de P3, que es el primer mensaje marcador que recibe. Después de recibir el mensaje, primero toma una instantánea del estado local, luego marca la tubería C32 como cercana y, al mismo tiempo, comienza a enviar mensajes de marcadores a todos sus canales de salida, y finalmente tomará una instantánea de todos los canales de entrada. excepto C32 El mensaje comienza a grabarse.

Diapositiva 34.png

Veamos P2 recibiendo el mensaje de P1. Este no es el primer mensaje de marcador recibido por P2, por lo que cerrará todos los canales de entrada y registrará el estado del canal.

Diapositiva 35.png

A continuación, veamos que P1 recibe un mensaje de P2. Este no es el primer mensaje que recibe. Luego cerrará todos los canales de entrada y usará el mensaje grabado como estado. Luego hay dos estados, uno es C11, que es un mensaje enviado a usted mismo; el otro es C21, que es enviado a P1D por H en P2.

Diapositiva 36.png

En el último momento, P3 recibe un mensaje de P2, que no es el primer mensaje que recibe, y la operación es la misma que la descrita anteriormente. Durante este período, P3 tiene un evento J localmente y también tomará J como su estado.

Diapositiva 37.png

Cuando todos los procesos han registrado el estado local y todos los conductos de entrada de cada proceso se han cerrado, se termina la instantánea de coherencia global, es decir, se completa el registro del estado global del punto pasado en el tiempo.

3.3 La relación entre Chandy-Lamport y Flink

Flink es un sistema distribuido, por lo que Flink utilizará una instantánea coherente globalmente para formar puntos de control para respaldar la recuperación de fallas. Las principales diferencias entre el algoritmo de instantánea asíncrona globalmente consistente de Flink y el algoritmo de Chandy-Lamport son las siguientes:

  • Primero, Chandy-Lamput admite gráficos fuertemente conectados, mientras que Flink admite gráficos débilmente conectados;
  • En segundo lugar, Flink utiliza el algoritmo de instantáneas asíncronas personalizadas de Chandy-Lamput;
  • En tercer lugar, el algoritmo de instantáneas asincrónicas de Flink no necesita almacenar el estado del canal en escenarios DAG, lo que reduce en gran medida el espacio de almacenamiento de instantáneas.

Tres, el mecanismo de tolerancia a fallas de Flink

Diapositiva 40.png

La tolerancia a fallas significa restaurar el estado anterior al error. Hay tres tipos de garantías de coherencia tolerantes a fallos de la informática de flujo, a saber: Exactamente una vez, Al menos una vez y Como máximo una vez.

  • Exactamente una vez significa que cada evento tendrá un impacto en el estado solo una vez. El "una vez" aquí no es estricto de un extremo a otro, sino solo un procesamiento dentro de Flink, excluyendo el procesamiento de origen y receptor.
  • Al menos una vez significa que cada evento afectará al estado al menos una vez, es decir, existe la posibilidad de un procesamiento repetido.
  • Como máximo una vez significa que cada evento afectará al estado como máximo una vez, es decir, el estado puede perderse cuando se produce un error.

Exactamente una vez de principio a fin

Exactamente una vez significa que el resultado del trabajo siempre es correcto, pero es probable que se produzca varias veces, por lo que su requisito es tener una fuente reproducible.
De extremo a extremo Exactamente una vez significa que el resultado del trabajo es correcto y solo se emitirá una vez. Además de una fuente reproducible, también requiere un receptor transaccional y la capacidad de recibir resultados de salida idempotentes.

Tolerancia a fallas del estado de Flink

Muchos escenarios requieren la semántica de Exactamente una vez, es decir, procesar y solo procesar una vez. ¿Cómo asegurar la semántica?

Método tolerante a fallas Exactly Once para escenarios simples

El escenario simple es el que se muestra en la figura siguiente: el método consiste en registrar el estado local y registrar el desplazamiento de la fuente, es decir, la ubicación del registro de eventos.

Diapositiva 43.png
Diapositiva 44.png
Slide45.png

Estado de tolerancia a fallos en escenarios distribuidos

Si se trata de un escenario distribuido, necesitamos generar una instantánea coherente globalmente de múltiples operadores con estados locales sin interrumpir la operación. La topología de trabajo de la escena distribuida de Flink es especial. Es un gráfico acíclico dirigido y débilmente conectado. Puede usar un Chandy-Lamport personalizado, es decir, solo registra todas las compensaciones de entrada y el estado de cada operador, y se basa en la fuente rebobinable (puede ser La fuente de retroceso se puede leer un poco antes a través del desplazamiento), por lo que no es necesario almacenar el estado del canal, lo que puede ahorrar mucho espacio de almacenamiento en presencia de lógica de agregación.

Diapositiva 49.png

Finalmente, restaurar es restablecer la ubicación de la fuente de datos, y luego cada operador restaura el estado desde el punto de control.

3. Método de instantáneas distribuidas de Flink

Diapositiva 50.png

Primero, inserte una barrera de Checkpoint en el flujo de datos de origen, que es el mensaje de marcador en el algoritmo de Chandy-Lamport mencionado anteriormente. Diferentes barreras de Checkpoint dividirán naturalmente el flujo en múltiples segmentos, y cada segmento contiene datos de Checkpoint ;

Diapositiva 51.png

Hay un Coordinador global en Flink. A diferencia de Chandy-Lamport, que puede iniciar una instantánea de cualquier proceso, este Coordinador centralizado inyectará la barrera de Checkpoint en cada fuente y luego iniciará la instantánea. Cuando cada nodo recibe la barrera, debido a que no almacena el estado del canal en Flink, solo necesita almacenar el estado local.

Slide52.png

Después de completar el Checkpoint, cada concurrencia de cada operador enviará un mensaje de confirmación al Coordinador Cuando los mensajes de confirmación de todas las tareas son recibidos por el Checkpoint Coordinator, la instantánea termina.

4. Demostración del proceso

Como se muestra en la figura siguiente, suponiendo que el punto de control N se inyecte en la fuente, la fuente primero registrará el desplazamiento de la partición que está procesando.

Diapositiva 53.png

A medida que pasa el tiempo, enviará la barrera Checkpoint a dos downstreams concurrentes.Cuando la barrera alcance dos concurrencias, las dos concurrencias registrarán su estado local en el Checkpoint respectivamente:

Finalmente, la barrera alcanza la subtarea final y la instantánea está completa.

Diapositiva 54.png

Esta es una demostración de escenario relativamente simple. Cada operador tiene solo un flujo de entrada. Veamos el escenario más complicado en la figura siguiente, donde el operador tiene múltiples flujos de entrada.

Diapositiva 62.png

Cuando el operador tiene múltiples entradas, las barreras deben alinearse. ¿Cómo alinear la barrera? Como se muestra en la figura siguiente, en el estado original de la izquierda, cuando llega una de las barreras, algunas barreras del otro comando de barrera no han llegado a la tubería. En este momento, se garantiza que el flujo que llegó primero es Exactamente una vez. Bloquee directamente y luego espere el procesamiento de datos de otra secuencia. Cuando llegue otra transmisión, la transmisión anterior se desbloqueará y la barrera se enviará al operador al mismo tiempo.

Diapositiva 67.png

En este proceso, el efecto de bloquear una de las corrientes es hacer que produzca contrapresión. La alineación de la barrera provocará contrapresión y suspenderá el procesamiento de datos del operador.

Si la canalización de datos que ha recibido la barrera no se bloquea durante el proceso de alineación y los datos continúan entrando, los datos que pertenecen al siguiente punto de control se incluyen en el punto de control actual. Una vez que se produce una falla, la fuente se rebobina , y parte de los datos se rebobinarán. Habrá un procesamiento repetido, que es al menos una vez. Si puede recibir al menos una vez, puede elegir otros efectos secundarios que pueden evitar la alineación de la barrera. Además, las instantáneas asincrónicas también se pueden utilizar para minimizar las paradas de tareas y admitir varios puntos de control al mismo tiempo.

5. Disparador de instantáneas

Diapositiva 69.png

La carga síncrona de instantáneas locales al sistema requiere un mecanismo estatal de copia en escritura.

Si el procesamiento de datos se restaura después de una instantánea de la información de metadatos, ¿cómo garantizar que la lógica de la aplicación restaurada no modifique los datos que se cargan durante el proceso de carga de datos? De hecho, el procesamiento de los backends de almacenamiento en diferentes estados es diferente. El backend del montón activará la copia en escritura de los datos. Para el backend de RocksDB, la función LSM puede garantizar que los datos que han sido instantáneos no se modifiquen.

Diapositiva 70.png

Cuarto, la gestión estatal de Flink

1. Gestión del estado de Flink

Diapositiva 73.png

En primer lugar, debe definir un estado. En el ejemplo siguiente, defina primero un estado de valor.

Al definir el estado, se debe proporcionar la siguiente información:

  • ID de identificación de estado
  • Tipo de datos de estado
  • Estado de registro de backend de estado local
  • Estado local de lectura y escritura del backend

2.Flink de estado de backend

También llamado backend de estado, hay dos backend de estado de Flink;

Slide77.png

  • El primer tipo, JVM Heap, los datos que contiene existen en forma de objetos Java, y la lectura y escritura también se realizan en forma de objetos, por lo que la velocidad es muy rápida. Pero también hay dos inconvenientes: el primer inconveniente, el espacio requerido para el almacenamiento de objetos es muchas veces el tamaño de los datos serializados y comprimidos en el disco, por lo que ocupa mucho espacio en la memoria; el segundo inconveniente, aunque para leer y escribir No es necesario realizar la serialización, pero debe serializarse al formar una instantánea, por lo que su proceso de instantánea asincrónica será más lento.

Slide80.png

  • El segundo tipo es RocksDB. Este tipo necesita ser serializado al leer y escribir, por lo que su velocidad de lectura y escritura es relativamente lenta. Pero tiene una ventaja. La estructura de datos basada en LSM formará un archivo sst después de la instantánea. Su proceso de punto de control asincrónico es el proceso de copia de archivos, y el consumo de CPU será relativamente bajo.

Supongo que te gusta

Origin blog.csdn.net/weixin_43970890/article/details/115011836
Recomendado
Clasificación