productos secos técnicos | un millón de datos de productos de sincronización en tiempo real, los resultados de la consulta en segundo

Hace un tiempo, el jefe organizó una nueva misión, para construir un sistema de búsqueda de productos negocio, capaces de proporcionar rápida, precisa y capacidades de búsqueda para el usuario, cuando el usuario introduce un contenido de búsqueda para el comercio de la razón social y los nombres de dos dimensiones, hacer una búsqueda los resultados, de acuerdo con la exactitud de pedidos, de asociación y de prensa negocios propiedad de los bienes a una combinación de estructuras de datos, al tiempo que proporciona llamadas a la API para el sistema de negocios.

 

El fondo es muy simple, la realidad es bastante complicado! Nos enfrentamos a los siguientes desafíos:

① base de datos de negocio de productos básicos y la base de datos de varios servidores diferentes, y la capacidad de datos de un millón, ¿cómo podemos lograr entre bases de datos de sincronización de datos que?

 

② comerciantes de productos básicos y los datos se afiliación, o se la hamburguesa de pollo picante McDonald a KFC a colgar, que es vergonzoso!

 

③ datos de negocio de productos básicos se actualiza con frecuencia, como para modificar el precio, inventario, arriba y abajo, y así, el servicio de búsqueda que no puede ser aprovechada montón de datos obsoletos, si el cliente obviamente descubrió la mercancía, el último punto que ya en el marco, a continuación, clientes Tucao! Cómo buscar datos de origen CRUD base de datos son la sincronización en tiempo real de la misma?

 

Con los tres aspectos mencionados anteriormente, se inicio una búsqueda de los servicios generales de diseño arquitectónico.

 

ideas de diseño de la arquitectura del sistema

Con el fin de diseñar la arquitectura del sistema derecha, se analizó la situación actual.

En primer lugar, los datos de la empresa y datos de productos se almacenan en la base de datos de dos mysql8 por separado, con el fin de cumplir con los datos de negocio y datos de producto asociado, necesitamos mesa dos bibliotecas necesarias para ETL en tiempo real en nuestro sistema de búsqueda de base de datos.

 

En segundo lugar, los datos del comerciante, el sistema de base de datos de los productos básicos ETL para buscar la base de datos, tiene que convertirse en una combinación de la estructura de datos del producto asociado de negocios en tiempo real y el formato del documento de padre e hijo, que se almacena en el ES.

 

Por último, los comerciantes, las operaciones CRUD base de datos de los productos básicos, lo que necesita en tiempo real sincronizado con el ES, ES los datos que están en la necesidad de apoyar las adiciones en tiempo real, supresiones y modificaciones.

 

Con este fin, hemos diseñado dos componentes canal, el primer canal de datos para ETL, los comerciantes, algunos de la base de datos tablas y campos de materias primas, extraer la base de datos del servicio de búsqueda; reciclar el segundo canal, leen servicios de búsqueda de bases de datos MySQL del binlog, la transmisión de kafka en tiempo real a la cola de mensajes, a continuación, los datos asociados con el adaptador de canal, documentos de inventario de elementos primarios y secundarios, los datos procesados ​​se almacena en Elasticsearch.

diseño de la arquitectura detallada del sistema como se muestra en la figura.

producto de Merchant diseño de la arquitectura del sistema de búsqueda

 

proyecto de combate

1, y el entorno de software

Sistema operativo: 7 CentOS

Canal: canal.adapter-1.1.4, 1.1.4-canal.deployer

Kafka: kafka_2.12-2.3.0

Elasticsearch: elasticsearch-6.3.2

Kibana: Kibana-6.3.2

 

2, implementado usando ETL datos Canal a mysql8

Este paso es el uso del canal de dos bases de datos separadas mysql8, mesas de extracto tienen que buscar en la base de datos MySQL.

 

2.1 Instalación canaldeployer

(1) extraer canal.deployer-1.1.4.tar.gz

(2) Configuración desplegador Canal

Entra en el directorio canaldeployer / conf, modificar el archivo canal.properties, serverMode configuración principal, MQ y el destino de tres partes.

En primer lugar, hemos revisado serverMode a modo de kafka, el aumento de la capacidad de amortiguación del sistema y mejorar la estabilidad del sistema:

