Bu konu, Flink CDC veri alımı işleri için şema evrimi yapılandırmalarını açıklar.
Şema evrimi yapılandırmaları
Flink CDC veri alımı işleri; tablo oluşturma, sütun ekleme, sütun yeniden adlandırma, sütun türü değiştirme, sütun silme ve tablo silme gibi şema değişikliklerini kaynaktan hedef tabloya senkronize edebilir.
Hedef tablo tüm şema değişikliklerini desteklemeyebilir. Hedef tablonun şema değişikliklerini nasıl işleyeceğini kontrol etmek için işlem hattı modülüne schema.change.behavior seçeneğini ekleyebilirsiniz.
pipeline:
schema.change.behavior: EVOLVE
Çerçeve şu anda yalnızca aşağıdaki şema değişikliği türlerinin senkronizasyonunu destekler. Listede yer almayan şema değişiklikleri iş istisnalarına neden olabilir; kurtarma için durum bilgisi içermeyen bir yeniden başlatma gerekebilir.
Tablo oluşturma (
CREATE TABLE ...)Sütun ekleme (
ALTER TABLE ... ADD COLUMN ...)Sütun türünü değiştirme (
ALTER TABLE ... MODIFY COLUMN ...)Sütun silme (
ALTER TABLE ... DROP COLUMN ...)Sütun yeniden adlandırma (
ALTER TABLE ... RENAME COLUMN ...)Tabloyu boşaltma (
TRUNCATE TABLE ...)Tablo silme (
DROP TABLE ...)Sütun sırasını değiştirme (
MODIFY COLUMN ... FIRST/AFTERveyaCHANGE COLUMN ... FIRST/AFTER)
Sütun sırası değiştirme olayı VVR 11.9 ve sonraki sürümlerde tanınır ve işlenir.
Şema evrimi davranışı
|
Mod |
Açıklama |
|
LENIENT (varsayılan) |
Flink CDC veri alımı işi, şema değişikliklerini esnek biçimde dönüştürür ve hedef tabloya gönderir. Dönüşüm aşağıdaki kuralları izler:
Veri alımı işinin şema değişikliklerini mümkün olduğunca otomatik olarak senkronize etmesini istediğinizde bu modu kullanın. |
|
IGNORE |
Flink CDC veri alımı işi tüm şema değişikliklerini yok sayar. Kaynak tarafındaki şema değişiklikleri hedef tabloya uygulanmaz. Hedef tablonuz şema değişikliklerini desteklemiyorsa, şema değişikliklerinin gerçekleşmesini istemiyorsanız ve değişmemiş sütunlardan veri almaya devam etmek istiyorsanız bu modu kullanın. |
|
EVOLVE |
Flink CDC veri alımı işi tüm şema değişikliklerini hedef tabloya uygular. Bir şema değişikliği hedef tabloya uygulanamadığında iş bir istisna oluşturur ve yük devretmeyi tetikler. Veri alımı işinin şema değişikliklerini mümkün olduğunca sıkı biçimde senkronize etmesini istediğinizde bu modu kullanın. Önemli
Bu modda, hedef tüm şema değişikliği olaylarını uygulayamazsa iş yük devredebilir ve kendi kendine kurtaramaz. |
|
TRY_EVOLVE |
Flink CDC veri alımı işi, şema değişikliklerini hedef tabloya uygulamayı dener. Hedef tablo bir şema değişikliğini işleyemezse iş başarısız olmaz veya yeniden başlatılmaz. Bunun yerine, değişikliği sonraki verileri dönüştürerek işlemeye çalışır. Veri alımı işinin şema değişikliklerini mümkün olduğunca sıkı biçimde senkronize ederken belirli bir hata toleransı düzeyini korumasını istediğinizde bu modu kullanın. Önemli
TRY_EVOLVE modunda, bir şema değişikliği uygulanamadığında kaynaktan gelen sonraki veriler hedef tablo şemasına uymak için sütunları kaybedebilir veya kesilebilir. |
|
EXCEPTION |
Flink CDC veri alımı işi herhangi bir şema değişikliğine izin vermez. İş, bir şema değişikliği olayı aldığında bir istisna oluşturur. Veri alımı işinde hiçbir şema değişikliği olmamasını ve yalnızca verilerin senkronize edilmesini sağlamanız gerektiğinde bu modu kullanın. |
Hedefte şema değişikliklerini kontrol etme
Veri senkronizasyonu senaryolarında Flink CDC, ayrıntılı şema değişikliği yönetimi sağlar. Beklenmeyen değişikliklerden kaynaklanan veri kaybını veya hizmet kesintisini önlemek için hedefin alacağı şema değişikliği türlerini kurallarla kontrol edebilirsiniz.
Bunu yapmak için sink modülünü include.schema.changes ve exclude.schema.changes seçenekleriyle yapılandırın.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aşağıdaki tabloda yapılandırılabilir tüm şema değişikliği olay türleri listelenmiştir:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Şema değişiklikleri kısmi eşleşmeyi destekler. Örneğin, drop belirtmek, hem drop.column hem de drop.table belirtmeye eşdeğerdir. table belirtmek ise create.table, truncate.table ve drop.table belirtmeye eşdeğerdir.
Örnekler
Örnek 1: Kaynak tarafındaki şema değişikliklerini hedefe senkronize etmek için şema değişikliği davranışını EVOLVE olarak ayarlayın.
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
Örnek 2: Kaynak tablodan gelen tablo oluşturma ve sütun olaylarını hedefe uygulayın, sütun silme olaylarını ise yok sayın.
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