Todos los productos
Search
Centro de documentos

DataWorks:Sincronización en tiempo real de una tabla de Hologres a Kafka

Última actualización: Sep 04, 2026

Puede utilizar una tarea de sincronización ETL en tiempo real para sincronizar datos desde orígenes como DataHub y Hologres hacia Kafka. La tarea inicializa el topic de Kafka según el esquema de la tabla de origen y sincroniza los datos de forma continua para su consumo posterior.

Límites

  • La versión del origen de datos de Kafka debe estar entre 0.10.2 y 3.6.0.

  • La versión del origen de datos de Hologres debe ser V2.1 o posterior.

  • No se admite la sincronización incremental de datos desde una tabla con particiones de Hologres.

  • No es posible sincronizar mensajes correspondientes a cambios DDL en una tabla de Hologres.

  • Se pueden sincronizar datos incrementales de Hologres para los siguientes tipos de datos: INTEGER, BIGINT, TEXT, CHAR(n), VARCHAR(n), REAL, JSON, SERIAL, OID, INT4[], INT8[], FLOAT8[], BOOLEAN[], TEXT[] y JSONB.

  • Debe habilitar el registro binario para la tabla de Hologres en la base de datos de Hologres de origen. Para obtener más información, consulte Subscribe to Hologres binlogs.

Requisitos previos

Procedimiento

1. Seleccione un tipo de tarea de sincronización

  1. Inicie sesión en la consola de DataWorks. En la región objetivo, haga clic en Data Integration > Data Integration en el panel de navegación izquierdo. Seleccione un espacio de trabajo en la lista desplegable y haga clic en Go to Data Integration.

  2. En el panel de navegación izquierdo, haga clic en Sync Tasks. En la parte superior de la página, haga clic en Create synchronization task y configure los siguientes parámetros.

    • Data Source And Destination: Hologres→Kafka

    • New Task Name: Personalice un nombre para la tarea de sincronización.

    • Synchronization Mode: single-table real-time.

    • Synchronization Mode Step: Seleccione full synchronization.

2. Configure la red y los recursos

  1. En la sección Configure Network Connections and Resource Groups, seleccione el Resource Group para la tarea de sincronización. También puede establecer el Task Resource Usage en CUs.

  2. Para el Source Data Source, seleccione un origen de datos de Hologres. Para el Destination data source, seleccione un origen de datos de Kafka. A continuación, haga clic en Test Connection.

  3. Una vez que las pruebas de conectividad para los orígenes de datos de origen y destino sean satisfactorias, haga clic en Next step.

3. Configure el vínculo de sincronización

a. Configure el origen de Hologres

En la parte superior de la página, haga clic en el origen de datos de Hologres y edite la Holo source information.

image

  1. En la sección Holo source information, seleccione el esquema y la tabla de origen.

  2. En la esquina superior derecha, haga clic en Data Sampling.

    En el cuadro de diálogo Preview Data Output, especifique los Sampled Data Records y haga clic en Start Collection. Esto permite muestrear y previsualizar datos de la tabla de Hologres.

b. Configure el destino de Kafka

En la parte superior de la página, haga clic en el destino de Kafka y edite la Kafka Destination Information.

