Sistema ETL en tiempo real altamente confiable basado en Flink

GIAC (GLOBAL INTERNET ARCHITECTURE CONFERENCE) es una conferencia anual de arquitectura técnica para arquitectos, líderes técnicos y profesionales técnicos de alto nivel lanzada por la comunidad de tecnología de arquitectura de alta disponibilidad y msup que se ha centrado durante mucho tiempo en la tecnología y la arquitectura de Internet. Es la tecnología más grande de China Una de las reuniones.

En la sexta conferencia GIAC de este año, sobre el tema de la arquitectura de big data, Shi Xiaogang , jefe de computación en tiempo real en el departamento de plataforma de datos de Tencent, pronunció un discurso de apertura sobre "Sistema ETL en tiempo real altamente confiable basado en Flink". El siguiente es un registro de los discursos de los invitados:

Shi Xiaogang se graduó de la Universidad de Pekín con un doctorado y es el responsable del proyecto Apache Flink. Publicó muchos artículos en las principales conferencias y revistas internacionales como SIGMOD, TODS e IPDPS, y fue miembro del comité de programa de KDD, DASFAA y otras importantes conferencias internacionales.

Plataforma informática en tiempo real Oceanus

En los últimos años, la informática en tiempo real se ha utilizado ampliamente en Tencent. Con el fin de mejorar la eficiencia de la integración continua y la liberación continua de las tareas de computación de flujo de usuarios, el equipo de big data de Tencent creó Oceanus alrededor de Flink en 2017, una plataforma de computación visual en tiempo real integral que integra desarrollo, pruebas, implementación, operación y mantenimiento.

Oceanus proporciona tres métodos de desarrollo de aplicaciones diferentes, incluidos Canvas, SQL y Jar, para satisfacer las necesidades de desarrollo de diferentes usuarios. A través de estos tres métodos, los usuarios en diferentes escenarios de aplicaciones no necesitan comprender los detalles técnicos del marco subyacente y pueden desarrollar rápidamente tareas informáticas en tiempo real, reduciendo el umbral para el desarrollo del usuario.

Después de completar el desarrollo del trabajo, los usuarios pueden probar, configurar e implementar el trabajo a través de Oceanus. Oceanus proporciona una serie de herramientas para programas de usuario para ayudar en las pruebas de trabajo. Los usuarios pueden utilizar la función de generación de una sola tecla proporcionada por Oceanus para generar datos de prueba o cargar sus propios datos de prueba a Oceanus y verificar la exactitud de la lógica de la aplicación comparando el resultado esperado con el resultado real. Oceanus se basa en el sistema de programación de recursos interno de Tencent, Gaia, para la gestión de recursos y la implementación de trabajos. Los usuarios pueden configurar la CPU y los recursos de memoria requeridos por el trabajo a través de Oceanus y especificar el clúster que el trabajo debe implementar. Una vez que el usuario completa la configuración, Oceanus solicitará a Gaia los recursos correspondientes y enviará el trabajo a Gaia para que lo ejecute.

Oceanus recopila varios indicadores operativos cuando los trabajos de Flink se están ejecutando, incluida la memoria, E / S y GC de Task Manger. A través de estos ricos indicadores operativos, los usuarios pueden tener una buena comprensión del estado de ejecución de la aplicación y pueden ayudar a los usuarios a localizar problemas de manera oportuna cuando ocurren anomalías. El personal de operación y mantenimiento puede utilizar estos indicadores recopilados para establecer estrategias de alarma e implementar operaciones refinadas.

Además de Oceanus, Tencent Big Data también proporciona soporte basado en escenas para tareas informáticas comunes en tiempo real, como ETL, monitoreo de alarmas y aprendizaje en línea. Por ejemplo, Oceanus-ML proporciona aprendizaje automático en línea de un extremo a otro, que cubre todo el proceso de aprendizaje automático de acceso a datos, procesamiento de datos, ingeniería de funciones, entrenamiento de algoritmos, evaluación de modelos e implementación de modelos. A través de Oceanus-ML, los usuarios pueden usar fácilmente funciones completas de procesamiento de datos y ricos algoritmos de aprendizaje en línea para crear sus propias tareas de aprendizaje en línea, completar fácilmente el entrenamiento y la evaluación de modelos e implementar modelos con un solo clic.

