La Red de Conocimientos Pedagógicos - Currículum vitae - Mysql sincroniza datos con Hive - modo binlog.

Mysql sincroniza datos con Hive - modo binlog.

Actualmente mysql sincroniza datos con hive usando jdbc.

Este método tiene dos ventajas:

También hay desventajas:

El detalle más importante de este paso es ingresar todos los datos binlog de la biblioteca mysql. Para un tema de Kafka, el formato es json. El formato es el siguiente:

Los detalles principales de este paso son la estructura de escritura en HDFS y por qué no escribir directamente en Hive.

La razón por la que la tabla de colmena no está escrita es porque la estructura de datos de binlog no es fija, mientras que la estructura de colmena es relativamente fija. Si desea escribir en Hive, debe escribir los binlogs de diferentes tablas en diferentes tablas de Hive, y el costo de mantenimiento es demasiado alto. Además, Spark puede leer el archivo json de hdfs directamente, así que simplemente colóquelo en hdfs.

Si escribe en HDFS, considerando que la lectura posterior de estos datos es para leer datos incrementales basados ​​en la tabla, el directorio escrito debe tener la fecha y el nombre de la tabla. La estructura de directorios que utilizo aquí es la siguiente:

En otras palabras, los datos deben escribirse en diferentes directorios en flink según la base de datos, el nombre de la tabla y la fecha a la que pertenecen los datos.

Durante este paso, encontrará algunos problemas de parámetros importantes.

2. El intervalo del punto de control como se describe anteriormente. No sólo afectará la frecuencia de los puntos de control, sino también el tamaño de los archivos HDFS, lo que puede tener un gran impacto en el rendimiento de HDFS. Si este valor es demasiado grande, la latencia de los datos será demasiado alta; si es demasiado pequeña, habrá demasiados archivos pequeños. Mi configuración aquí es de 5 minutos.

Lea atentamente y preguntará en este momento, dado que su directorio está dividido en tablas, la cantidad de datos binlog cada 5 minutos para cada tabla es diferente. Para algunas tablas MySQL grandes, es aceptable que generemos un archivo cada 5 minutos. Para algunas tablas pequeñas, se genera un archivo cada cinco minutos, por lo que el archivo será pequeño. Así que hice otra capa de proyección aquí. Filtré las tablas grandes de mysql y solo sincronicé las tablas grandes con hdfs para la sincronización de datos binlog. Debido a que la forma en que binlog sincroniza los datos de mysql es para ahorrar la presión de lectura de mysql, y las tablas pequeñas no tendrán demasiada presión, estas tablas se pueden sincronizar directamente a través de jdbc.

Esta es la parte más complicada de todo el proceso e involucra muchos detalles.

En primer lugar hay que tener clara la idea general. La idea general es leer los datos históricos antiguos en HDFS y luego fusionarlos con los nuevos datos de binlog para generar una nueva instantánea.

De hecho, también implica algunos otros detalles, como cambios en la estructura de la tabla MySQL o que las estructuras de datos de MySQL y Hive son inconsistentes.

Además, existen otros problemas al importar la misma tabla desde varias bases de datos a una tabla en Hive, por lo que no entraré en detalles.