image

  1. En la sección Kafka Destination Information, seleccione el topic de Kafka en el que desea escribir datos.

  2. Establezca Merge Source Binlog Update Messages según sea necesario. Si habilita esta opción, los dos mensajes de actualización correspondientes a una operación de actualización en los registros binarios de origen se fusionan en un solo mensaje antes de escribirse en Kafka.

  3. Configure el Output Format, la Key Column y los Kafka Producer Parameters.

    • Output Format: Especifica el formato de valor para los registros escritos en Kafka. Los formatos válidos son Canal CDC y JSON. Para obtener más información, consulte Appendix: Output formats.

    • Key Column: Especifica las columnas de origen cuyos valores se serializan en cadenas y se concatenan con comas para formar la clave de los registros escritos en el topic de Kafka.

      Nota
      • Las reglas de serialización para los valores de columna son las mismas que las reglas de serialización JSON para los tipos de datos de columna en Hologres.

      • Los valores de clave en el topic de Kafka determinan las particiones en las que se escriben los datos. Los datos con el mismo valor de clave se escriben en la misma partición. Para garantizar que un consumidor pueda consumir datos del topic de Kafka en secuencia, se recomienda utilizar las columnas de clave principal de la tabla de Hologres como columnas de clave.

      • Si no se utiliza ninguna columna de origen como columna de clave, los valores de clave en el topic de Kafka serán nulos. En este caso, los datos se escriben en particiones aleatorias del topic de Kafka.

    • Kafka Producer Parameters: Estos parámetros controlan la consistencia, la estabilidad y el manejo de excepciones para las operaciones de escritura. La configuración predeterminada es suficiente para la mayoría de los casos de uso. Para obtener información sobre los parámetros del productor admitidos por diferentes versiones de Kafka, consulte la documentación oficial de Kafka.

4. Alertas

Para evitar que los errores de la tarea provoquen retrasos en la sincronización de datos empresariales, puede establecer una directiva de alertas para la tarea de sincronización.

  1. Haga clic en Alert Settings en la esquina superior derecha de la página para abrir la página de configuración de Alert Rule Configurations for Real-time Synchronization Subnode.

  2. Haga clic en Add Alert Rule para configurar una regla de alerta.

    Nota

    Las reglas de alerta que defina aquí se aplican a las subtareas de sincronización en tiempo real que genera esta tarea. Después de configurar la tarea, puede consultar y modificar las reglas de alerta para estas subtareas en la página Run and manage real-time synchronization tasks.

  3. Gestione las reglas de alerta.

    Para las reglas de alerta existentes, puede usar el interruptor para habilitarlas o deshabilitarlas. También puede enviar alertas a diferentes destinatarios según el nivel de alerta.

5. Configuración avanzada

La tarea de sincronización proporciona varios parámetros que puede modificar según sea necesario.

Nota

Antes de realizar cambios, asegúrese de comprender completamente la función de cada parámetro para evitar errores inesperados o problemas de calidad de datos.

  1. Haga clic en advanced settings en la esquina superior derecha de la página para abrir la página de configuración avanzada.

  2. En la página de advanced settings, modifique los valores de los parámetros según sea necesario.

6. Resource group

Puede hacer clic en Configure Resource Group en la esquina superior derecha para consultar y cambiar el resource group actual de la tarea.

7. Ejecute la tarea de sincronización

  1. Después de completar todos los ajustes, haga clic en Complete en la parte inferior de la página.

  2. En la página Data Integration > Synchronization Task, busque la tarea que creó y haga clic en Start en la columna Operations.

  3. Haga clic en el Name/ID de la tarea correspondiente en la Task List para consultar su proceso de ejecución detallado.

Realice operaciones de O&M en la tarea de sincronización

Consulte el estado de la tarea de sincronización

Una vez creada la tarea de sincronización, vaya a la página de tareas para consultar todas las tareas de sincronización del espacio de trabajo y su información básica.

La lista de tareas muestra las siguientes columnas: Name/ID, Data Source Synchronization Solution (tipo de sincronización, origen y destino), Status, Execution Overview, resource group y Actions.

  • Puede Start o Stop una tarea de sincronización en la columna Actions. En More, puede realizar otras operaciones, como Edit y View.

  • Para las tareas iniciadas, puede consultar el estado básico de ejecución en el Execution Overview y hacer clic en el área de resumen correspondiente para ver los detalles de ejecución.

Una tarea de sincronización en tiempo real desde una tabla de Hologres a Kafka consta de los siguientes tres pasos:

  • Structure Migration: Incluye el método de creación de la tabla de destino (tabla existente o creación automática de tabla). Si selecciona la creación automática de tabla, se muestra la instrucción de lenguaje de definición de datos (DDL) para crear la tabla.

  • Full initialization: Si selecciona Full Sync para el paso de sincronización de su tarea, el progreso de la inicialización completa se muestra aquí.

  • Real-time Data Synchronization: Contiene estadísticas sobre la sincronización en tiempo real, incluido el tráfico de lectura/escritura en tiempo real, datos sucios, failovers y registros de operaciones.

