Bu konu, Kafka'ya yazılan mesajların yapısını ve her alanın anlamını açıklar.
Arka plan
Tam veritabanı senkronizasyon görevi, yukarı akış kaynağından veri okur ve aşağıda açıklanan JSON biçiminde bir Kafka konusuna yazar. Bir mesaj, değişiklik kaydına ait sütun bilgilerini ve değişiklik öncesi ile sonrası veri durumlarını içerir. Kafka tüketicilerinin görev ilerlemesini belirleyebilmesi için görev, op alanı MHEARTBEAT olarak ayarlanmış bir kalp atışı kaydını da düzenli aralıklarla konuya yazar. Aşağıdaki bölümlerde Genel mesaj biçimi, Senkronizasyon görevi kalp atışı mesaj biçimi ve Kaynak veri değişiklikleri için mesaj biçimi açıklanmaktadır. Alan türleri ve parametre açıklamaları için bkz. Alan türleri ve Parametre açıklamaları.
Tek tablo gerçek zamanlı çıktı mesaj biçimi
Tek tablo gerçek zamanlı görevler Kafka hedefini yapılandırırken Kafka kayıtlarındaki Value alanının biçimini belirtin. Canal CDC ve JSON desteklenir. Ayrıntılar için bkz. Ek: Çıktı biçimlerinin açıklaması.
Alan türleri
Kaynaktan okunan veriler, geçerli JSON biçiminde Kafka konusuna yazılmadan önce BOOLEAN, DOUBLE, DATE, BYTES, LONG ve STRING olmak üzere altı türden birine eşlenir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parametre açıklamaları
Aşağıdaki tabloda Kafka'ya yazılan mesajlardaki alanlar açıklanmaktadır.
|
Üst düzey öğe |
İkinci düzey öğe |
Açıklama |
|
schema |
dataColumn |
Veri sütunu türü bilgilerini içeren JSONArray. dataColumn, yukarı akıştaki değişiklik kayıtlarındaki tüm sütunları ve türlerini kaydeder. Değişiklikler arasında veri ekleme, silme veya güncelleme ve veritabanı tablo şemalarındaki değişiklikler yer alır.
|
|
primaryKey |
Birincil anahtar bilgilerini içeren liste. pk: birincil anahtar adı. |
|
|
source |
Kaynak veritabanı veya tablo bilgilerini içeren nesne.
|
|
|
payload |
before |
Bir güncelleme öncesindeki verileri içeren JSONObject. Örneğin, bir MySQL kaynağı bir kaydı güncellediğinde before, güncelleme öncesi kayıt verilerini içerir.
|
|
after |
Güncelleme sonrası veriler, before ile aynı biçimdedir. |
|
|
sequenceId |
Streamx tarafından artımlı ve tam verilerin birleştirme sırasında sıralanması için oluşturulan dize. Her Streamx kaydının benzersiz bir sequenceId'si vardır. Not
Kaynaktan okunan bir güncelleme mesajı, aynı sequenceId'ye sahip update before ve update after olmak üzere iki çıktı kaydı üretir. |
|
|
scn |
Kaynak Oracle olduğunda geçerlidir; Oracle SCN'yi içerir. |
|
|
op |
Kaynaktan okunan mesaj türü. Geçerli değerler:
|
|
|
timestamp |
Bu kayıtla ilgili zaman damgalarını içeren JSONObject.
|
|
|
ddl |
Bu alan yalnızca veritabanı tablo şema değişiklikleri için doldurulur. Ekleme, silme ve güncelleme dahil veri değişiklikleri için ddl alanı null olarak ayarlanır.
|
|
|
version |
Yok |
Mesaj biçimi sürümü. |
Genel mesaj biçimi
Kafka'ya yazılan bir mesajın genel biçimi şu şekildedir:
{ "schema": { //Değişiklik meta verileri, yalnızca sütun adlarını ve türlerini içerir "dataColumn": [//Hedef tablo kaydını güncellemek için değiştirilen veri sütunu bilgileri { "name": "id", "type": "LONG" }, { "name": "name", "type": "STRING" }, { "name": "binData", "type": "BYTES" }, { "name": "ts", "type": "DATE" }, { "name":"rowid",// Oracle kaynağı için rowid, veri sütunları arasında yer alır "type":"STRING" } ], "primaryKey": [ "pkName1", "pkName2" ], "source": { "dbType": "mysql", "dbVersion": "1.0.0", "dbName": "myDatabase", "schemaName": "mySchema", "tableName": "tableName" } }, "payload": { "before": { "dataColumn":{ "id": 111, "name":"scooter", "binData": "[base64 string]", "ts": 1590315269000, "rowid": "AAIUMPAAFAACxExAAE"//Oracle rowid'yi içeren dize } }, "after": { "dataColumn":{ "id": 222, "name":"donald", "binData": "[base64 string]", "ts": 1590315269000, "rowid": "AAIUMPAAFAACxExAAE"//Oracle rowid'yi içeren dize } }, "sequenceId":"XXX",//Artımlı ve tam verileri birleştirirken verileri sıralamak için kullanılan dize, "scn":"xxxx",//Oracle SCN'yi içeren dize "op": "INSERT/UPDATE_BEFOR/UPDATE_AFTER/DELETE/TRANSACTION_BEGIN/TRANSACTION_END/CREATE/ALTER/ERASE/QUERY/TRUNCATE/RENAME/CINDEX/DINDEX/GTID/XACOMMIT/XAROLLBACK/MHEARTBEAT...",//Büyük/küçük harfe duyarlı, "timestamp": { "eventTime": 1,//Gerekli: kaynak veritabanındaki değişiklik zamanı, 13 basamaklı milisaniye zaman damgası "systemTime": 2,//İsteğe bağlı: görevin değişikliği işlediği zaman, 13 basamaklı milisaniye zaman damgası "checkpointTime": 3//İsteğe bağlı: senkronizasyon kontrol noktası sıfırlanırken ayarlanan zaman, 13 basamaklı milisaniye zaman damgası, genellikle eventTime'a eşittir }, "ddl": { "text": "ADD COLUMN ...", "ddlMeta": "[SQLStatement serileştirilmiş ikili veri, base64 dizesi olarak ifade edilir]" } }, "version":"1.0.0" }
Alan türleri ve parametre açıklamaları için bkz. Alan türleri ve Parametre açıklamaları.
Senkronizasyon görevi kalp atışı mesaj biçimi
{
"schema": {
"dataColumn": null,
"primaryKey": null,
"source": null
},
"payload": {
"before": null,
"after": null,
"sequenceId": null,
"timestamp": {
"eventTime": 1620457659000,
"checkpointTime": 1620457659000
},
"op": "MHEARTBEAT",
"ddl": null
},
"version": "0.0.1"
}
Alan türleri ve parametre açıklamaları için bkz. Alan türleri ve Parametre açıklamaları.
Kaynak veri değişiklikleri için mesaj biçimi
-
Kaynak ekleme için Kafka mesaj biçimi:
{ "schema": { "dataColumn": [ { "name": "name", "type": "STRING" }, { "name": "job", "type": "STRING" }, { "name": "sex", "type": "STRING" }, { "name": "#alibaba_rds_row_id#", "type": "LONG" } ], "primaryKey": null, "source": { "dbType": "MySQL", "dbName": "pkset_test", "tableName": "pkset_test_no_pk" } }, "payload": { "before": null, "after": { "dataColumn": { "name": "name11", "job": "job11", "sex": "man", "#alibaba_rds_row_id#": 15 } }, "sequenceId": "1620457642589000000", "timestamp": { "eventTime": 1620457896000, "systemTime": 1620457896977, "checkpointTime": 1620457896000 }, "op": "INSERT", "ddl": null }, "version": "0.0.1" } -
Kaynak güncelleme için Kafka mesaj biçimi:
-
When one record in the source is updated, one Kafka record is generated. seçili değilken, kaynak güncellemesi iki Kafka mesajı üretir; biri güncelleme öncesi durum, diğeri güncelleme sonrası durumu içindir. Biçimler şöyledir:
Güncelleme öncesi durum için mesaj biçimi:
{ "schema": { "dataColumn": [ { "name": "name", "type": "STRING" }, { "name": "job", "type": "STRING" }, { "name": "sex", "type": "STRING" }, { "name": "#alibaba_rds_row_id#", "type": "LONG" } ], "primaryKey": null, "source": { "dbType": "MySQL", "dbName": "pkset_test", "tableName": "pkset_test_no_pk" } }, "payload": { "before": { "dataColumn": { "name": "name11", "job": "job11", "sex": "man", "#alibaba_rds_row_id#": 15 } }, "after": null, "sequenceId": "1620457642589000001", "timestamp": { "eventTime": 1620458077000, "systemTime": 1620458077779, "checkpointTime": 1620458077000 }, "op": "UPDATE_BEFOR", "ddl": null }, "version": "0.0.1" }Güncelleme sonrası durum için mesaj biçimi:
{ "schema": { "dataColumn": [ { "name": "name", "type": "STRING" }, { "name": "job", "type": "STRING" }, { "name": "sex", "type": "STRING" }, { "name": "#alibaba_rds_row_id#", "type": "LONG" } ], "primaryKey": null, "source": { "dbType": "MySQL", "dbName": "pkset_test", "tableName": "pkset_test_no_pk" } }, "payload": { "before": null, "after": { "dataColumn": { "name": "name11", "job": "job11", "sex": "woman", "#alibaba_rds_row_id#": 15 } }, "sequenceId": "1620457642589000001", "timestamp": { "eventTime": 1620458077000, "systemTime": 1620458077779, "checkpointTime": 1620458077000 }, "op": "UPDATE_AFTER", "ddl": null }, "version": "0.0.1" } -
When one record in the source is updated, one Kafka record is generated. seçili iken, kaynak güncellemesi hem önceki hem de sonraki durumları içeren tek bir Kafka mesajı üretir. Biçim şöyledir:
{ "schema": { "dataColumn": [ { "name": "name", "type": "STRING" }, { "name": "job", "type": "STRING" }, { "name": "sex", "type": "STRING" }, { "name": "#alibaba_rds_row_id#", "type": "LONG" } ], "primaryKey": null, "source": { "dbType": "MySQL", "dbName": "pkset_test", "tableName": "pkset_test_no_pk" } }, "payload": { "before": { "dataColumn": { "name": "name11", "job": "job11", "sex": "man", "#alibaba_rds_row_id#": 15 } }, "after": { "dataColumn": { "name": "name11", "job": "job11", "sex": "woman", "#alibaba_rds_row_id#": 15 } }, "sequenceId": "1620457642589000001", "timestamp": { "eventTime": 1620458077000, "systemTime": 1620458077779, "checkpointTime": 1620458077000 }, "op": "UPDATE_AFTER", "ddl": null }, "version": "0.0.1" }
-
-
Kaynak silme için Kafka mesaj biçimi:
{ "schema": { "dataColumn": [ { "name": "name", "type": "STRING" }, { "name": "job", "type": "STRING" }, { "name": "sex", "type": "STRING" }, { "name": "#alibaba_rds_row_id#", "type": "LONG" } ], "primaryKey": null, "source": { "dbType": "MySQL", "dbName": "pkset_test", "tableName": "pkset_test_no_pk" } }, "payload": { "before": { "dataColumn": { "name": "name11", "job": "job11", "sex": "woman", "#alibaba_rds_row_id#": 15 } }, "after": null, "sequenceId": "1620457642589000002", "timestamp": { "eventTime": 1620458266000, "systemTime": 1620458266101, "checkpointTime": 1620458266000 }, "op": "DELETE", "ddl": null }, "version": "0.0.1" }
Alan türleri ve parametre açıklamaları için bkz. Alan türleri ve Parametre açıklamaları.