Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Problemas de sincronización de datos

Última actualización: Sep 03, 2026

Este tema describe los problemas comunes de sincronización de datos y sus soluciones.

Cambios de esquema JSON de Kafka a Hologres

La solución convencional consiste en detener el despliegue de Flink, modificar el código y el esquema de la tabla de Hologres, y luego volver a desplegar. Sin embargo, este proceso puede causar retrasos en el procesamiento de datos e introducir errores innecesarios.

Realtime Compute for Apache Flink ofrece las siguientes optimizaciones para resolver este problema:

  • Evolución automática de esquemas para el formato JSON de Kafka: si el esquema JSON cambia, el sistema sincroniza automáticamente el nuevo esquema con Hologres sin que sea necesario detener el despliegue ni modificar las sentencias SQL.

  • Inferencia de tipos para el formato JSON de Kafka: no es necesario declarar los tipos de datos de los campos JSON en la DDL.

  • Expansión recursiva de campos JSON anidados: por ejemplo, para los datos JSON {"nested": {"col": true}}, el campo col se expande a nested.col.

Error: Encountered change event for table xxx.xxx whose schema isn't known to this connector

  • Problema

    202x-xx-xx xx:xx:xx,xxx ERROR io.debezium.connector.mysql.BinlogReader    [] - Encountered change event 'Event{header=EventHeaderV4{timestamp=xxx, eventType=TABLE_MAP, serverId=xxx, headerLength=xxx, dataLength=xxx, nextPosition=xxx, flags=xxx}, data=TableMapEventData{tableId=xxx, database='xxx', table='xxx',
    columnTypes=xxx, xxx..., columnMetadata=xxx,xxx,..., columnNullability={xxx,xxx,...}, eventMetadata=null}}' at offset {ts_sec=xxx, file=mysql-bin.xxx, pos=xxx,
    gtids=xxx, ...server_id=xxx, event=xxx} for table xxx.xxx whose schema isn't known to this connector. One possible cause is an incomplete database history topic. Take
    a new snapshot in this case.
    Use the mysqlbinlog tool to view the problematic event: mysqlbinlog --start-position=30946 --stop-position=31028 --verbose mysql-bin.004419
    202x-xx-xx xx:xx:xx,xxx ERROR io.debezium.connector.mysql.BinlogReader    [] - Error during binlog processing. Last offset stored = null, binlog
    reader near position = mysql-bin.xxx/xxx
    202x-xx-xx xx:xx:xx,xxx ERROR io.debezium.connector.mysql.BinlogReader    [] - Failed due to error: Error processing binlog event
    org.apache.kafka.connect.errors.ConnectException: Encountered change event for table statistic.apk info whose schema isn't known to this connector
    	at io.debezium.connector.mysql.AbstractReader.wrap(AbstractReader.java:241)
    	~[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at io.debezium.connector.mysql.AbstractReader.failed(AbstractReader.java:210)
    	~[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at io.debezium.connector.mysql.BinlogReader.handleEvent(BinlogReader.java:607)
    	~[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at com.github.shyiko.mysql.binlog.BinaryLogClient.notifyEventListeners(BinaryLogClient.java:1104)
    	[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at com.github.shyiko.mysql.binlog.BinaryLogClient.listenForEventPackets(BinaryLogClient.java:955)
    	[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:595)
    	[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at com.github.shyiko.mysql.binlog.BinaryLogClientIMT.run(BinaryLogClient.java:839)
    	[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at java.lang.Thread.run(Thread.java:834) [?:1.8.0_102]
    Caused by: org.apache.kafka.connect.errors.ConnectException: Encountered change event for table xxx.xxx whose schema isn't known to this connector
    	at io.debezium.connector.mysql.BinlogReader.informAboutUnknownTableIfRequired(BinlogReader.java:875)
    	~[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at io.debezium.connector.mysql.BinlogReader.handleUpdateTableMetadata(BinlogReader.java:849)
    	~[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	at io.debezium.connector.mysql.BinlogReader.handleEvent(BinlogReader.java:590)
    	~[veverica-connector-mysql-1.12-vvr-3.0.0-SNAPSHOT-jar-with-dependencies.jar:1.12-vvr-3.0.0-SNAPSHOT]
    	... 5 more
  • Causa

    Cuando utiliza la función CDAS o CTAS para leer tablas nuevas, este error puede ocurrir por los siguientes motivos:

    • Es posible que la cuenta de base de datos carezca de los permisos obligatorios en algunas bases de datos que utiliza el despliegue.

    • El despliegue está configurado con 'debezium.snapshot.mode'='never'. Esta configuración hace que el conector lea desde el inicio del registro binario (binlog). Si el esquema de tabla asociado con un evento de cambio temprano en el registro binario no coincide con el esquema de tabla actual, se produce este error.

    • Este error puede ocurrir si Debezium encuentra un cambio que no puede analizar sintácticamente, como DEFAULT (now()).

  • Solución

    • Asegúrese de que la cuenta de base de datos tenga todos los permisos de base de datos que requiere el despliegue. Estos permisos suelen incluir lectura, escritura y modificación de datos, así como creación y modificación de esquemas de tabla y tablas. Para obtener más información, consulte la documentación correspondiente del conector.

    • Utilice el parámetro 'debezium.inconsistent.schema.handling.mode' = 'warn' para evitar errores. No utilice 'debezium.snapshot.mode'='never'.

    • Continúe monitoreando los registros. Busque mensajes io.debezium.connector.mysql.MySqlSchema WARN, que proporcionan detalles sobre los cambios específicos que no se pueden analizar sintácticamente. Por ejemplo, Debezium no puede analizar sintácticamente DEFAULT (now()).

Error: Currently does not support merge StreamExecMiniBatchAssigner type ExecNode in CTAS/CDAS syntax

  • Detalles

    Se produce un error al desplegar o iniciar un despliegue:

    USE CATALOG `test-holo`;
    CREATE TABLE IF NOT EXISTS test_sync
    AS TABLE `test-mysql`.`flink_test`.`test_sync`
    /*+ OPTIONS('server-id'='9021-9030') */;
    Problem: test-ctas
    org.apache.flink.table.api.TableException: Currently does not support merge StreamExecMiniBatchAssigner type ExecNode in CTAS/CDAS syntax.
        at org.apache.flink.table.planner.plan.nodes.exec.processor.EvolvingTableSourceMergeProcessor$EvolvingNodeMergeVisitor.visit
    (EvolvingTableSourceMergeProcessor.java:285)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.accept(ExecNodeBase.java:249)
        at org.apache.flink.table.planner.plan.nodes.exec.visitor.ExecNodeVisitorImpl.lambda$visitInputs$0(ExecNodeVisitorImpl.java:34)
        at java.util.ArrayList.forEach(ArrayList.java:1249)
        at org.apache.flink.table.planner.plan.nodes.exec.visitor.ExecNodeVisitorImpl.visitInputs(ExecNodeVisitorImpl.java:34)
        at org.apache.flink.table.planner.plan.nodes.exec.visitor.ExecNodeVisitorImpl.visit(ExecNodeVisitorImpl.java:30)
        at org.apache.flink.table.planner.plan.nodes.exec.processor.EvolvingTableSourceMergeProcessor$EvolvingNodeMergeVisitor.visit
    (EvolvingTableSourceMergeProcessor.java:263)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.accept(ExecNodeBase.java:249)
        at org.apache.flink.table.planner.plan.nodes.exec.visitor.ExecNodeVisitorImpl.lambda$visitInputs$0(ExecNodeVisitorImpl.java:34)
        at java.util.ArrayList.forEach(ArrayList.java:1249)
        at org.apache.flink.table.planner.plan.nodes.exec.visitor.ExecNodeVisitorImpl.visitInputs(ExecNodeVisitorImpl.java:34)
  • Causa

    Los despliegues CTAS y CDAS no admiten operaciones MiniBatch. Sin embargo, la configuración table.exec.mini-batch.enabled: 'true' está habilitada en el despliegue SQL.

  • Solución

    Elimine las configuraciones relacionadas con MiniBatch del despliegue SQL.

    • Para despliegues con errores

      En la sección Other Configuration de la pestaña Deployment Defaults de la página Configurations, elimine la información de configuración relacionada con MiniBatch o establezca table.exec.mini-batch.enabled en false. Después de guardar los cambios, vuelva a crear y despliegue el despliegue SQL.

    • Para despliegues existentes

      Si un despliegue omitió la verificación previa al despliegue detallada y se completó, vaya a la pestaña Deployment Details de la página Deployments. En la sección Other Configuration de Parameters, elimine la información de configuración de MiniBatch o establezca table.exec.mini-batch.enabled en false y reinicie el despliegue.