Vuelva a ejecutar una tarea

En casos especiales, como cuando necesita modificar campos sincronizados o ajustar la información de la tabla de destino, puede hacer clic en Rerun en la columna Operations de la tarea de sincronización. Esta acción sincroniza los campos ajustados y otros cambios con el destino. El proceso omite las tablas no modificadas que ya se sincronizaron previamente.

  • Para volver a ejecutar la tarea sin ningún cambio, haga clic en Rerun.

  • Si edita la tarea, haga clic en Complete después de realizar los cambios. La acción de la tarea cambia a Apply Updates. Al hacer clic en Apply Updates, la tarea se vuelve a ejecutar con la nueva configuración.

Apéndice: Descripción de formatos de salida

Canal CDC

Canal CDC es un formato de datos CDC definido por Alibaba Canal.

  • Campos y significados

    Nombre del campo

    Significado del valor del campo

    id

    El valor de este campo es fijo: 0.

    database

    El nombre de la base de datos de Hologres.

    table

    El nombre de la tabla de Hologres.

    pkNames

    La columna de clave principal de la tabla de Hologres.

    isDdl

    Indica si los registros binarios registran cambios DDL. El valor de este campo es fijo: false, ya que no se admite la sincronización de mensajes para cambios DDL en la tabla de Hologres.

    type

    El tipo de cambio DML. Valores válidos: INSERT, UPDATE y DELETE.

    Nota

    Una operación de cambio en la tabla de Hologres genera dos registros cuyo tipo es UPDATE. Estos registros se escribirán en el topic de Kafka.

    • Uno de los registros corresponde al contenido de los datos antes del cambio.

    • El otro corresponde al contenido de los datos después del cambio.

    • Si desea sincronizar datos completos desde la tabla de Hologres al topic de Kafka, el valor del campo type es fijo: INSERT.

    es

    Una marca de tiempo de 13 dígitos en milisegundos. La marca de tiempo indica el momento en que se modificaron los datos en la tabla de Hologres.

    Si desea sincronizar datos completos desde la tabla de Hologres al topic de Kafka, el valor del campo es es fijo: 0.

    ts

    Una marca de tiempo de 13 dígitos en milisegundos. La marca de tiempo indica el momento en que la tarea de sincronización lee los registros binarios generados para la tabla de Hologres.

    sql

    El código SQL que registra los cambios DDL cuando los registros binarios generados para la tabla de Hologres contienen dichos cambios. El valor de este campo es fijo como una cadena vacía, ya que no se admite la sincronización de mensajes para cambios DDL en la tabla de Hologres.

    sqlType

    Los tipos de datos de campo SQL a los que corresponden los tipos de datos de los campos de la tabla de Hologres.

    Asignaciones entre los tipos de datos de Hologres y los valores válidos de sqlType:

    • bigint: -5

    • decimal cuya escala no es 0: 3

    • decimal cuya escala es 0: -5

    • boolean: 16

    • date: 91

    • float4: 6

    • float8: 8

    • integer: 4

    • smallint: 5

    • json: 12

    • text: 12

    • varchar: 12

    • timestamp: 93

    • timestamptz: 93

    • bigserial: -5

    • bytea: 12

    • char: 12

    • serial: 4

    • time: 92

    • int4[]: 12

    • int8[]: 12

    • float4[]: 12

    • float8[]: 12

    • boolean[]: 12

    • text[]: 12

    mysqlType

    Los tipos de datos de campo MySQL a los que corresponden los tipos de datos de los campos de la tabla de Hologres.

    Asignaciones entre los tipos de datos de Hologres y los valores válidos de mysqlType:

    • bigint: BIGINT

    • int4: INT

    • decimal cuya escala no es 0: DECIMAL(xx,xx)

    • decimal cuya escala es 0: BIGINT

    • boolean: BOOLEAN

    • date: DATE

    • float4: FLOAT

    • float8: DOUBLE

    • integer: INT

    • smallint: SMALLINT

    • json: TEXT

    • text: TEXT

    • varchar: VARCHAR(xx)

    • timestamp: DATETIME(6)

    • timestamptz: DATETIME(6)

    • bigserial: BIGINT

    • bytea: TEXT

    • char: TEXT

    • serial: INT

    • time: TIME(6)

    • int4[]: TEXT

    • int8[]: TEXT

    • float4[]: TEXT

    • float8[]: TEXT

    • boolean[]: TEXT

    • text[]: TEXT

    data

    Los cambios de datos en la tabla de Hologres. Los nombres de campo en la tabla de Hologres se utilizan como claves, y los cambios de datos en los campos se serializan en cadenas y se utilizan como valores. Luego, las claves y los valores se organizan como cadenas con formato JSON. Para obtener más información sobre la serialización, consulte Description of JSON serialization.

    old

    Se generan dos registros cuyo tipo es UPDATE para una operación de cambio en la tabla de Hologres y se escriben en el topic de Kafka.

    Los registros corresponden al contenido de los datos antes y después del cambio. En el primer registro, el campo old se utiliza para registrar el contenido de los datos en la tabla de Hologres antes del cambio. El campo data se utiliza para registrar el contenido de los datos para cambios DML distintos de UPDATE.

  • Ejemplo de datos con formato Canal JSON que corresponden a cambios de datos generados por una operación INSERT en los registros binarios de la tabla de Hologres

    {
        "id": 0,
        "database": "test",
        "table": "tp_int",
        "pkNames": [
            "id"
        ],
        "isDdl": false,
        "type": "INSERT",
        "es": 1640007049196,
        "ts": 1639633142960,
        "sql": "",
        "sqlType": {
            "bigint": -5,
            "integer": 4,
            "smallint": 5
        },
        "mysqlType": {
            "bigint": "BIGINT",
            "integer": "INT",
            "smallint": "SMALLINT"
        },
        "data": [
            {
                "bigint": "9223372036854775807",
                "integer": "2147483647",
                "smallint": "32767"
            }
        ],
        "old": null
    }
  • Ejemplo de datos con formato Canal JSON que corresponden a datos completos sincronizados desde la tabla de Hologres

    {
        "id": 0,
        "database": "test",
        "table": "tp_int",
        "pkNames": [
            "id"
        ],
        "isDdl": false,
        "type": "INSERT",
        "es": 0,
        "ts": 1639633142960,
        "sql": "",
        "sqlType": {
            "bigint": -5,
            "integer": 4,
            "smallint": 5
        },
        "mysqlType": {
            "bigint": "BIGINT",
            "integer": "INT",
            "smallint": "SMALLINT"
        },
        "data": [
            {
                "bigint": "9223372036854775807",
                "integer": "2147483647",
                "smallint": "32767"
            }
        ],
        "old": null
    }
  • Ejemplo de dos registros de datos con formato Canal JSON que corresponden a cambios de datos generados por una operación UPDATE en los registros binarios de la tabla de Hologres

    // Data content before a change
    {
        "id": 0,
        "database": "test",
        "table": "tp_int",
        "pkNames": [
            "id"
        ],
        "isDdl": false,
        "type": "UPDATE",
        "es": 1640007049196,
        "ts": 1639633142960,
        "sql": "",
        "sqlType": {
            "bigint": -5,
            "integer": 4,
            "smallint": 5
        },
        "mysqlType": {
            "bigint": "BIGINT",
            "integer": "INT",
            "smallint": "SMALLINT"
        },
        "old": [
            {
                "bigint": "0",
                "integer": "0",
                "smallint": "0"
            }
        ],
        "data": null
    }
    // Data content after a change
    {
        "id": 0,
        "database": "test",
        "table": "tp_int",
        "pkNames": [
            "id"
        ],
        "isDdl": false,
        "type": "UPDATE",
        "es": 1640007049196,
        "ts": 1639633142960,
        "sql": "",
        "sqlType": {
            "bigint": -5,
            "integer": 4,
            "smallint": 5
        },
        "mysqlType": {
            "bigint": "BIGINT",
            "integer": "INT",
            "smallint": "SMALLINT"
        },
        "data": [
            {
                "bigint": "9223372036854775807",
                "integer": "2147483647",
                "smallint": "32767"
            }
        ],
        "old": null
    }
  • Ejemplo de datos con formato Canal JSON que corresponden a cambios de datos generados por una operación DELETE en los registros binarios de la tabla de Hologres

    {
        "id": 0,
        "database": "test",
        "table": "tp_int",
        "pkNames": [
            "id"
        ],
        "isDdl": false,
        "type": "DELETE",
        "es": 1640007049196,
        "ts": 1639633142960,
        "sql": "",
        "sqlType": {
            "bigint": -5,
            "integer": 4,
            "smallint": 5
        },
        "mysqlType": {
            "bigint": "BIGINT",
            "integer": "INT",
            "smallint": "SMALLINT"
        },
        "data": [
            {
                "bigint": "9223372036854775807",
                "integer": "2147483647",
                "smallint": "32767"
            }
        ],
        "old": null
    }

