Este tema describe las configuraciones de evolución de esquema para los trabajos de ingesta de datos de Flink CDC.
Configuraciones de evolución de esquema
Los trabajos de ingesta de datos de Flink CDC sincronizan cambios de esquema desde el origen hasta la tabla de destino. Entre estos cambios se incluyen crear una tabla, agregar una columna, renombrar una columna, modificar un tipo de columna, eliminar una columna y eliminar una tabla.
Es posible que la tabla de destino no admita todos los cambios de esquema. Agregue la opción schema.change.behavior al módulo pipeline para controlar cómo gestiona la tabla de destino cada cambio de esquema.
pipeline:
schema.change.behavior: EVOLVE
Actualmente, el framework solo admite la sincronización de los siguientes tipos de cambios de esquema. Los cambios que no aparecen en esta lista pueden provocar excepciones en el trabajo y requerir un reinicio sin estado para su recuperación.
Crear tabla (
CREATE TABLE ...)Agregar columna (
ALTER TABLE ... ADD COLUMN ...)Modificar tipo de columna (
ALTER TABLE ... MODIFY COLUMN ...)Eliminar columna (
ALTER TABLE ... DROP COLUMN ...)Renombrar columna (
ALTER TABLE ... RENAME COLUMN ...)Truncar tabla (
TRUNCATE TABLE ...)Eliminar tabla (
DROP TABLE ...)Modificar orden de columnas (
MODIFY COLUMN ... FIRST/AFTERoCHANGE COLUMN ... FIRST/AFTER)
El evento de modificación del orden de columnas se reconoce y procesa a partir de VVR 11.9.
Comportamiento de evolución de esquema
|
Modo |
Descripción |
|
LENIENT (predeterminado) |
El trabajo de ingesta de datos de Flink CDC convierte los cambios de esquema de forma flexible y los envía a la tabla de destino. La conversión sigue estas reglas:
Utilice este modo cuando necesite que el trabajo de ingesta sincronice los cambios de esquema de la manera más automática posible. |
|
IGNORE |
El trabajo de ingesta de datos de Flink CDC ignora todos los cambios de esquema. Los cambios de esquema del origen no se aplican a la tabla de destino. Este modo es adecuado si la tabla de destino no admite cambios de esquema o si usted prefiere evitarlos y seguir recibiendo datos de las columnas sin modificaciones. |
|
EVOLVE |
El trabajo de ingesta de datos de Flink CDC aplica todos los cambios de esquema a la tabla de destino. Si no se logra aplicar un cambio de esquema a la tabla de destino, el trabajo genera una excepción y desencadena un failover. Utilice este modo cuando requiera que el trabajo de ingesta sincronice los cambios de esquema de la forma más estricta posible. Importante
En este modo, si el destino no puede aplicar todos los eventos de cambio de esquema, el trabajo podría entrar en failover sin posibilidad de recuperarse automáticamente. |
|
TRY_EVOLVE |
El trabajo de ingesta de datos de Flink CDC intenta aplicar los cambios de esquema a la tabla de destino. Si esta no puede procesar un cambio, el trabajo no falla ni se reinicia. En su lugar, intenta gestionar el cambio mediante la transformación de los datos posteriores. Utilice este modo cuando busque sincronizar los cambios de esquema con la mayor rigurosidad posible, pero conservando cierto grado de tolerancia a fallos. Importante
En el modo TRY_EVOLVE, si no se aplica un cambio de esquema, los datos posteriores del origen podrían perder columnas o truncarse para ajustarse al esquema de la tabla de destino. |
|
EXCEPTION |
El trabajo de ingesta de datos de Flink CDC no permite ningún cambio de esquema. El trabajo genera una excepción al recibir un evento de cambio de esquema. Utilice este modo cuando deba garantizar que no ocurra ningún cambio de esquema durante la ingesta y únicamente se sincronicen datos. |
Control de cambios de esquema en el destino
En los escenarios de sincronización de datos, Flink CDC ofrece una gestión detallada de los cambios de esquema. Mediante reglas, usted controla qué tipos de cambios recibe el destino, lo cual previene pérdidas de datos o interrupciones del servicio provocadas por modificaciones inesperadas.
Para ello, configure el módulo sink con las opciones include.schema.changes y exclude.schema.changes.
|
Parámetro |
Descripción |
Obligatorio |
Tipo de dato |
Valor predeterminado |
Observaciones |
|
include.schema.changes |
Los cambios de esquema que se permiten aplicar. |
No |
List<String> |
Ninguna |
De forma predeterminada, se admiten todos los cambios. |
|
exclude.schema.changes |
Los cambios de esquema que no se aplican. |
No |
List<String> |
Ninguna |
Tiene prioridad sobre |
A continuación se muestran todos los tipos de eventos de cambio de esquema que se configuran:
|
Tipo de evento |
Descripción |
|
|
Agregar una columna |
|
|
Modificar el tipo de una columna |
|
|
Crear una tabla |
|
|
Eliminar una columna |
|
|
Eliminar una tabla |
|
|
Renombrar una columna |
|
|
Truncar una tabla |
|
|
Modificar el orden de las columnas |
Los cambios de esquema admiten coincidencias parciales. Por ejemplo, especificar drop equivale a indicar tanto drop.column como drop.table. Especificar table equivale a indicar create.table, truncate.table y drop.table.
Ejemplos
Ejemplo 1: establezca el comportamiento de cambio de esquema en EVOLVE para sincronizar los cambios de esquema del origen hacia el destino.
source:
type: mysql
name: MySQL Source
hostname: ${mysql.hostname}
port: ${mysql.port}
username: ${mysql.username}
password: ${mysql.password}
tables: ${mysql.source.table}
server-id: 7601-7604
sink:
type: values
name: Values Sink
print.enabled: true
sink.print.logger: true
pipeline:
name: mysql to print job
schema.change.behavior: EVOLVE
Ejemplo 2: aplique los eventos de creación de tabla y de columna desde la tabla de origen hacia el destino, e ignore los eventos de eliminación de columna.
source:
type: mysql
name: MySQL Source
hostname: ${mysql.hostname}
port: ${mysql.port}
username: ${mysql.username}
password: ${mysql.password}
tables: ${mysql.source.table}
server-id: 7601-7604
sink:
type: values
name: Values Sink
print.enabled: true
sink.print.logger: true
include.schema.changes: [create.table, column] # Matches the CreateTable, AddColumn, AlterColumnType, RenameColumn, and DropColumn events
exclude.schema.changes: [drop.column] # Excludes the DropColumn event
pipeline:
name: mysql to print job
schema.change.behavior: EVOLVE