el modo de servidor

 

A continuación, la configuración de la información kafka MQ (kafka su propia instalación):

información kafka MQ

 

Por último, las necesidades de configuración a instancia instantiate, donde la configuración de tres, expresó Canal deploy tres aperturas este caso, la sincronización de MySQL binlog en el tema kafka. Como se muestra a continuación:

Ejemplos de destinos dispuestos

 

(3) 配置 ejemplo Canal desplegador

Introduzca canaldeployer directorio / conf / ejemplo, encontró un instance.properties archivo, que es un ejemplo para el canal, podemos hacer referencia a su configuración.

① ejemplo copiamos todo el catálogo, tanto el nombre de un destino configurado en un paso, como xxxsearch;

② entrar en el directorio xxxsearch, archivo de edición instance.properties, la fuente principal de las tablas y los campos de datos de información de base de datos de configuración necesarios, así como el nombre del tema especificado kafka, binlog esta base de datos original serán convertidos a datos JSON, y la transmisión en tiempo real a través del programa de implementación del canal a kafka en el tema. De la siguiente manera:

base de datos Fuente ejemplo canaldeploy configuración

 

canaldeploy tema instancia kafka 配置

 

③ en el directorio canaldeployer / bin, ./startup.sh a cabo, y el respectivo conducto de partida desplegador ejemplos.

Por lo tanto implementador del canal completó estructuras.

 

2.2 Instalación canal.adapter

Tenemos que utilizar canal.adapter kafka binlog datos JSON con el tema, operación de conversión limpiado, el mysql8 almacenado. Dado que el canal no es mysql8 soporte nativo, por lo que tenemos que hacer algunos ajustes.

(1) el aumento de la mysql8 conexión de accionamiento

La extracción de canal.adapter-1.1.4.tar.gz, introduzca canaladapter directorio / lib, retire mysql-connector-java-5.1.40.jar, introducido mysql-connector-java-8.0.18.jar

 

(2) Configuración del adaptador de canal, de modo que los datos se envían al equipo mysql8.

Introduzca canaladapter / conf, application.yml archivo de edición, kafka principal consumo de configuración, el sistema de búsqueda de información de base de datos fuente y la información de base de datos, de la siguiente manera:

ETL configuración para mysql8

 

A continuación, introduzca canaladapter conf / RDB directorio / a oficial mytest_user.yml como ejemplo, la configuración kafka nombre del tema, el nombre de la base de datos fuente, nombre de la tabla fuente de datos y el nombre de la base de datos de destino y la tabla de datos de destino nombre, recomendó una tabla corresponde a un yml archivo .

mapeo de ETL estructura de la tabla de configuración

 

(3) canaladapter Start

Introduzca canaladapter directorio / bin, ejecute ./startup.sh, inicia adaptador de canal, la observación de archivos logs / adaptador / adapter.log registro, añadir manualmente un registro en el sistema de búsqueda de base de datos, para ver si va a imprimir los siguientes registros, que hay dos registros , un INFO, un DEBUG, la configuración es correcta.

registro canaladapter

Hasta ahora, la etapa ETL datos de configuración es completa, los datos de dos bases de datos diferentes mysql8, sincronización en tiempo real al servicio de búsqueda de base de datos MySQL.

 

3, los datos asociados con multi-mesa, y su hijo Mapa del documento

(1) Configuración de la segunda canaladapter Canal

Introduzca canaladapter / conf, application.yml archivo de edición, kafka principal consumo de configuración, el sistema de búsqueda de base de datos, ES y la información de conexión, como se muestra a continuación:

canaladapter MQ configuración y mysql

 

canaladapter ES configuración

 

tabla de correspondencias múltiple (2) Configurar

Introduzca canaladapter conf es el directorio / /, vim mytest_user.yml, configuraciones multi-mesa editor asociado:

Multi-mesa de configuración asociados

Tenga en cuenta que, el apoyo SQL multi-tabla asociada a la combinación libre, pero hay algunas limitaciones:

(A) la tabla principal no puede ser sub-consulta

(B) Que sólo se puede utilizar el exterior por la izquierda más a la izquierda de la tabla debe ser una tabla principal