Json

El formato JSON utiliza los nombres de los campos del registro binario de Hologres como claves y serializa los valores de los campos en cadenas. Los pares clave-valor resultantes se escriben en el topic de Kafka como cadenas con formato JSON.

Descripción de la serialización JSON

Serialización de tipos de datos de Hologres

Tipo de dato de Hologres

Resultado de serialización escrito en Kafka

bit

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

inet

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

interval

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

money

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

oid

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

timetz

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

uuid

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

varbit

No compatible. El sistema reporta un error al iniciar la tarea de sincronización.

jsonb

No compatible. El sistema reporta un error que indica que no se pueden analizar sintácticamente los registros binarios después de escribir los datos en Kafka.

bigint

Una cadena numérica. Por ejemplo: 2.

decimal(38,18)

Una cadena numérica cuya cantidad de decimales coincide con la precisión. Por ejemplo: 1.234560000000000000.

decimal(38,0)

Una cadena numérica cuya cantidad de decimales coincide con la precisión. Por ejemplo: 2.

boolean

"true"/"false".

date

Una cadena de fecha con formato yyyy-MM-dd. Por ejemplo: 2024-02-02.

float4/float8/double

Una cadena numérica. El sistema no agrega ceros al resultado de la serialización. Esto garantiza que el resultado coincida con los datos consultados desde la tabla de Hologres. Por ejemplo: 1.24.