Para escenarios ETL, Oceanus también proporciona productos Oceanus-ETL para ayudar a los usuarios a importar datos recopilados en aplicaciones y productos al almacén de datos en tiempo real. En la actualidad, el equipo de big data de Tencent proporciona servicios de acceso a datos para las empresas internas de Tencent, incluidas WeChat, QQ Music y Tencent Games. La cantidad de mensajes procesados ​​por día supera los 40 billones y el valor máximo de acceso por segundo supera los 4 Mil millones.

Plataforma de acceso a datos en tiempo real Oceanus-ETL

Tencent Big Data comenzó a trabajar en el acceso a los datos ya en 2012 y construyó la primera generación de Tencent Data Bank (TDBank) basada en Storm, que se convirtió en la primera línea de la plataforma Tencent Big Data, proporcionando documentos y noticias. Múltiples métodos de acceso, como bases de datos y bases de datos, unifican el portal de acceso a los datos y proporcionan una distribución eficiente de los datos distribuidos en tiempo real.

En 2017, Tencent Big Data reestructuró el acceso a datos de TDBank a través de Flink basándose en las ventajas de Flink en facilidad de uso, confiabilidad y rendimiento. En comparación con Storm, Flink proporciona más soporte para el estado. Por un lado, Flink guarda el estado del programa en la memoria local o RocksDB. Los usuarios no necesitan acceder de forma remota a los datos del estado a través de la red, por lo que se puede obtener un mejor desempeño laboral. Por otro lado, Flink proporciona un mecanismo de punto de control eficiente y liviano a través del algoritmo de Chandy-Lamport, que puede garantizar que la semántica de procesamiento de datos de Exactly Once y At-Less Once aún se pueda lograr en caso de falla.

Con el continuo aumento en la escala del negocio de Tencent, se han impuesto mayores requisitos al acceso a los datos.

  • Asegurar la semántica de un extremo a otro de "una y solo una vez" y "fuerte coherencia"

  • Asegúrese de que las transacciones ACID estén separadas de las de lectura y escritura para evitar errores como lecturas sucias en sentido descendente

  • Soporte para corrección de datos y cambios de formato.

Para cumplir con los requisitos anteriores, presentamos Iceberg este año para brindar servicios de acceso a datos más confiables y poderosos a través del mecanismo de transacción ACID y las capacidades de actualización incremental proporcionadas por Iceberg.

Implemente la transmisión de extremo a extremo Exactly Once basada en Flink

Flink usa el mecanismo Checkpoint para hacer una copia de seguridad y restaurar el estado de la tarea. En caso de falla de una tarea, la tarea se puede restaurar desde el último estado de copia de seguridad sin tener que volver a ejecutarla desde el principio. A través del mecanismo de punto de control, Flink puede garantizar que la transmisión de datos Exactly Once todavía se puede lograr cuando ocurre una falla.

Sin embargo, en todo el enlace de acceso a datos, además de Flink, también incluye middleware ascendente y almacenes de datos descendentes. Confiar solo en el mecanismo de punto de control de Flink solo puede garantizar la transmisión de datos de Exactly Once dentro del trabajo de Flink, pero no puede garantizar la semántica de transmisión de Exactly Once de un extremo a otro en todo el enlace de acceso a datos. Si escribimos los datos recibidos por Flink directamente en el sistema de almacenamiento descendente, cuando Flink falla y se recupera de la falla, los datos escritos en el sistema de almacenamiento descendente después del último punto de control se repetirán, lo que dará como resultado datos posteriores. Ocurrió un error en el análisis.

Con el fin de garantizar la transmisión de datos de extremo a extremo Exactly Once, TDBank utiliza el mecanismo de punto de control de Flink para implementar un protocolo de envío de dos fases, y agrega y reconcilia los indicadores generados por cada enlace de acceso a datos para garantizar datos de extremo a extremo. Fiabilidad de la transmisión.

