Ś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.
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.
Opisuje snapshot uruchomiony podczas inicjalizacji konektora albo status SKIPPED, gdy konektor uzna, że snapshot nie jest wymagany.
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.
notification.enabled.channels) — wybierz sink, log albo jmx. Dla konektora można wskazać jeden kanał powiadomień.notification.sink.topic.name) — wymagane dla kanału SINK.W GIFRÖST notification topic jest tworzony automatycznie podczas tworzenia lub aktualizacji konektora.
Konfiguracja JSON
Wybrane wartości są zapisywane w konfiguracji konektora.
{
"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.
Wysyła każdą zmianę stanu do notification.sink.topic.name. Rekordy są dostępne w Topics i zakładce Notifications.
Zapisuje powiadomienia w logach workera, na którym działa konektor. Nie tworzy osobnego topicu Kafka.
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.
| Pole | Znaczenie |
|---|---|
id | Unikalny identyfikator powiadomienia. Dla incremental snapshotu odpowiada identyfikatorowi wysłanemu z sygnałem execute-snapshot. |
aggregate_type | Rodzaj operacji, na przykład Initial Snapshot albo Incremental Snapshot. |
type | Aktualny stan lub zdarzenie, na przykład STARTED, IN_PROGRESS, TABLE_SCAN_COMPLETED, COMPLETED, ABORTED albo SKIPPED. |
additional_data | Informacje zależne od stanu, na przykład nazwa konektora, aktualna tabela, przetworzony klucz albo liczba odczytanych rekordów. |
timestamp | Czas utworzenia powiadomienia w milisekundach od początku epoki UNIX. |
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.
Wybierz sink i wpisz nazwę notification topicu.
Po utworzeniu lub aktualizacji konektora otwórz <Connector> → Topics.
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.
| Status | Znaczenie |
|---|---|
STARTED | Initial snapshot został rozpoczęty. |
IN_PROGRESS | Konektor skanuje tabelę. additional_data może zawierać data_collections oraz current_collection_in_progress. |
TABLE_SCAN_COMPLETED | Skanowanie jednej tabeli zostało zakończone. Payload zawiera scanned_collection, total_rows_scanned i status. |
COMPLETED | Cały initial snapshot zakończył się poprawnie. |
ABORTED | Initial snapshot został przerwany. |
SKIPPED | Konektor 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.
| Status | Znaczenie |
|---|---|
STARTED | Incremental snapshot został rozpoczęty. |
IN_PROGRESS | Trwa odczyt jednej z wybranych tabel. Zdarzenie może być generowane wielokrotnie podczas przetwarzania kolejnych chunków. |
TABLE_SCAN_COMPLETED | Zakończono skanowanie jednej tabeli. Dla każdej tabeli generowane jest osobne powiadomienie. |
COMPLETED | Cały incremental snapshot zakończył się dla wszystkich wybranych tabel. |
ABORTED | Operacja 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 |
|---|---|
SUCCEEDED | Tabela została zeskanowana poprawnie. |
EMPTY | Tabela nie zawiera rekordów. |
NO_PRIMARY_KEY | Snapshot nie może zostać ukończony, ponieważ tabela nie ma klucza głównego. |
SKIPPED | Typ tabeli nie może zostać przetworzony; sprawdź logi konektora. |
SQL_EXCEPTION | Podczas wykonywania zapytania snapshotu wystąpił wyjątek SQL. |
UNKNOWN_SCHEMA | Konektor 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ładSUCCEEDED.
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.
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.
Każdy wiersz zawiera timestamp, identyfikator operacji, typ snapshotu i stan. Kolejne wiersze z
tym samym id przedstawiają następne etapy jednej operacji.
W aktualnej wersji dostępny jest widok Grouped. Widok Ungrouped jest obecnie pusty.
Powiązanie Notifications z Signals
execute-snapshot — oczekuj sekwencji STARTED → IN_PROGRESS → TABLE_SCAN_COMPLETED → COMPLETED.stop-snapshot — poprawnie zatrzymany incremental snapshot otrzymuje ABORTED.op = r oraz source.snapshot = incremental.