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 anested.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ácticamenteDEFAULT (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.enableden 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.enableden false y reinicie el despliegue.
-