logstash_output_kafka: explicación detallada de Kafka de sincronización Mysql

0, título

En escenarios comerciales reales, encontrará escenarios donde los datos básicos se almacenan en Mysql y una gran cantidad de datos se escribe en tiempo real. La migración a Kafka es un mejor plan de selección de empresas.

logstash_output_kafka: explicación detallada de Kafka de sincronización Mysql

Los esquemas de selección para que mysql escriba en
Kafka son: Esquema 1: complemento logstash_output_kafka.
Opción 2: kafka_connector.
Opción 3: complemento de debezium.
Opción cuatro: canalón.
Esquema 5: Otros esquemas similares.
Entre ellos: debezium y flume se implementan basados ​​en mysql binlog.

Si necesita sincronizar la cantidad total de datos históricos + actualizar los datos en tiempo real, se recomienda utilizar logstash.

1. Principio de sincronización de Logstash

El complemento logstash comúnmente utilizado es: logstash_input_jdbc para realizar la sincronización de la base de datos relacional con Elasticsearch.

De hecho, dominar el principio de sincronización del core logstash ayuda a todos a comprender la sincronización entre bibliotecas similares.

El principio fundamental de logstash: la entrada genera eventos, los filtros los modifican y la salida los envía a otros lugares.

El núcleo de logstash consta de tres partes: entrada, filtro y salida.

logstash_output_kafka: explicación detallada de Kafka de sincronización Mysql

input { }
filter { }
output { }

1.1 entrada

Incluyendo pero no limitado a:

  1. jdbc: Base de datos relacional: mysql, oracle, etc.
  2. archivo: Leer de un archivo en el sistema de archivos.
  3. syslog: escuche los mensajes de syslog en el puerto conocido 514.
  4. redis: mensaje de redis. beats: Procesar eventos enviados por Beats.
  5. Kafka: flujo de datos en tiempo real de Kafka.

1.2 filtro

Los filtros son dispositivos de procesamiento intermedio en la canalización de Logstash. Puede combinar filtros con condiciones para realizar acciones en eventos cuando se cumplen ciertas condiciones.

Se puede comparar con el enlace ETL de procesamiento de datos.

Algunos filtros útiles incluyen:

  1. grok: Analiza y construye texto arbitrario. Grok es actualmente la mejor manera de analizar datos de registro no estructurados en contenido estructurado y consultable en Logstash. Con 120 modos integrados en Logstash, es probable que encuentre un modo que satisfaga sus necesidades.
  2. mutate: realiza una conversión regular en los campos de eventos. Puede cambiar el nombre, eliminar, reemplazar y modificar los campos en el evento.
  3. soltar: elimina los eventos por completo, como los eventos de depuración.
  4. clonar: haga una copia del evento, posiblemente agregando o eliminando campos.
  5. geoip: agrega información sobre la ubicación geográfica de la dirección IP.

1.3 salida

El resultado es la etapa final de la canalización de Logstash. Algunas salidas de uso común incluyen:

elasticsearch: envía datos de eventos a Elasticsearch.
archivo: escribe datos de eventos en un archivo en el disco.
Kafka: escribe eventos a Kafka.
Referencia de demostración detallada del filtro: http://t.cn/EaAt4zP

2. Sincronizar Mysql con la referencia de configuración de Kafka

input {
    jdbc {
      jdbc_connection_string => "jdbc:mysql://192.168.1.12:3306/news_base"
      jdbc_user => "root"
      jdbc_password => "xxxxxxx"
      jdbc_driver_library => "/home/logstash-6.4.0/lib/mysql-connector-java-5.1.47.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      #schedule => "* * * * *"
      statement => "SELECT * from news_info WHERE id > :sql_last_value  order by id"
      use_column_value => true
      tracking_column => "id"        
      tracking_column_type => "numeric"
      record_last_run => true
      last_run_metadata_path => "/home/logstash-6.4.0/sync_data/news_last_run"    

    }

}

