Przejdź do głównej zawartości
GIFRÖST / CDC / Notifications

Śledź każdy snapshot od początku do końca.

Notifications informują o stanie initial i ad hoc snapshotów. Pokazują rozpoczęcie operacji, aktualnie przetwarzaną tabelę, zakończenie skanowania tabeli oraz końcowy wynik całego snapshotu: zakończenie, pominięcie albo przerwanie.

CelPostęp snapshotu i wynik końcowy.
KanałySINK, LOG i JMX.
SnapshotyInitial i incremental.
PowiązanieIdentyfikatory operacji i sygnałów.

Czym są Notifications​

Każde powiadomienie opisuje pojedyncze zdarzenie w cyklu życia snapshotu. Sekwencja powiadomień pozwala śledzić operację i sprawdzić jej końcowy status. Notifications są podstawowym sposobem potwierdzenia, że operacja zlecona przez Signals została rzeczywiście wykonana przez konektor.

Initial SnapshotUruchomienie konektora

Opisuje snapshot uruchomiony podczas inicjalizacji konektora albo status SKIPPED, gdy konektor uzna, że snapshot nie jest wymagany.

Incremental SnapshotOperacja ad hoc

Opisuje incremental snapshot zlecony przez execute-snapshot, w tym postęp tabel i końcowy wynik.

Konfiguracja Notifications​

Ustawienia powiadomień znajdują się w Connectors → Source → Signal → Notification.

Wymagane pola
Enabled notification channels names (notification.enabled.channels) — wybierz sink, log albo jmx. Dla konektora można wskazać jeden kanał powiadomień.
Notification topic name (notification.sink.topic.name) — wymagane dla kanału SINK.
Automatyczne tworzenie topicu

W GIFRÖST notification topic jest tworzony automatycznie podczas tworzenia lub aktualizacji konektora.

Konfiguracja JSON​

Wybrane wartości są zapisywane w konfiguracji konektora.

Przykład kanału SINK
{
"notification.enabled.channels": "sink",
"notification.sink.topic.name": "example-notifications"
}

Kanały powiadomień​

Kanał określa miejsce, do którego Debezium wysyła powiadomienie. Format danych pozostaje taki sam, ale sposób odczytu zależy od wybranego kanału.

SINKTopic Kafka i interfejs

Wysyła każdą zmianę stanu do notification.sink.topic.name. Rekordy są dostępne w Topics i zakładce Notifications.

LOGLogi workera Kafka Connect

Zapisuje powiadomienia w logach workera, na którym działa konektor. Nie tworzy osobnego topicu Kafka.

JMXBean JMX konektora

Udostępnia powiadomienia przez bean JMX konektora dla zewnętrznych narzędzi monitorujących.

Format powiadomienia​

Każde powiadomienie Debezium zawiera pięć podstawowych pól.

PoleZnaczenie
idUnikalny identyfikator powiadomienia. Dla incremental snapshotu odpowiada identyfikatorowi wysłanemu z sygnałem execute-snapshot.
aggregate_typeRodzaj operacji, na przykład Initial Snapshot albo Incremental Snapshot.
typeAktualny stan lub zdarzenie, na przykład STARTED, IN_PROGRESS, TABLE_SCAN_COMPLETED, COMPLETED, ABORTED albo SKIPPED.
additional_dataInformacje zależne od stanu, na przykład nazwa konektora, aktualna tabela, przetworzony klucz albo liczba odczytanych rekordów.
timestampCzas utworzenia powiadomienia w milisekundach od początku epoki UNIX.
Ograniczenie identyfikatora

Gdy jednocześnie działa kilka incremental snapshotów, id może nie wskazywać jednoznacznie sygnału źródłowego. Z powodu ograniczenia Debezium powiadomienia kilku aktywnych snapshotów mogą otrzymać identyfikator ostatnio wysłanego sygnału.

Notification topic​

Kanał SINK zapisuje powiadomienia w topicu skonfigurowanym w notification.sink.topic.name.

Krok 01Skonfiguruj SINK

Wybierz sink i wpisz nazwę notification topicu.

Krok 02Otwórz Topics

Po utworzeniu lub aktualizacji konektora otwórz <Connector> → Topics.

Krok 03Odczytaj rekordy

Wybierz partycje, offset, limit i zakres odczytu. Każdy rekord odpowiada jednemu powiadomieniu.

Typy i statusy powiadomień​

Initial Snapshot​

Initial snapshot może rozpocząć się podczas uruchamiania konektora. Konektor analizuje snapshot.mode oraz zapisane offsety, aby ustalić, czy snapshot jest wymagany.

StatusZnaczenie
STARTEDInitial snapshot został rozpoczęty.
IN_PROGRESSKonektor skanuje tabelę. additional_data może zawierać data_collections oraz current_collection_in_progress.
TABLE_SCAN_COMPLETEDSkanowanie jednej tabeli zostało zakończone. Payload zawiera scanned_collection, total_rows_scanned i status.
COMPLETEDCały initial snapshot zakończył się poprawnie.
ABORTEDInitial snapshot został przerwany.
SKIPPEDKonektor uznał, że snapshot nie jest wymagany, na przykład po restarcie z snapshot.mode=when_needed i poprawnymi offsetami.

