Cette rubrique décrit les configurations d'évolution du schéma pour les tâches d'ingestion de données Flink CDC.
Configurations de l'évolution du schéma
Les tâches d'ingestion de données Flink CDC synchronisent les modifications de schéma depuis la source vers la table de destination, telles que la création d'une table, l'ajout d'une colonne, le renommage d'une colonne, la modification du type d'une colonne, la suppression d'une colonne et la suppression d'une table.
La table de destination peut ne pas prendre en charge toutes les modifications de schéma. Ajoutez l'option schema.change.behavior au module pipeline pour contrôler la manière dont la table de destination gère une modification de schéma.
pipeline:
schema.change.behavior: EVOLVE
Le framework prend uniquement en charge la synchronisation des types de modification de schéma suivants. Les modifications de schéma non répertoriées peuvent provoquer des exceptions dans la tâche et nécessiter un redémarrage sans état pour récupérer.
Créer une table (
CREATE TABLE ...)Ajouter une colonne (
ALTER TABLE ... ADD COLUMN ...)Modifier le type de colonne (
ALTER TABLE ... MODIFY COLUMN ...)Supprimer une colonne (
ALTER TABLE ... DROP COLUMN ...)Renommer une colonne (
ALTER TABLE ... RENAME COLUMN ...)Vider une table (
TRUNCATE TABLE ...)Supprimer une table (
DROP TABLE ...)Modifier l'ordre des colonnes (
MODIFY COLUMN ... FIRST/AFTERouCHANGE COLUMN ... FIRST/AFTER)
L'événement de modification de l'ordre des colonnes est reconnu et traité à partir de la version VVR 11.9.
Comportement de l'évolution du schéma
|
Mode |
Description |
|
LENIENT (par défaut) |
La tâche d'ingestion de données Flink CDC convertit avec souplesse les modifications de schéma et les envoie à la table de destination. La conversion suit ces règles :
Utilisez ce mode lorsque vous souhaitez que la tâche d'ingestion de données synchronise les modifications de schéma aussi automatiquement que possible. |
|
IGNORE |
La tâche d'ingestion de données Flink CDC ignore toutes les modifications de schéma. Les modifications de schéma en amont ne sont pas appliquées à la table de destination. Utilisez ce mode lorsque votre table de destination ne prend pas en charge les modifications de schéma, ou si vous ne souhaitez pas que des modifications de schéma se produisent tout en continuant à recevoir des données des colonnes inchangées. |
|
EVOLVE |
La tâche d'ingestion de données Flink CDC applique toutes les modifications de schéma à la table de destination. Si une modification de schéma ne peut pas être appliquée à la table de destination, la tâche génère une exception et déclenche un basculement. Utilisez ce mode lorsque vous souhaitez que la tâche d'ingestion de données synchronise les modifications de schéma de manière aussi stricte que possible. Important
Dans ce mode, si la destination ne peut pas appliquer tous les événements de modification de schéma, la tâche peut subir un basculement et ne pas pouvoir se rétablir automatiquement. |
|
TRY_EVOLVE |
La tâche d'ingestion de données Flink CDC tente d'appliquer les modifications de schéma à la table de destination. Si la table de destination ne peut pas traiter une modification de schéma, la tâche n'échoue pas et ne redémarre pas. Elle tente plutôt de gérer la modification en transformant les données suivantes. Utilisez ce mode lorsque vous souhaitez que la tâche d'ingestion de données synchronise les modifications de schéma de manière aussi stricte que possible tout en conservant un certain degré de tolérance aux pannes. Important
En mode TRY_EVOLVE, si une modification de schéma ne peut pas être appliquée, les données suivantes provenant de la source en amont peuvent perdre des colonnes ou être tronquées pour s'adapter au schéma de la table de destination. |
|
EXCEPTION |
La tâche d'ingestion de données Flink CDC n'autorise aucune modification de schéma. La tâche génère une exception lorsqu'elle reçoit un événement de modification de schéma. Utilisez ce mode lorsque vous devez vous assurer qu'aucune modification de schéma ne se produit dans la tâche d'ingestion de données et que seules les données sont synchronisées. |
Contrôle des modifications de schéma au niveau de la destination
Dans les scénarios de synchronisation de données, Flink CDC offre une gestion fine des modifications de schéma. Utilisez des règles pour contrôler les types de modifications de schéma que la destination reçoit, ce qui permet d'éviter la perte de données ou l'interruption de service causée par des modifications inattendues.
Pour ce faire, configurez le module sink avec les options include.schema.changes et exclude.schema.changes.
|
Paramètre |
Description |
Obligatoire |
Type de données |
Valeur par défaut |
Remarques |
|
include.schema.changes |
Les modifications de schéma qui peuvent être appliquées. |
Non |
List<String> |
Aucune |
Toutes les modifications sont prises en charge par défaut. |
|
exclude.schema.changes |
Les modifications de schéma qui ne peuvent pas être appliquées. |
Non |
List<String> |
Aucune |
Prioritaire sur |
Le tableau suivant répertorie tous les types d'événements de modification de schéma configurables :
|
Type d'événement |
Description |
|
|
Ajouter une colonne |
|
|
Modifier le type d'une colonne |
|
|
Créer une table |
|
|
Supprimer une colonne |
|
|
Supprimer une table |
|
|
Renommer une colonne |
|
|
Vider une table |
|
|
Modifier l'ordre des colonnes |
Les modifications de schéma prennent en charge la correspondance partielle. Par exemple, spécifier drop équivaut à spécifier à la fois drop.column et drop.table. Spécifier table équivaut à spécifier create.table, truncate.table et drop.table.
Exemples
Exemple 1 : Définissez le comportement d'évolution du schéma sur EVOLVE pour synchroniser les modifications de schéma en amont vers la destination.
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
Exemple 2 : Appliquez les événements de création de table et de colonne de la table en amont à la destination, et ignorez les événements de suppression de colonne.
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