interger/smallint

Una cadena numérica. Por ejemplo: 2.

json

Una cadena JSON. Por ejemplo: {\"a\":2}.

text/varchar

Una cadena codificada en UTF-8. Por ejemplo: text.

timestamp

Una cadena de tiempo con precisión de microsegundos

  • Si las partes de milisegundos y microsegundos son 0, ambas se omiten automáticamente al escribir los datos en Kafka.

    • Por ejemplo, la cadena de tiempo 2020-01-01 09:01:01.000000 se convierte en 2020-01-01 09:01:01 después de escribirse en Kafka.

  • Si la parte de microsegundos es 0, los ceros posteriores a los milisegundos se omiten durante la escritura. Por ejemplo:

    • La cadena de tiempo 2020-01-01 09:01:01.123000 se convierte en 2020-01-01 09:01:01.123 después de escribirse en Kafka.

  • Si la parte de microsegundos no es 0, el sistema agrega automáticamente tres ceros después de dicha parte al escribir los datos en Kafka.

    • Por ejemplo, la cadena de tiempo 2020-01-01 09:01:01.123457 se convierte en 2020-01-01 09:01:01.123457000 después de escribirse en Kafka.

timestamp with time zone

Una cadena de tiempo con precisión de milisegundos. Por ejemplo: 2020-01-01 09:01:01.123.

  • Si la parte de milisegundos es 0, se omite automáticamente al escribir los datos en Kafka.

    • Por ejemplo, la cadena de tiempo 2020-01-01 09:01:01.000 se convierte en 2020-01-01 09:01:01 después de escribirse en Kafka.

bigserial

Una cadena numérica. Por ejemplo: 2.

bytea

Una cadena codificada en Base64. Por ejemplo: ASDB==.

char

Una cadena de longitud fija. Por ejemplo: char.

serial

Una cadena numérica. Por ejemplo: 2

time

Una cadena de tiempo con precisión de microsegundos.

  • Si las partes de milisegundos y microsegundos son 0, ambas se omiten automáticamente al escribir los datos en Kafka:

    • Por ejemplo, la cadena de tiempo 2020-01-01 09:01:01.000000 se convierte en 2020-01-01 09:01:01 después de escribirse en Kafka.

  • Si la parte de milisegundos o microsegundos no es 0, el sistema agrega ceros para la parte de nanosegundos después de los microsegundos:

    • Por ejemplo, la cadena de tiempo 2020-01-01 09:01:01.123457 se convierte en 2020-01-01 09:01:01.123457000 después de escribirse en Kafka.

int4[]/int8[]

Un arreglo de cadenas. Por ejemplo: ["1","2","3","4"].

float4[]/float8[]

Un arreglo de cadenas. Por ejemplo: ["1.23","2.34"].

boolean[]

Un arreglo de cadenas. Por ejemplo: ["true","false"].

text[]

Un arreglo de cadenas. Por ejemplo: ["a","b"].

Nota

Si los valores de los campos de tiempo serializados quedan fuera del rango [0001-01-01,9999-12-31], el resultado de la serialización diferirá del resultado de la consulta en Hologres.

Descripción de los campos de metadatos

Nota
  • Cada operación INSERT, UPDATE o DELETE registrada en los registros binarios de la tabla de Hologres genera dos registros con formato JSON, de manera similar al uso del formato Canal CDC. Estos registros se sincronizan con el topic de Kafka correspondiente. Uno de ellos representa el contenido de los datos antes del cambio y el otro refleja el contenido posterior al cambio.

  • Para el formato JSON, puede seleccionar Whether to output source binlog metadata.. Si selecciona esta opción, el sistema agrega varios campos de metadatos al objeto JSON. Dichos campos describen las propiedades del registro de cambios del registro binario de Hologres.

Nombre del campo

Significado del valor del campo

_sequence_id_

Identificador único de los registros en los registros binarios de la tabla de Hologres. Si realiza una sincronización completa, el valor de este campo se llena como null.

_operation_type_

Tipo de cambio DML. Valores válidos: "I", "U" y "D", que indican operaciones INSERT, UPDATE y DELETE. Si realiza una sincronización completa, el valor de este campo se llena como "I".

_execute_time_

Marca de tiempo de 13 dígitos en milisegundos.

  • Indica el momento en que se modificaron los datos en la tabla de Hologres.

  • Si realiza una sincronización completa, el valor de este campo se llena como 0.

_before_image_

  • Indica si los datos del mensaje para sincronización incremental corresponden al contenido anterior al cambio. Valores válidos: Y y N, que significan sí y no, respectivamente.

  • Si realiza una sincronización completa, el valor de este campo se llena como N.

  • Si el tipo de mensaje del cambio es INSERT, el valor de este campo se llena como N.

  • Si el tipo de mensaje del cambio es UPDATE, se escriben dos registros en Kafka. El valor de este campo para uno de los registros se llena como Y, y para el otro como N.

  • Si el tipo de mensaje del cambio es DELETE, el valor de este campo se llena como Y.

_after_image_

  • Indica si los datos del mensaje para sincronización incremental corresponden al contenido posterior al cambio. Valores válidos: Y y N, que significan sí y no, respectivamente.

  • Si realiza una sincronización completa, el valor de este campo se llena como Y.

  • Si el tipo de mensaje del cambio es INSERT, el valor de este campo se llena como Y.

  • Si el tipo de mensaje del cambio es UPDATE, se escriben dos registros en Kafka. El valor de este campo para uno de los registros se llena como Y, y para el otro como N.

  • Si el tipo de mensaje del cambio es DELETE, el valor de este campo se llena como N.