Incremental Snapshot​

Powiadomienia Incremental Snapshot opisują ad hoc snapshot uruchomiony przez execute-snapshot. Powiadomienia jednego przebiegu mają ten sam id.

StatusZnaczenie
STARTEDIncremental snapshot został rozpoczęty.
IN_PROGRESSTrwa odczyt jednej z wybranych tabel. Zdarzenie może być generowane wielokrotnie podczas przetwarzania kolejnych chunków.
TABLE_SCAN_COMPLETEDZakończono skanowanie jednej tabeli. Dla każdej tabeli generowane jest osobne powiadomienie.
COMPLETEDCały incremental snapshot zakończył się dla wszystkich wybranych tabel.
ABORTEDOperacja została przerwana, na przykład po poprawnym sygnale stop-snapshot.

Wynik skanowania tabeli​

Dla incremental snapshotu TABLE_SCAN_COMPLETED zawiera additional_data.status.

WartośćZnaczenie
SUCCEEDEDTabela została zeskanowana poprawnie.
EMPTYTabela nie zawiera rekordów.
NO_PRIMARY_KEYSnapshot nie może zostać ukończony, ponieważ tabela nie ma klucza głównego.
SKIPPEDTyp tabeli nie może zostać przetworzony; sprawdź logi konektora.
SQL_EXCEPTIONPodczas wykonywania zapytania snapshotu wystąpił wyjątek SQL.
UNKNOWN_SCHEMAKonektor nie znalazł schematu wybranej tabeli.

Dane dodatkowe dla statusów​

Wartości w nawiasach ostrokątnych oznaczają typ danych albo placeholder.

STARTED​

{
"connector_name": "<name>",
"data_collections": "<tables>"
}
  • connector_name — identyfikator konektora przekazany w powiadomieniu.
  • data_collections — tabela albo zestaw tabel objętych snapshotem.

IN_PROGRESS​

{
"current_collection_in_progress": "<table>",
"connector_name": "<name>",
"maximum_key": "<key>",
"last_processed_key": "<key>",
"data_collections": "<tables>"
}
  • current_collection_in_progress — aktualnie przetwarzana tabela.
  • maximum_key — największa wartość klucza wyznaczona dla aktualnej tabeli.
  • last_processed_key — ostatni klucz przetworzony podczas tworzenia powiadomienia.
  • data_collections — tabele pozostające w zakresie operacji.

TABLE_SCAN_COMPLETED​

{
"scanned_collection": "<table>",
"connector_name": "<name>",
"total_rows_scanned": "<number>",
"data_collections": "<tables>",
"status": "<status>"
}
  • scanned_collection — tabela, której skanowanie zostało zakończone.
  • total_rows_scanned — liczba rekordów odczytanych z tabeli.
  • data_collections — tabele związane z operacją.
  • status — wynik skanowania, na przykład SUCCEEDED.

COMPLETED​

{
"connector_name": "<name>"
}

ABORTED​

{
"connector_name": "<name>",
"data_collections": "<tables>"
}

SKIPPED​

{
"connector_name": "<name>"
}

Snapshot obejmujący kilka tabel​

Jeżeli jeden sygnał obejmuje kilka tabel, wszystkie powiadomienia przebiegu mają ten sam identyfikator operacji. Każda tabela tworzy osobne TABLE_SCAN_COMPLETED, a na końcu pojawia się jedno COMPLETED dla całego snapshotu. scanned_collection wskazuje tabelę, której skanowanie zakończono.

Dynamiczna lista kolekcji

data_collections zmienia się podczas działania incremental snapshotu. Pierwsze powiadomienie zawiera wszystkie wybrane tabele; kolejne pomijają tabele, których przetwarzanie już się zakończyło.

Zakładka Notifications w GIFRÖST​

Zakładka Notifications na dashboardzie konektora prezentuje rekordy odczytane z kanału SINK. W prawym górnym rogu widoczne są aktywny kanał i nazwa notification topicu.

Filtry i kontrolki
All — powiadomienia initial i incremental snapshotów.
Initial — tylko powiadomienia Initial Snapshot.
Incremental — tylko powiadomienia Incremental Snapshot.
Search — filtruje rekordy; kontrolka odświeżania włącza dynamiczne aktualizacje.

Każdy wiersz zawiera timestamp, identyfikator operacji, typ snapshotu i stan. Kolejne wiersze z tym samym id przedstawiają następne etapy jednej operacji.

Widoki Grouped i Ungrouped

W aktualnej wersji dostępny jest widok Grouped. Widok Ungrouped jest obecnie pusty.

Powiązanie Notifications z Signals​

Oczekiwany cykl
execute-snapshot — oczekuj sekwencji STARTED → IN_PROGRESS → TABLE_SCAN_COMPLETED → COMPLETED.
stop-snapshot — poprawnie zatrzymany incremental snapshot otrzymuje ABORTED.
Weryfikacja w topicu tabeli — rekordy incremental snapshotu mają op = r oraz source.snapshot = incremental.

Źródła techniczne​