Para asegurar el enlace de datos exactamente una vez, primero escribimos los datos recibidos por Flink en un directorio temporal y guardamos la lista de archivos escrita. Cuando se ejecuta el punto de control, guardaremos la lista de estos archivos en el punto de control y lo registraremos. Cuando se complete el punto de control, Flink notificará a todos los nodos. En este momento, estos nodos moverán los archivos guardados en el punto de control al directorio oficial.

En esta implementación, Flink usa el mecanismo de punto de control existente para implementar un mecanismo de compromiso de dos fases. Todos los nodos realizan operaciones de confirmación previa al realizar el punto de control y escriben todos los datos en un almacenamiento distribuido confiable. Cuando se completa el punto de control en JobManager, se considera que la transacción está comprometida. Todos los nodos completarán la operación de confirmación de transacción final después de recibir el mensaje de éxito del punto de control.

Si un nodo falla durante el último movimiento de archivo, el trabajo de Flink se restaurará desde el último punto de control completado y se obtendrá una lista de archivos completa desde el último punto de control completado. El trabajo de Flink comprobará los archivos de esta lista de archivos y moverá todos los archivos que no se hayan movido al directorio final.

Para garantizar que los datos no se pierdan ni se repitan durante todo el proceso de acceso, recopilamos y conciliamos la cantidad de datos enviados y recibidos por cada componente en todo el enlace de datos. Dado que el sistema de indicadores generales no puede garantizar la puntualidad y corrección de los indicadores, también hemos logrado una agregación de indicadores altamente confiable y consistente basada en Flink.

De manera similar al enlace de datos, también utilizamos el mecanismo de punto de control de Flink para garantizar la coherencia de los datos del indicador. Usamos Flink para agregar los indicadores recopilados en una granularidad de minutos y guardar estos indicadores agregados en el almacenamiento externo cuando realizamos el punto de control. Al guardar indicadores agregados, además de las etiquetas generales, también traeremos los números de los puntos de control cuando se escriban estos indicadores. Cuando se completa el punto de control, cada nodo también registrará el número de punto de control completado en el almacenamiento externo. Cuando necesitamos consultar indicadores, solo necesitamos conectar el número de punto de control completado y los indicadores agregados para obtener resultados de indicadores consistentes.

A través del mecanismo de punto de control de Flink, podemos garantizar la coherencia de la transmisión de datos y la agregación de índices en el enlace de datos y el enlace indicador, y garantizar la transmisión de datos de extremo a extremo Exactly Once en todo el enlace de acceso a datos.

Acceso a datos en tiempo real de ACID basado en Iceberg

Apache Iceberg es un formato de tabla universal (formato de organización de datos), que se puede adaptar a motores como Presto y Spark para proporcionar funciones de gestión de metadatos y lectura-escritura de alto rendimiento. El posicionamiento de Iceberg está por encima del almacenamiento debajo del motor informático. Es un formato de almacenamiento de datos, que Iceberg llama "formato de tabla". Para ser precisos, es un formato de organización de datos entre el motor de cálculo y el formato de almacenamiento de datos; los datos y metadatos están organizados de una manera específica, por lo que es más razonable llamarlo formato de organización de datos.

Iceberg se da cuenta de la capacidad del ACID a través del mecanismo de bloqueo. Adquirirá el bloqueo de la tienda de metadatos y lo actualizará cada vez que se actualicen los metadatos. Al mismo tiempo, Iceberg garantiza la coherencia lineal (aislamiento serializable) para garantizar que las operaciones de modificación de la tabla sean atómicas, y las operaciones de lectura nunca leerán datos parciales o no confirmados. Iceberg proporciona un mecanismo de bloqueo optimista para reducir el impacto de los bloqueos y utiliza mecanismos de retroceso y reintento de conflictos para resolver los conflictos causados ​​por escrituras simultáneas.

