Conocimiento en profundidad de la serie Kafka (6) - Canalización de datos de Kafka

Directorio de artículos de serie

Artículos de la serie de guías autorizadas de Kakfa

Prefacio

Esta serie es mi transcripción y pensamientos después de leer el libro "La guía definitiva de Kafka".

texto

Kafka es en realidad como una canalización de datos. Básicamente, se posiciona como un middleware. Nuestros datos fluyen hacia Kafka, dejan que Kafka administre y luego los datos fluyen desde Kafka hacia donde se necesitan. Entonces Kafka, como un gran búfer entre los diversos segmentos de datos de la canalización de datos, puede desacoplar de manera efectiva a los productores y consumidores de datos de la canalización. A continuación, hablemos de Kafka Connect y algunos casos.

Kafka Connect

Connect es parte de Kafka, que proporciona una forma confiable y escalable de mover datos entre Kafka y los sistemas de almacenamiento de datos externos.

  1. Connect se ejecuta como un grupo de procesos de trabajo e instalamos complementos de conector basados ​​en procesos de trabajo.
  2. Luego, use la API Rest para administrar y configurar los conectores. Estos procesos de trabajo se convertirán en trabajos de larga duración.
  3. El conector inicia tareas adicionales, utiliza de manera eficaz los recursos de los nodos trabajadores y mueve grandes cantidades de datos de manera paralela.
  4. El conector de la fuente de datos es responsable de leer los datos del sistema de origen y proporcionar el objeto de datos al proceso de trabajo.
  5. El conector del grupo de datos es responsable de obtener datos del proceso de trabajo y escribirlos en el sistema de destino.

Ejecutar Connect

El primer paso: modificar el archivo de configuración (ingresar al directorio kafka / config)

vi connect-distributed.properties 

Generalmente, el proceso Connect tiene 3 parámetros de configuración más importantes (aquí solo necesitamos modificar bootstrap.server)
Inserte la descripción de la imagen aquí

  1. bootstrap.server

Este parámetro enumera los servidores de intermediarios que funcionarán con Connect, y el conector escribirá datos en estos intermediarios o leerá datos de ellos.

  1. Identificación del grupo

Los trabajadores con el mismo group.id pertenecen al mismo clúster de Connect.

  1. key.converter 和 value.converter

Connect puede procesar datos almacenados en diferentes formatos en Kafka Estos dos parámetros especifican el convertidor utilizado para la clave y el valor del mensaje. El JSONConverter proporcionado por Kafka se utiliza de forma predeterminada.

Paso 2: inicie el conector en segundo plano (solo una máquina)

 ./bin/connect-distributed.sh config/connect-distributed.properties &

Inserte la descripción de la imagen aquí
Paso 3: Verifique si el inicio es exitoso

1. Verifique que el puerto esté abierto:

netstat -nlp | grep :8083

Inserte la descripción de la imagen aquí
2. Verifique que se esté ejecutando normalmente a través de la API REST:

curl http://192.168.237.130:8083/
curl http://192.168.237.130:8083/connector-plugins

Si es normal, devolverá el número de versión actual de Connect y otra información.
Inserte la descripción de la imagen aquí


Connect Demo1: fuente de datos de archivo y grupo de datos de archivo

Después de asegurarse de que el cuidador del zoológico anterior, Kafka y el conector están encendidos, comencemos la operación del caso.

1. El primer paso: Iniciar una fuente de datos de archivo . Para mayor comodidad, déjelo leer el archivo de configuración de Kafka ---- envíe el contenido del archivo de configuración de Kafka al tema.

echo '{"name":"load-kafka-config","config":{"connector.class":"FileStreamSource","file":"config/server.properties","topic":"kafka-config-topic"}}' | curl -X POST -d @- http://192.168.237.130:8083/connectors --header "content-Type:application/json"

Este fragmento JSON contiene el nombre del conector: load-kafka-config, la información de configuración del conector (incluido el trueno del conector, el nombre del archivo a cargar y el nombre del tema)

Inserte la descripción de la imagen aquí
2. Paso 2: Verifique que el archivo de configuración esté cargado en el tema a través del consumidor de la consola de Kafka.

 ./bin/kafka-console-consumer.sh --bootstrap-server=192.168.237.130:9092 --topic kafka-config-topic --from-beginning

Resultado: si aparece el siguiente resultado, significa éxito.
Inserte la descripción de la imagen aquí

1. La salida de los resultados anteriores es el contenido de config / server.properties, que se convierte línea por línea en registros JSON y el conector lo envía al tema de kafka-config-topic.
2. De forma predeterminada, el convertidor JSON adjuntará un esquema a cada registro. El esquema aquí es muy simple. Solo hay una columna de carga útil, que representa el tipo de cadena y contiene una línea de contenido en el archivo.

