CDC DDL
Moduł odpowiedzialny za replikację schematów tabel na bazach danych.
Last updated
Moduł odpowiedzialny za replikację schematów tabel na bazach danych.
Last updated
Moduł GOLDENORE CDC DDL (Data Definition Language) odpowiada za replikację schematów tabel z baz danych Oracle za pomocą konektora źródłowego (Debezium Connector for Oracle).
DDL (Data Definition Language) - grupa instrukcji w języku SQL, służących do definiowania struktur danych. Możemy zaliczyć do nich polecenia takie jak CREATE, ALTER i DROP. Za pomocą instrukcji DDL nie zmieniamy danych na tabeli ale jej strukturę.
Replikacja w dużym uproszczeniu polega na kopiowaniu tabel z jednej bazy na drugą. Do wykonania tego potrzebujemy rozwiązania, które będzie monitorowało zmiany schematów na źródłowej bazie i wysyłało informację o zmianach na bazę docelową. Używamy do tego mechanizmu Apache Kafka, a dokładniej do monitorowania zmian i wysyłania informacji o nich, używamy konektora źródłowego Debezium Connector for Oracle.
Zadaniem konektora jest przechwytywanie zmian na bazie danych Oracle i wysłanie takich informacji do Kafki. Konektor można skonfigurować, aby przechwytywał zmiany dla określonego zbioru schematów i tabel oraz ignorował konkretne schematy czy tabele.
Jedną z informacji, które się przechwytuje jest właśnie informacja o zmianach schematów, a wysyłane są one na tak zwany "Schema change topic". Wysyłane są do niego informacje o zmianach schematów tabel, które są uwzględnione w monitorowaniu. Nazwa tego topicu określona jest w konfiguracji konektora, pod polem:
Więcej informacji na temat konektora Debezium dla Oracle znajduje się w dokumentacji: https://debezium.io/documentation/reference/stable/connectors/oracle.html#oracle-overview
W momencie dodania nowego konektora docelowego lub zmiany konfiguracji w istniejącym konektorze docelowym, aby aktywna była replikacja DDL, wysyłany jest komunikat do modułu DDL z informacjami:
nazwa konektora
konfiguracja
czy będą wykonywane DDL'e z tzw. "przeszłości"
Następnie sprawdzamy czy jest już aktywna replikacja dla danego konektora, jeśli nie to rozpoczynamy replikację, a w przeciwnym wypadku restartujemy replikację uwzględniając nową konfigurację.
Gdy replikacja jest już aktywna, nasłuchiwany jest schema.history.internal.kafka.topic i odpowiednie zmiany pojawiające się, zostają wykonane na docelowej bazie danych.
Konektor źródłowy Debezium dla Oracle wysyła zmiany DDL na topic Kafki niezależnie czy mamy utworzony konektor docelowy. Może dojść do takiej sytuacji, w której nie będzie aktywnej replikacji DDL dla żadnego konektora docelowego, a zmiany DDL będą wysyłane na topic Kafki. Następnie po utworzeniu konektora docelowego z aktywną replikacją DDL, musimy zdecydować czy chcemy wykonać na bazie docelowej zmiany schematów, które zachodziły przed utworzeniem czy chcemy, aby replikowane były tylko zmiany, które dopiero się pojawią. Do tego służy zmienna Execute history, określając czy chcemy wykonać zmiany schematów "z przeszłości".
Dla wartości "true" zostaną wykonane zmiany schematów "z przeszłości", a dla wartości "false" będą wykonane tylko przyszłe zmiany.
transforms.route.replacement
Replikując informacje między bazami danych mamy następujące informacje:
Nazwa bazy danych ($1)
Nazwa schematu ($2)
Nazwa tabeli ($3)
Zmienna transforms.route.replacement określa gdzie będzie zapisana replikowana informacja na bazie docelowej. Domyślnie jest to nazwa_schematu.nazwa_tabeli ($2.$3) ale można chcieć zapisywać np. na docelowej bazie danych na inny schemat. Wtedy ustawiamy naszą zmienną na:
Przy wykonywaniu na bazie źródłowej zapytania zawierającego ALTER TABLE ... ADD ... trzeba zrestartować konektor docelowy, a dokładniej usunąć i utworzyć na nowo. Spowodowane jest to tym, że konektor docelowy pobiera schemat bazy danych w momencie utworzenia i potem go nie aktualizuje. Oznacza to, że jeśli w trakcie jego działania dodamy nową kolumnę, nie będzie on o tym wiedział i przy najbliższym dodaniu danych do bazy, przy próbie zreplikowania danych na bazę docelową, zostanie wyrzucony błąd, ponieważ konektor docelowy będzie próbował dodać dane do kolumny, która nie istnieje.
Nazwa obrazu
cdc-ddl
Nazwa w repozytorium
goldenore/cdc/ddl
Port
8082
Zależność
PostgreSQL Database