Actual combat | canal realiza una sincronización incremental en tiempo real de Mysql a Elasticsearch

Inscripción

La sincronización incremental de la base de datos relacional Mysql / Oracle Elasticsearch es un tema de preocupación continua y uno de los temas más discutidos en la comunidad y los grupos de QQ. Las preguntas incluyen pero no se limitan a: 1. ¿Cómo se sincroniza Mysql con Elasticsearch? 2. ¿Cuáles son las diferencias en la selección de Logstash, kafka_connector y canal, y cómo elegir? 3. ¿Puede agregar, eliminar, modificar y verificar simultáneamente? ..... Este artículo da la respuesta.

1. Sincronización de canales

1.1 Canal admite oficialmente Mysql para sincronizar ES6.X

Principio de sincronización, ver antes: Productos secos | Debezium realiza una sincronización eficiente en tiempo real de Mysql con Elasticsearch.

Después de la versión canal 1.1.1, se ha agregado la función de adaptación y puesta en marcha del aterrizaje de datos del cliente. La versión Elastic Search del adaptador de canal es compatible con 6.xx y versiones posteriores. Necesita usar un adaptador para lograrlo.

1.2 Efecto de sincronización

1) Verificado: solo se admite la sincronización incremental y no se admite la sincronización completa de datos existentes. En este sentido, la intención original de canal es "suscripción incremental y componente de consumo de binlog de base de datos mysql de Alibaba".

2) Verificado: debido al mecanismo binlog, las operaciones nuevas, actualizadas y eliminadas en Mysql, el Elasticsearch correspondiente se puede agregar, actualizar y eliminar en tiempo real.

3) El canal de escenarios de uso recomendado es adecuado para escenarios comerciales que requieren la adición, eliminación y modificación en tiempo real de datos de Mysql y Elasticsearch. Los escenarios en tiempo real no son escenarios comerciales exigentes, logstashinputjdbc también puede cumplir.

Se recomienda hacer una buena selección y evaluación de trabajos.

2. Versión síncrona:

3. Interpretación de los pasos de sincronización

3.1 Iniciar canal, que puede ejecutarse en segundo plano como proceso residente.

El sitio web oficial tiene una descripción detallada https://github.com/alibaba/canal/wiki/QuickStart, a continuación solo se enumeran las precauciones clave.

Archivo de descarga correspondiente: canal.deployer-1.1.3-SNAPSHOT.tar.gz, puede seguir la última versión en tiempo real.

3.1.1 Habilitar binlog

El principio de canal se basa en la tecnología binlog de mysql, por lo que es necesario habilitar aquí la función de escritura binlog de mysql Se recomienda configurar el modo binlog como fila.

[mysqld]
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

3.1.2 Modificar archivo de configuración

vi conf/example/instance.properties

Configure la información básica de la base de datos.

3.1.3 Iniciar canal

Bin / startup.sh puede verificar el error a través del registro.

3.2 Configure el adaptador ElasticSearch y realice la sincronización.

El sitio web oficial se ha descrito en detalle: https://github.com/alibaba/canal/wiki/Sync-ES . A continuación se describen solo los pozos encontrados en la implementación.

3.2.1 Versión de implementación

anal.adapter-1.1.3-SNAPSHOT.tar.gz, si está actualizado, se recomienda utilizar la última versión.

3.2.2 Configuración del núcleo

[root@localhost es]# cat mytest_user.yml 
dataSourceKey: defaultDS
destination: example
esMapping:
_index: baidu_index
_type: _doc
_id: _id
pk: id
sql: "select a.id as _id, a.title, a.url, a.publish_time, a.content, 
from baidu_info as a"
# objFields:
# _labels: array:;
etlCondition: "where a.id >= 1"
commitBatch: 3000

Propósito de realización: el campo id de la tabla de la biblioteca se utiliza como _id de Elasticsearch para lograr el autoincremento.

4. Realización de asociaciones de mesas múltiples

Se recomienda consultar el sitio web oficial: https://github.com/alibaba/canal/wiki/Sync-ES Support:

  • Doce y cincuenta y nueve de la noche
  • Uno a muchos
  • Muchos a muchos

5. Hoyo

Pit 1: canal.adapter-1.1.2 no pudo iniciarse

Error de inicio: https://github.com/alibaba/canal/issues/1513 Este problema se ha solucionado en la versión 1.1.3.

Pit 2: no admite la sincronización completa

Se recomienda utilizar logstash u otras herramientas para una sincronización completa:

Pit 3: primero se debe crear el mapeo del índice correspondiente en ES

De lo contrario, no se reconocerá el índice y se notificará un error de escritura.

Pit 4: ¿Cómo sincronizar varias tablas?

Agregue la configuración * .yml en canal.adapter-1.1.3 / conf / es. En otras palabras, puede haber un archivo de configuración por tabla Mysql.

Pit 5: error de excepción de puntero nulo

Solución: En la sección de instrucción SQL, especifique el id. De la tabla de biblioteca correspondiente como _id en ES; de lo contrario, se informará un error. Por ejemplo:

select  sx_sid  as  _id, name  from  baidu_info

Pit 6: ¿El binlog basado en el modo de fila registrará los valores antes y después del cambio?

  • INSERTAR: Solo el valor modificado.
  • ACTUALIZAR: Contiene los valores antes y después del cambio.
  • ELIMINAR: El valor antes del cambio
    Acerca de la sincronización completa: https://github.com/alibaba/canal/issues/376

6 Resumen de la selección síncrona

Actual combat | canal realiza una sincronización incremental en tiempo real de Mysql a Elasticsearch

Las diferentes selecciones anteriores tienen sus propias ventajas y desventajas. Se recomienda elegir de acuerdo con el negocio real. Bienvenido a dejar su plan y pensamiento de práctica sincrónica.

Actual combat | canal realiza una sincronización incremental en tiempo real de Mysql a Elasticsearch

¡Únete al planeta y establece la tecnología con el jefe!

Supongo que te gusta

Origin blog.51cto.com/15050720/2562053
Recomendado
Clasificación