(C) si está vinculada a la subconsulta tabla no puede tener más tablas

(D) en la que no puede haber la consulta principal sql (de la subconsulta mesa donde las condiciones pueden ser, pero no se recomienda y puede resultar en la sincronización de datos incompatibles, tales como cambiar el contenido del campo donde las condiciones)

(E) la condición de enlace primario sólo permite clave externa '=' Analizando acciones pueden ocurrir en otras constantes, tales como: en a.role_id = b.id y b.statues = 1

(F) debe estar asociado con un campo de condición en el estado principal de consulta tales como: en a.role_id = b.id en el que a.role_id b.id debe aparecer en el estado principal o seleccione

(G) y el mapeo de valor de atributo consulta SQL de elástico búsqueda será uno a uno (no soportado por select *), tales como: seleccione a.id como _id, a.name, a.email como _email de usuario, donde nombre se asigna a ES mapeo del campo de nombre, _email se proyectará en la asignación de campos _email, donde el alias (si es un alias) como el campo de mapa final _ID aquí puede llenar al perfil _id :. mapa _id.

 

(3) Configuración y su documentación hijo

Un funcionario de biz_order.yml por ejemplo, biz_order.yml vim, padre e hijo mapeo documento de configuración:

archivo de configuración de asignación de padre y hijo

 

(4) En ElasticSearch6, Crear índice y entre padres e hijos documentos de mapeo relación

Kibana entrar en la página, haga clic en Herramientas de desarrollo, ejecute el siguiente comando para crear el índice y el documento de mapeo padre e hijo:

Establecer un índice de padre-hijo y el mapeo de documentos

En el que, para ES6 y Kibana instalado, esta configuración no es particularmente, no se describe aquí.

 

Adaptador del canal (5) Inicio

Introduzca canaladapter directorio / bin, ejecute ./startup.sh, iniciar adaptador de canal, la observación de archivos logs / adaptador / adapter.log registro, añadir manualmente un registro en el sistema de búsqueda de base de datos, para ver si va a imprimir los siguientes registros, tales como los configura de comandos de impresión el éxito.

Ejemplo de registro adaptador está configurado correctamente

 

4, los resultados operativos

Ahora se puede realizar por la declaración Kibana DSL para consultar una mirada.

Nos habían aumentado en el sistema de negocio de una tienda "KFC", y luego añadir el "tomate" y "tomate fresco" dos productos básicos en el sistema de mercancías y artículos relacionados a la "KFC". Luego de consultas "KFC" o "tomate", el siguiente es el resultado de una consulta (ES elimina los campos predeterminados):

resultados de la consulta DSL

Visto en el gráfico, podemos Consulta por mercancía nombre comercial, tiendas y de mercancías pueden También pregunte por el nombre comercial, y de apoyo adiciones de datos en tiempo real y supresiones en el canal, los datos ES serán consistentes con los sistemas empresariales y sistemas comerciales, y la estructura de datos contiene las empresas y los productos correspondientes, para satisfacer las necesidades del negocio.

 

5, resumen

En este punto, sobre la base de Canal, kafka, mysql8, el sistema de búsqueda de productos negocio de la tecnología básica ElasticSearch6 marco para construir completa. Utilizamos comerciantes canal de acceso desplegador en tiempo real, los productos básicos de bases de datos binlog MySQL sistema, y ​​ha enviado a kafka, seguido de multi-mesa por el adaptador del canal asociado con el kafka consumo, y los datos JSON binlog, el padre de mapeo de documentos e hijo, y finalmente almacenados en ES6, para la parte superior Buscar llamada de servicio.

El éxito final del sistema de servicio de búsqueda en línea, la sincronización de datos en tiempo real, resultados de segundo nivel a alcanzar los requerimientos del negocio, el jefe dijo, para añadir un pollo por persona del equipo de I + D de un millón de comerciantes de productos de la compañía! Piensa que hay poco de emoción, jeje ~ ~

Fuente: Pico Technology Co., Ltd.

Publicados 306 artículos originales · ganado elogios 67 · vistas 380 000 +

Supongo que te gusta

Origin blog.csdn.net/ailiandeziwei/article/details/105218364
Recomendado
Clasificación