3. Paso 3: Utilice el convertidor del grupo de datos de archivos para importar el contenido del tema al archivo.

echo '{"name":"dump-kafka-config1","config":{"connector.class":"FileStreamSink","file":"copyServerProperties","topics":"kafka-config-topic"}}' | curl -X POST -d @- http://192.168.237.130:8083/connectors --header "content-Type:application/json"

Resultado: las siguientes palabras indican éxito
Inserte la descripción de la imagen aquí

1. Primero que nada, la configuración ha cambiado esta vez, el nombre de clase FileStreamSink reemplaza a FileStreamSource. Los atributos del archivo apuntan al archivo de destino en lugar del archivo original. Especifique temas en lugar de temas, puede usar el grupo de datos para escribir varios temas en un archivo y una fuente de datos solo puede escribir en un tema.
2. Si todo es normal, obtendrá un archivo llamado copyServerProperties, el contenido es exactamente el mismo que server.properties.

Inserte la descripción de la imagen aquí

Si vuelve a llamar al comando, encontrará un mensaje de error: El conector ya existe.
Inserte la descripción de la imagen aquí
Eliminar el conector:

curl -X DELETE http://192.168.237.130:8083/connectors/dump-kafka-config1

Ver conectores:

curl -X GET http://192.168.237.130:8083/connectors/

Inserte la descripción de la imagen aquí
En este punto, hemos completado el uso del conector integrado de Kafka para escribir el contenido del archivo en el tema y luego escribir los datos del tema en la fuente de datos de destino.

Nota: Write solo puede escribir un solo tema (uno a varios). La escritura puede ser de muchos a uno


Conectar Demo2: De Mysql a Kafka

El primer paso: obtenga el paquete jar correspondiente (lo empaqueté mi propio experto, demasiado problema,
le daré el hilo directamente) Mi contraseña de Baidu Cloud : 6eq9


Paso 2: Cargue el paquete jar en el directorio kafka / libs y luego reinicie la conexión.

 ./bin/connect-distributed.sh config/connect-distributed.properties &

Verificar complemento:

curl http://192.168.237.130:8083/connector-plugins

resultado:
Inserte la descripción de la imagen aquí


Paso 3: cree una tabla en Mysql (no necesito iniciar e instalar mysql)

create database test;
use test;
create table login(username varchar(30),login_time datetime);
insert into login values('test1',now());
insert into login values('test2',now()); 
commit;

A continuación, cree y configure el conector JDBC: documentos de configuración oficiales relevantes y señale el caso

echo '{"name":"mysql-login-connector","config":{"connector.class":"JdbcSourceConnector","connection.url":"jdbc:mysql://localhost:3306/test?user=root&useSSL=true","connection.password":"ljj000","mode":"timestamp","table.whitelist":"login","validate.non.null":false,"timestamp.column.name":"login_time","topic.prefix":"mysql."}}' | curl -X POST -d @- http://192.168.237.130:8083/connectors --header "content-Type:application/json"

parámetro:

  1. table.whitelist: equivalente a la whitelist de la tabla, indicando la tabla a monitorear.
  2. topic.prefix: el prefijo del tema, combinado con los parámetros anteriores para formar el tema final.
  3. connector.class: el tipo de conector utilizado.
  4. connection.url: dirección de conexión.
  5. timestamp.column.name: use el nombre del campo de marca de tiempo.

Pisé un gran pozo aquí, dejé que todos limpiaran la mina.

  1. ¿La versión de Mysql corresponde a la versión del paquete mysql-connector-java.jar? (Usé una versión de mysql8 o superior en la máquina virtual al principio, y luego cambié a un localhost con una versión 5.7. Mi paquete jar es 5.1.37, que ciertamente no se puede usar con la versión 8 de mysql)
  2. Ya sea para importar paquetes jar relacionados en kafka / libs.

Si aparecen las siguientes palabras, significa éxito:
Inserte la descripción de la imagen aquí
use la autenticación de consumidor de Kafka:

./bin/kafka-console-consumer.sh --bootstrap-server=192.168.237.130:9092 --topic mysql.login --from-beginning

Inserte la descripción de la imagen aquí
En este punto, importamos con éxito los datos en Mysql al tema de Kafka.


Conocimiento profundo de Connect

Para comprender el principio de funcionamiento de Connect, primero debemos conocer algunos conceptos básicos y cómo interactúan.

Conectores y tareas

Conector: responsable de 3 cosas

  1. Decida cuántas tareas deben ejecutarse .
  2. Dividir la replicación de datos según las tareas.
  3. Obtenga la configuración de la tarea del proceso de trabajo y transmítala.