Basado en las capacidades de ACID, Iceberg proporciona capacidades de separación de lectura y escritura similares a MVCC. En primer lugar, cada operación de escritura generará una nueva instantánea (instantánea), la instantánea siempre se incrementa linealmente en el futuro, para garantizar la coherencia lineal. La operación de lectura solo leerá la instantánea existente y la operación de lectura de la instantánea que se está generando no es visible. Cada instantánea tiene todos los datos y metadatos de la tabla en ese momento, por lo que brinda a los usuarios la posibilidad de retroceder (viajar en el tiempo) los datos de la tabla. Al utilizar la capacidad de viaje en el tiempo de Iceberg, los usuarios pueden leer los datos en ese momento, al mismo tiempo que brindan funciones de retroceso de instantáneas del usuario y reproducción de datos.

En comparación con Hudi y Delta Lake, Iceberg proporciona una capacidad de formato de tabla, definición de tipo y abstracción de operaciones más completa, y está desacoplado del motor de procesamiento de datos superior y del formato de almacenamiento de datos inferior. Además, Iceberg no estaba vinculado a un motor de almacenamiento específico al comienzo del diseño y, al mismo tiempo, evitó las llamadas mutuas con el motor superior, por lo que Iceberg podría extenderse fácilmente para admitir diferentes motores.

En el acceso a los datos, Iceberg puede garantizar transacciones ACID y una sólida coherencia, y lograr una escritura de "una y solo una vez"; la separación de lectura y escritura permite que los motores de consulta interactivos (como Hive y Presto, etc.) se lean inmediatamente Para obtener los datos correctos; la actualización y eliminación a nivel de fila admite la corrección de datos a través del motor de cálculo; el consumo incremental permite que los datos que se han descargado se devuelvan al motor de procesamiento de transmisión, y solo la parte modificada se procesa y retrocede; Iceberg es eficiente La capacidad de consulta también puede guardar los pasos de importar MySQL o ClickHouse, y consumirlos directamente el informe y el sistema de BI.

Para poder usar Iceberg, Tencent Big Data ha implementado un conector Flink que admite Iceberg, lo que permite a Flink escribir datos en Iceberg. El Iceberg Sink de Flink consta de dos partes, una se llama Writer y la otra es Committer. Writer es responsable de escribir los datos recibidos en el almacenamiento externo para formar una serie de DataFiles. En la actualidad, para simplificar la adaptación y maximizar el uso de la lógica existente, Tencent utiliza internamente Avro como formato intermedio para los datos. La comunidad de seguimiento presentará un convertidor de tipos integrado de Flink, utilizando el tipo de datos integrado de Iceberg como entrada. Cuando el Writer ejecuta el punto de control, el Writer cierra su propio archivo y envía el DataFile construido al Committer descendente.

Committer es único a nivel mundial en un trabajo de Flink. Después de recibir los DataFiles enviados por todos los escritores ascendentes, el Committer escribirá estos DataFiles en un ManifestFile y guardará el ManifestFile en el punto de control. Cuando se complete el punto de control, Committer enviará el ManifestFile a Iceberg a través de merge append. Iceberg completará la operación de confirmación a través de una serie de operaciones y finalmente hará que los datos recién agregados sean visibles para el almacén de datos posterior.

Tencent ha realizado muchas mejoras y optimizaciones en Iceberg. Además de admitir la lectura y escritura de Flink, Tencent también ha completado las operaciones de eliminación y actualización a nivel de fila, lo que ahorra en gran medida la sobrecarga causada por la corrección y eliminación de datos. Al mismo tiempo, Tencent también ha adaptado Data Source V2 en Spark 3.0, utilizando SQL y DataFrame en Spark 3.0 para conectarse sin problemas a Iceberg.

En el trabajo futuro, Tencent continuará mejorando las capacidades centrales de Iceberg, que incluyen:

  • Agregue la semántica de actualización y eliminación al receptor de Flink para que los datos retrasados ​​se puedan procesar correctamente para admitir el escenario CDC;

  • Incrementar el soporte para Hive;

  • Agregue operaciones de actualización y eliminación a nivel de fila en el modo Merge-On-Read.

Las palabras clave de respuesta entre bastidores [GIAC] pueden hacer que los invitados compartan PPT.

Supongo que te gusta

Origin blog.csdn.net/Tencent_TEG/article/details/108332340
Recomendado
Clasificación