filter {
   ruby{
        code => "event.set('gather_time_unix',event.get('gather_time').to_i*1000)"
    }
    ruby{
        code => "event.set('publish_time_unix',event.get('publish_time').to_i*1000)"
    }
  mutate {
    remove_field => [ "@version" ]
    remove_field => [ "@timestamp" ]
    remove_field => [ "gather_time" ]
    remove_field => [ "publish_time" ]
  }
}

 output {
      kafka {
            bootstrap_servers => "192.168.1.13:9092"
            codec => json_lines
            topic_id => "mytopic"

    }
    file {
            codec => json_lines
            path => "/tmp/output_a.log"
    }
 }

El contenido anterior no es complicado y no entrará en detalles.

Nota: Después de que
Mysql se sincroniza con logstash, el formato de tipo de fecha: "2019-04-20 13:55:53" se ha reconocido como formato de fecha.

code =>
"event.set ('collect_time_unix', event.get ('collect_time'). to_i * 1000)" ,

Convierte el formato de hora en Mysql en un formato de marca de tiempo.

3. Resumen de boxes

3.1 Caso del campo Pit 1

de Xingyou: use logstash para sincronizar datos de mysql, porque el atributo lowercase_column_names
=> "false" no se agrega en jdbc.conf , por lo que logstash cambia la lista de resultados de la consulta a minúsculas de forma predeterminada, y se sincroniza con es, por lo que conduce a es Los nombres de los campos que se ven en el interior están en minúsculas.

Resumen final: es admite nombres de campo en mayúsculas. El problema es que logstash no funciona bien. Es necesario agregar minúsculas_columna_nombres => "falso" a la configuración de sincronización. Grábalo y espera ayudar a más personas.

3.2 ¿Se repetirán los datos sincronizados con ES?

Si desea sincronizar los datos de la base de datos relacional con ES, si inicia logstash en varios servidores del clúster al mismo tiempo.

Interpretación: En el proyecto real, no se usa el id aleatorio. El id especificado se usa como el _id de es. El id especificado puede ser el md5 de la url. De esta manera, los mismos datos se actualizarán y sobrescribirán.

3.3 Con la misma configuración de logstash, los datos no se pueden sincronizar después de actualizar a 6.3.

Interpretación: La versión alta está optimizada en base a incrementos de tiempo.

tracking_column_type => "timestamp" debe designarse como un tipo de hora, el valor predeterminado es numérico

3.4 ¿Dónde se manejan los campos ETL?

Interpretación: se puede procesar en la etapa de consulta sql cuando logstash está sincronizado con mysql, como: seleccione a_value como avalue ***.

O procesamiento de etapa de filtrado, procesamiento de cambio de nombre mutado.

mutate {
        rename => ["shortHostname", "hostname" ]
    }

O la etapa kafka es procesada por kafka stream.

4. Resumen

  • La configuración y sincronización relevantes no son complicadas, y la complejidad a menudo radica en el análisis de la fase de filtrado y el rendimiento de logstash.
  • La investigación en profundidad y el análisis del rendimiento deben combinarse con escenarios comerciales reales.
  • Si tiene alguna pregunta, deje un mensaje para discutir.

Lectura recomendada:
1. Combate real | canal realiza sincronización incremental en tiempo real de Mysql con Elasticsearch
2. Productos secos | Debezium realiza una sincronización eficiente en tiempo real de Mysql con Elasticsearch
3. Una imagen para aclarar la sincronización de bases de datos relacionales con Elasticsearch http://t.cn/EaAceD3
4. Nueva implementación: http://t.cn/EaAt60O
5. mysql2mysql: http://t.cn/EaAtK7r
6. Implementación de código abierto recomendada: http://t.cn/EaAtjqN
logstash_output_kafka: explicación detallada de Kafka de sincronización Mysql
para unirse al planeta, más en menos tiempo ¡Aprenda más productos secos rápidamente!

Supongo que te gusta

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