Ejemplo:
1. El conector JDBC se conectará a la base de datos, contará las tablas que deben replicarse y determinará cuántas tareas deben realizarse.
2. Luego, elija el valor más pequeño entre el parámetro de configuración máx. Tareas y la cantidad de datos real como el número de tareas.
3. Después de determinar el número de tareas, el conector genera una configuración para cada tarea, la configuración contiene los elementos de configuración del conector, como conexión.url y las tablas que cada tarea necesita copiar.
4. El método taskConfigs () devuelve una lista de mapeo. El proceso de trabajo es responsable de iniciar y configurar las tareas. Cada tarea solo copia la tabla de datos especificada en el elemento de configuración.

tarea:

  1. Responsable de mover datos dentro o fuera de Kafka.

1. La tarea obtendrá un contexto asignado por el proceso de trabajo cuando se inicialice. El contexto del sistema de origen (Contexto de origen) contiene un objeto que puede almacenar el desplazamiento del registro del sistema de origen en el contexto (como el ID de clave principal de la tabla de datos).
2. Por supuesto, el sistema de origen tiene un contexto y el sistema de destino también tiene un contexto, proporcionará algunos métodos y el conector los utilizará para manipular los datos obtenidos en Kafka.
3. Una vez inicializada la tarea, inicie el trabajo de acuerdo con la configuración especificada por el conector.
4. La tarea del sistema de origen sondea el sistema externo y devuelve algunos registros, y el proceso de trabajo envía estos registros a kafka.
5. La tarea del grupo de datos recibe los registros de Kafka a través del proceso de trabajo y los escribe en el sistema externo.

proceso de trabajo

  1. Como contenedor de conectores y tareas, es responsable de procesar las solicitudes http.
  2. Estas solicitudes se utilizan para definir el conector y la configuración entre los conectores, y también son responsables de guardar la configuración e iniciar tareas entre los conectores.

Se puede entender de esta manera: los conectores y las tareas son responsables del movimiento de datos, mientras que los procesos de trabajo son responsables de la API REST , la administración de la configuración, la confiabilidad y alta disponibilidad y el equilibrio de carga .

Modelo de datos de convertidor y Connect

Connect proporciona un conjunto de API de datos, incluidos objetos de datos y esquemas para describir datos.

Ejemplo:
1. El conector JDBC lee un campo de la base de datos y crea un objeto Connect Schema basado en el tipo de datos del campo.
2. Utilice este objeto de esquema para crear una estructura que contenga todos los campos de la base de datos
3. El conector de origen lee los eventos del sistema de origen y genera el esquema y los valores para cada evento (el valor es el propio objeto de datos).
4. El conector de destino obtiene el esquema y el valor, usa el esquema para analizar el valor y lo escribe en el sistema de destino.

El convertidor son los pasos que se deben seguir cuando los datos entran o salen de Kafka, por ejemplo, el objeto se convierte en datos JSON.

Un pequeño resumen es:

  1. El conector es responsable de transferir datos, obtener la configuración de tareas e importar y exportar datos a Kafka.
  2. El vinculador genera una tarea y, una vez iniciada, los datos comienzan a transferirse.
  3. En el proceso de transmisión de datos, el convertidor lo convertirá, como convertir a String, tipo JSON, etc., para facilitar el almacenamiento.

Gestión de compensaciones

Además de proporcionar servicios de API REST, el proceso de trabajo también proporciona servicios de gestión de compensación, lo que permite que el conector sepa qué datos se han procesado.

  1. Los registros devueltos por el conector de origen contienen en realidad la partición y el desplazamiento del sistema de origen, y el trabajador enviará estos registros a Kafka. ( Combinado con el contexto de la tarea anterior )

Por ejemplo:
1. Para el origen del archivo, la partición puede ser un archivo y el desplazamiento puede ser un número de línea o de carácter en el archivo.
2. Para la fuente JDBC, la partición puede ser una tabla de datos y el desplazamiento puede ser la clave principal de un registro.

  1. Si Kafka confirma que el registro se guardó correctamente, el proceso de trabajo guardará el desplazamiento, generalmente por tema.

  2. El conector de destino es el opuesto: leerán el registro que contiene información sobre el tema, la partición y el desplazamiento de Kafka, y luego llamarán al método put () del conector, que guardará el registro en el sistema de destino.

  3. Si el guardado se realiza correctamente, el conector guardará el desplazamiento en Kafka a través del cliente consumidor.


para resumir

Este artículo probablemente habló sobre varios puntos:

  1. El conector Connect que viene con Kafka.
  2. Hablé de dos demostraciones, el archivo de origen-Kafka-el archivo de destino, Mysql-Kafka.
  3. Explicado en Connect: los conceptos relacionados y las relaciones de los procesos de trabajo, conectores, convertidores y tareas.

El próximo artículo lo explicaremos desde la dirección de Kafka.

Supongo que te gusta

Origin blog.csdn.net/Zong_0915/article/details/109676679
Recomendado
Clasificación