Te whakauru Debezium - CDC mo Apache Kafka

Te whakauru Debezium - CDC mo Apache Kafka

I roto i aku mahi, he maha nga wa ka kite ahau i nga otinga hangarau hou / hua rorohiko, nga korero mo te mea he iti rawa i runga i te Ipurangi reo Ruhia. Ma tenei tuhinga ka ngana ahau ki te whakakii i tetahi waahi penei me tetahi tauira mai i aku mahi tata nei, i te wa e hiahia ana ahau ki te whirihora i te tuku kaupapa CDC mai i nga DBMS rongonui e rua (PostgreSQL me MongoDB) ki te kahui Kafka ma te whakamahi i a Debezium. Te ti'aturi nei au ka whai hua tenei tuhinga arotake, ka puta mai i runga i nga mahi kua mahia, ka whai hua ki etahi atu.

He aha te Debezium me te CDC i te nuinga?

Debezium — māngai o te kāwai rorohiko CDC (Hopu Huringa Raraunga), he nui ake ranei, he huinga hono mo nga momo DBMS e hototahi ana ki te angamahi Apache Kafka Connect.

tenei Kaupapa Open Source, kua raihanatia i raro i te Raihana Apache v2.0 me te tautoko a Red Hat. Kei te haere tonu te whakawhanaketanga mai i te tau 2016 a i tenei wa ka tautokohia e ia nga DBMS e whai ake nei: MySQL, PostgreSQL, MongoDB, SQL Server. He hononga ano hoki mo Cassandra me Oracle, engari i tenei wa kei roto ratou i te mana "whakauru moata", kaore nga putanga hou e kii i te hototahi whakamuri.

Mena ka whakatauritehia e matou te CDC me te huarahi tuku iho (ka panui tika te tono i nga raraunga mai i te DBMS), ko ona painga nui ko te whakatinanatanga o te rerenga huringa raraunga i te taumata rarangi me te iti o te waahi, te tino pono me te waatea. Ko nga tohu whakamutunga e rua ka tutuki ma te whakamahi i te kohinga Kafka hei putunga mo nga huihuinga CDC.

Ko tetahi atu painga ko te meka e whakamahia ana te tauira kotahi ki te penapena i nga huihuinga, na te tono mutunga kaore e awangawanga mo nga ahuatanga o te whakahaere i nga DBMS rereke.

Ka mutu, ma te whakamahi i te kaihokohoko karere ka taea e nga tono e aro turuki ana i nga huringa o nga raraunga ki te whakarahi whakapae. I te wa ano, ka whakaitihia te paanga ki te puna raraunga, na te mea kaore i te whiwhi tika nga raraunga mai i te DBMS, engari mai i te roopu Kafka.

Mo te hoahoanga Debezium

Ma te whakamahi i a Debezium ka heke iho ki tenei kaupapa ngawari:

DBMS (hei puna raraunga) → tūhono i Kafka Connect → Apache Kafka → kaihoko

Hei tauira, anei te hoahoa mai i te paetukutuku kaupapa:

Te whakauru Debezium - CDC mo Apache Kafka

Engari, kaore au i te tino pai ki tenei kaupapa, na te mea ka taea anake te whakamahi i te hono totohu.

I roto i te meka, he rereke te ahuatanga: whakakiia to Roto Raraunga (hononga whakamutunga i te hoahoa o runga) Ehara tenei i te huarahi anake hei whakamahi i a Debezium. Ko nga huihuinga ka tukuna ki a Apache Kafka ka taea e o tono ki te hapai i nga momo ahuatanga. Hei tauira:

  • te tango i nga raraunga kore i te keteroki;
  • te tuku whakamohiotanga;
  • rapu whakahōunga taupū;
  • etahi momo pukapuka kaute;
  • ...

Mena kei a koe he tono Java a kaore he hiahia / ka taea te whakamahi i te roopu Kafka, ka taea ano te mahi. hono-whakamau. Ko te painga nui ko te whakakore i te hiahia mo etahi atu hanganga (i te ahua o te hono me te Kafka). Heoi, kua whakakorehia tenei otinga mai i te putanga 1.1 a kua kore e taunakitia mo te whakamahi (ka taea te tango i te tautoko i nga putanga kei te heke mai).

Ka matapakihia e tenei tuhinga te hoahoanga e taunakihia ana e nga kaiwhakawhanake, e whakarato ana i te pai o te he me te tauine.

whirihoranga tūhono

Hei timata ki te whai i nga huringa o te uara tino nui - raraunga - me:

  1. puna raraunga, ka taea ko MySQL mai i te putanga 5.7, PostgreSQL 9.6+, MongoDB 3.2+ (rārangi katoa);
  2. Huihuinga Apache Kafka;
  3. Kafka Connect instance (putanga 1.x, 2.x);
  4. i whirihorahia te hononga Debezium.

Mahi i nga wahanga tuatahi e rua, i.e. Ko te tukanga whakauru o te DBMS me te Apache Kafka kei tua atu i te waahanga o te tuhinga. Heoi, mo te hunga e hiahia ana ki te tuku i nga mea katoa ki roto i te pouaka kirikiri, ko te whare putunga whaimana me nga tauira kua rite. docker-compose.yaml.

Ka noho maatau ake nga korero mo nga waahanga whakamutunga e rua.

0. Kafka Hono

I konei me etahi atu i roto i te tuhinga, ka korerohia nga tauira whirihoranga katoa i roto i te horopaki o te ahua Docker kua tohatohahia e nga kaihanga Debezium. Kei roto katoa nga konae mono (hononga) me te whirihoranga o Kafka Connect ma te whakamahi i nga taurangi taiao.

Mena kei te hiahia koe ki te whakamahi i te Kafka Connect mai i te Confluent, me taapiri takitahi nga monomai o nga hononga hono ki te raarangi kua tohua i roto plugin.path ka tautuhia ma te taurangi taiao CLASSPATH. Ko nga tautuhinga mo te kaimahi Kafka Connect me nga hononga ka whakatauhia ma nga konae whirihoranga ka tukuna hei tohenga ki te whakahau whakarewa kaimahi. Mo etahi atu korero, tirohia tuhinga.

Ko te tukanga katoa o te whakatu Debeizum i roto i te putanga hono ka mahia i roto i nga waahanga e rua. Kia titiro tatou ki ia o ratou:

1. Te whakatu i te anga Kafka Connect

Hei whakawhiti raraunga ki te roopu Apache Kafka, ka whakatakotoria nga tawhā motuhake ki te anga Kafka Connect, penei:

  • tawhā mo te hono ki te tautau,
  • nga ingoa o nga kaupapa ka penapena tika te whirihoranga o te hono,
  • te ingoa o te roopu e rere ana te hononga (mehemea ka whakamahia te aratau tohatoha).

Ko te ahua Docker mana o te kaupapa e tautoko ana i te whirihoranga ma te whakamahi i nga taurangi taiao - koinei ta matou e whakamahi. Na, tango i te ahua:

docker pull debezium/connect

Ko te huinga iti rawa o nga taurangi taiao e hiahiatia ana hei whakahaere i te hononga e whai ake nei:

  • BOOTSTRAP_SERVERS=kafka-1:9092,kafka-2:9092,kafka-3:9092 — te rarangi tuatahi o nga kaitoro kahui Kafka kia whiwhi rarangi katoa o nga mema tautau;
  • OFFSET_STORAGE_TOPIC=connector-offsets — he kaupapa mo te penapena i nga waahi kei reira te hono i tenei wa;
  • CONNECT_STATUS_STORAGE_TOPIC=connector-status — kaupapa mo te penapena i te mana o te hono me ana mahi;
  • CONFIG_STORAGE_TOPIC=connector-config — kaupapa mo te penapena raraunga whirihoranga hononga me ana mahi;
  • GROUP_ID=1 — te tohu o te roopu o nga kaimahi ka taea te whakahaere i te mahi honohono; e tika ana ina whakamahi tohatoha (kua tohaina) tikanga.

Ka whakarewahia e matou te ipu me enei taurangi:

docker run 
  -e BOOTSTRAP_SERVERS='kafka-1:9092,kafka-2:9092,kafka-3:9092' 
  -e GROUP_ID=1 
  -e CONFIG_STORAGE_TOPIC=my_connect_configs 
  -e OFFSET_STORAGE_TOPIC=my_connect_offsets 
  -e STATUS_STORAGE_TOPIC=my_connect_statuses  debezium/connect:1.2

Tuhipoka mo Avro

Ma te taunoa, ka tuhia e Debezium nga raraunga i roto i te whakatakotoranga JSON, e pai ana mo nga pouaka kirikiri me te iti o nga raraunga, engari ka waiho hei raruraru i roto i nga papaarangi kua utaina. He rereke ki te kaitahuri JSON ko te whakamaarama i nga karere ma te whakamahi ūropi ki te whakatakotoranga rua, e whakaiti ana i te kawenga ki runga i te punaha I/O i Apache Kafka.

Hei whakamahi i te Avro ka hiahia koe ki te tohatoha i tetahi waahanga motuhake kaupapa-rehita (mo te penapena hoahoa). Ko nga taurangi mo te kaitahuri ka penei te ahua:

name: CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL
value: http://kafka-registry-01:8081/
name: CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL
value: http://kafka-registry-01:8081/
name: VALUE_CONVERTER   
value: io.confluent.connect.avro.AvroConverter

Ko nga korero mo te whakamahi i te Avro me te whakatu i te rehita mo tera kei tua atu i te waahanga o tenei tuhinga - mo te maarama, ka whakamahia e matou a JSON.

2. Te whirihora i te hono tonu

Inaianei ka taea e koe te haere tika ki te whirihoranga o te hono tonu, ka panui nga raraunga mai i te puna.

Kia titiro tatou ki te tauira o nga hononga mo nga DBMS e rua: PostgreSQL me MongoDB, kei roto i a au nga wheako me nga rereketanga (ahakoa he iti, engari he mea nui!).

Kei te whakaahuahia te whirihoranga ki te tohu JSON ka tukuna ki Kafka Connect ma te tono POST.

2.1. PostgreSQL

Tauira whirihoranga tūhono mo PostgreSQL:

{
  "name": "pg-connector",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "plugin.name": "pgoutput",
    "database.hostname": "127.0.0.1",
    "database.port": "5432",
    "database.user": "debezium",
    "database.password": "definitelynotpassword",
    "database.dbname" : "dbname",
    "database.server.name": "pg-dev",
    "table.include.list": "public.(.*)",
    "heartbeat.interval.ms": "5000",
    "slot.name": "dbname_debezium",
    "publication.name": "dbname_publication",
    "transforms": "AddPrefix",
    "transforms.AddPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.AddPrefix.regex": "pg-dev.public.(.*)",
    "transforms.AddPrefix.replacement": "data.cdc.dbname"
  }
}

Ko te kaupapa o te mahi o te hono i muri i tenei tatūnga he tino ngawari:

  • Ina whakarewahia mo te wa tuatahi, ka hono atu ki te papaaarangi kua tohua i roto i te whirihoranga ka timata i te aratau whakaahua tuatahi, te tuku ki Kafka te huinga tuatahi o nga raraunga i whiwhi ma te whakamahi i te herenga SELECT * FROM table_name.
  • Ka oti te arawhitinga, ka uru te hononga ki te aratau ki te panui i nga huringa mai i nga konae PostgreSQL WAL.

Mo nga whiringa ka whakamahia:

  • name — te ingoa o te hono mo te whirihoranga e whakaahuatia ana i raro nei; i te wa kei te heke mai, ka whakamahia tenei ingoa ki te mahi tahi me te hono (arā, tirohia te mana / whakahou / whakahou i te whirihoranga) ma te Kafka Connect REST API;
  • connector.class — akomanga tūhono DBMS ka whakamahia e te tūhono whirihora;
  • plugin.name — te ingoa o te mono mo te wetewete arorau o nga raraunga mai i nga konae WAL. E waatea ana hei whiriwhiri mai wal2json, decoderbuffs и pgoutput. Ko nga mea tuatahi e rua e hiahia ana kia whakauruhia nga taapiri e tika ana ki te DBMS, a pgoutput mo te putanga PostgreSQL 10 me te teitei ake kaore e hiahiatia etahi atu whawhe;
  • database.* — kōwhiringa mō te tūhono ki te pātengi raraunga, kei hea database.server.name — PostgreSQL ingoa tauira i whakamahia hei hanga i te ingoa kaupapa i roto i te roopu Kafka;
  • table.include.list — he rarangi ripanga e hiahia ana matou ki te whai i nga huringa; kua tohua ki te whakatakotoranga schema.table_name; e kore e taea te whakamahi tahi me table.exclude.list;
  • heartbeat.interval.ms — te wa (i roto i te milliseconds) ka tukuna e te hononga nga karere e pa ana ki te ngakau ki tetahi kaupapa motuhake;
  • heartbeat.action.query — he tono ka mahia i te wa e tuku ana i ia panui ngakau (i puta te whiringa ki te putanga 1.1);
  • slot.name — te ingoa o te mokamoka tukurua ka whakamahia e te hono;
  • publication.name - Ingoa pukapuka i PostgreSQL, e whakamahia ana e te hononga. Mena karekau, ka ngana a Debezium ki te hanga. Mena karekau he tika mo tenei mahi a te kaiwhakamahi kei raro nei i a ia te hononga, ka mutu te hono me te hapa;
  • transforms ka whakatau me pehea te whakarereke i te ingoa o te kaupapa i whaaia:
    • transforms.AddPrefix.type e tohu ana ka whakamahia e matou nga korero auau;
    • transforms.AddPrefix.regex — he kopare e tautuhi ana i te ingoa o te kaupapa i whaaia;
    • transforms.AddPrefix.replacement - tika tonu ta matou e tautuhi ano.

He korero ano mo te ngakau me te hurihanga

Ma te taunoa, ka tukuna e te kaihono raraunga ki a Kafka mo ia tauwhitinga mahi, ka tuhia tana LSN (Tau Raupapa Takiuru) ki te kaupapa ratonga. offset. Engari ka aha mena ka whirihorahia te hononga kia kaua e panui i te katoa o te patengi raraunga, engari he waahanga noa iho o ana ripanga (kaore e puta nga whakahoutanga raraunga i nga wa maha)?

  • Ka panuihia e te kaihono nga konae WAL ka kore e kitea he tauwhitinga e mahia ana ki nga ripanga e aroturukihia ana.
  • No reira, e kore e whakahōu i tōna tūnga o nāianei i roto i te kaupapa, i te mokamoka tukurua ranei.
  • Ko tenei, ka puta ko nga konae WAL e mau ana i runga i te kōpae, ka ngaro pea te mokowā kōpae.

Na konei ka tae mai nga whiringa ki te whakaora. heartbeat.interval.ms и heartbeat.action.query. Ma te whakamahi takirua i enei whiringa ka taea te tono ki te whakarereke i nga raraunga i roto i te ripanga motuhake ia wa ka tukuna he karere manawa ngakau. No reira, ko te LSN kei ​​runga i te hononga kei tenei wa (i roto i te mokamoka tukurua) kei te whakahoutia tonu. Ma tenei ka taea e te DBMS te tango i nga konae WAL kua kore e hiahiatia. Ka taea e koe te ako ake mo te mahi o nga whiringa tuhinga.

Ko tetahi atu whiringa e tika ana kia aro atu transforms. Ahakoa he mea nui ake mo te waatea me te ataahua ...

Ma te taunoa, ka waihanga kaupapa a Debezium ma te whakamahi i te kaupapa here whakaingoa e whai ake nei: serverName.schemaName.tableName. Kaore pea tenei i te watea i nga wa katoa. Kōwhiringa transforms Ka taea e koe te whakamahi kii i nga wa katoa ki te tautuhi i te rarangi o nga ripanga, nga huihuinga e tika ana kia tukuna ki tetahi kaupapa whai ingoa motuhake.

I roto i ta maatau whirihoranga whakawhetai transforms e whai ake nei: ko nga huihuinga CDC katoa mai i te papaaarangi kua aro turuki ka haere ki tetahi kaupapa me te ingoa data.cdc.dbname. Ki te kore (kaore enei tautuhinga), ka hangaia e Debezium he kaupapa mo ia ripanga penei: pg-dev.public.<table_name>.

Whakawhāititanga Tūhono

Hei whakaoti i te whakaahuatanga o te whirihoranga hono mo PostgreSQL, he pai ki te korero mo nga ahuatanga e whai ake nei / herenga o tana mahi:

  1. Ko te mahi o te hono mo PostgreSQL e whakawhirinaki ana ki te kaupapa o te wetewete arorau. No reira ko ia e kore e whai i nga tono ki te whakarereke i te hanganga papaa raraunga (DDL) - na reira, kaore enei raraunga e uru ki nga kaupapa.
  2. I te mea ka whakamahia nga mokamoka tukurua, ka taea te hono atu i tetahi hononga anake ki te tauira DBMS matua.
  3. Mēnā he tika pānui-anake te kaiwhakamahi kei raro nei te tūhonohono ki te pātengi raraunga, i mua i te whakarewatanga tuatahi me hanga ā-ringatia e koe he mokamoka tukurua me te whakaputa ki te papaa raraunga.

Te tono i te whirihoranga

Na, me uta ta tatou whirihoranga ki te hono:

curl -i -X POST -H "Accept:application/json" 
  -H  "Content-Type:application/json"  http://localhost:8083/connectors/ 
  -d @pg-con.json

Ka tirohia e maatau kua angitu te tango ka timata te hononga:

$ curl -i http://localhost:8083/connectors/pg-connector/status 
HTTP/1.1 200 OK
Date: Thu, 17 Sep 2020 20:19:40 GMT
Content-Type: application/json
Content-Length: 175
Server: Jetty(9.4.20.v20190813)

{"name":"pg-connector","connector":{"state":"RUNNING","worker_id":"172.24.0.5:8083"},"tasks":[{"id":0,"state":"RUNNING","worker_id":"172.24.0.5:8083"}],"type":"source"}

Rawe: kua whakaritea, kua reri ki te haere. Inaianei me kii he kaihoko me te hono atu ki a Kafka, katahi ka taapiri me te whakarereke i tetahi urunga ki te ripanga:

$ kafka/bin/kafka-console-consumer.sh 
  --bootstrap-server kafka:9092 
  --from-beginning 
  --property print.key=true 
  --topic data.cdc.dbname

postgres=# insert into customers (id, first_name, last_name, email) values (1005, 'foo', 'bar', '[email protected]');
INSERT 0 1
postgres=# update customers set first_name = 'egg' where id = 1005;
UPDATE 1

I roto i ta maatau kaupapa ka whakaatuhia e whai ake nei:

He roa te JSON me o maatau huringa

{
"schema":{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
}
],
"optional":false,
"name":"data.cdc.dbname.Key"
},
"payload":{
"id":1005
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"before"
},
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"after"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"version"
},
{
"type":"string",
"optional":false,
"field":"connector"
},
{
"type":"string",
"optional":false,
"field":"name"
},
{
"type":"int64",
"optional":false,
"field":"ts_ms"
},
{
"type":"string",
"optional":true,
"name":"io.debezium.data.Enum",
"version":1,
"parameters":{
"allowed":"true,last,false"
},
"default":"false",
"field":"snapshot"
},
{
"type":"string",
"optional":false,
"field":"db"
},
{
"type":"string",
"optional":false,
"field":"schema"
},
{
"type":"string",
"optional":false,
"field":"table"
},
{
"type":"int64",
"optional":true,
"field":"txId"
},
{
"type":"int64",
"optional":true,
"field":"lsn"
},
{
"type":"int64",
"optional":true,
"field":"xmin"
}
],
"optional":false,
"name":"io.debezium.connector.postgresql.Source",
"field":"source"
},
{
"type":"string",
"optional":false,
"field":"op"
},
{
"type":"int64",
"optional":true,
"field":"ts_ms"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"id"
},
{
"type":"int64",
"optional":false,
"field":"total_order"
},
{
"type":"int64",
"optional":false,
"field":"data_collection_order"
}
],
"optional":true,
"field":"transaction"
}
],
"optional":false,
"name":"data.cdc.dbname.Envelope"
},
"payload":{
"before":null,
"after":{
"id":1005,
"first_name":"foo",
"last_name":"bar",
"email":"[email protected]"
},
"source":{
"version":"1.2.3.Final",
"connector":"postgresql",
"name":"dbserver1",
"ts_ms":1600374991648,
"snapshot":"false",
"db":"postgres",
"schema":"public",
"table":"customers",
"txId":602,
"lsn":34088472,
"xmin":null
},
"op":"c",
"ts_ms":1600374991762,
"transaction":null
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
}
],
"optional":false,
"name":"data.cdc.dbname.Key"
},
"payload":{
"id":1005
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"before"
},
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"after"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"version"
},
{
"type":"string",
"optional":false,
"field":"connector"
},
{
"type":"string",
"optional":false,
"field":"name"
},
{
"type":"int64",
"optional":false,
"field":"ts_ms"
},
{
"type":"string",
"optional":true,
"name":"io.debezium.data.Enum",
"version":1,
"parameters":{
"allowed":"true,last,false"
},
"default":"false",
"field":"snapshot"
},
{
"type":"string",
"optional":false,
"field":"db"
},
{
"type":"string",
"optional":false,
"field":"schema"
},
{
"type":"string",
"optional":false,
"field":"table"
},
{
"type":"int64",
"optional":true,
"field":"txId"
},
{
"type":"int64",
"optional":true,
"field":"lsn"
},
{
"type":"int64",
"optional":true,
"field":"xmin"
}
],
"optional":false,
"name":"io.debezium.connector.postgresql.Source",
"field":"source"
},
{
"type":"string",
"optional":false,
"field":"op"
},
{
"type":"int64",
"optional":true,
"field":"ts_ms"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"id"
},
{
"type":"int64",
"optional":false,
"field":"total_order"
},
{
"type":"int64",
"optional":false,
"field":"data_collection_order"
}
],
"optional":true,
"field":"transaction"
}
],
"optional":false,
"name":"data.cdc.dbname.Envelope"
},
"payload":{
"before":{
"id":1005,
"first_name":"foo",
"last_name":"bar",
"email":"[email protected]"
},
"after":{
"id":1005,
"first_name":"egg",
"last_name":"bar",
"email":"[email protected]"
},
"source":{
"version":"1.2.3.Final",
"connector":"postgresql",
"name":"dbserver1",
"ts_ms":1600375609365,
"snapshot":"false",
"db":"postgres",
"schema":"public",
"table":"customers",
"txId":603,
"lsn":34089688,
"xmin":null
},
"op":"u",
"ts_ms":1600375609778,
"transaction":null
}
}

I roto i nga take e rua, kei roto i nga rekoata te matua (PK) o te rekoata i whakarereketia, me te tino ngako o nga huringa: he aha te rekoata o mua me te aha o muri.

  • Tuhinga o mua INSERT: uara i mua (before) rite null, a muri - te raina i whakauruhia.
  • Tuhinga o mua UPDATE: i payload.before ka whakaatuhia te ahua o mua o te raina, me roto payload.after — hou me te mauri o nga huringa.

2.2 MongoDB

Ka whakamahia e tenei hononga te tikanga tukurua MongoDB paerewa, he panui korero mai i te oplog o te node DBMS tuatahi.

He rite ki te tuhono kua whakaahuatia ake mo PgSQL, i konei hoki, i te timatanga tuatahi, ka tangohia te whakaahua raraunga tuatahi, ka huri te hononga ki te aratau panui oplog.

Tauira whirihoranga:

{
"name": "mp-k8s-mongo-connector",
"config": {
"connector.class": "io.debezium.connector.mongodb.MongoDbConnector",
"tasks.max": "1",
"mongodb.hosts": "MainRepSet/mongo:27017",
"mongodb.name": "mongo",
"mongodb.user": "debezium",
"mongodb.password": "dbname",
"database.whitelist": "db_1,db_2",
"transforms": "AddPrefix",
"transforms.AddPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.AddPrefix.regex": "mongo.([a-zA-Z_0-9]*).([a-zA-Z_0-9]*)",
"transforms.AddPrefix.replacement": "data.cdc.mongo_$1"
}
}

Ka kite koe, karekau he whiringa hou i konei ka whakatauritea ki te tauira o mua, engari ko te maha o nga whiringa hei hono atu ki te paataka raraunga me o raatau tohu kua whakahekehia.

Tautuhinga transforms i tenei wa ka mahia e ratou enei e whai ake nei: ka huri i te ingoa o te kaupapa i whaaia mai i te aronuinga <server_name>.<db_name>.<collection_name> в data.cdc.mongo_<db_name>.

te manawanui ki te he

Ko te take mo te whakararu i te he me te nui o te waatea i roto i o tatou waa he tino kaha ake - ina koa ka korero tatou mo nga raraunga me nga whakawhitinga, me te whai i nga huringa raraunga kaore e tu ki te taha o tenei take. Me titiro ki nga mea ka hee i roto i te maapono me te aha ka pa ki a Debezium i ia keehi.

E toru nga whiringa whakaputa:

  1. Kafka Hono rahunga. Mena kua whirihorahia te Hono ki te mahi i roto i te aratau toha, me whakarite kia maha nga kaimahi i te roopu.id kotahi. Na, ki te rahua tetahi, ka whakaara ano te hononga ki tetahi atu kaimahi ka haere tonu ki te panui mai i te tuunga whakamutunga o te kaupapa i Kafka.
  2. Kua ngaro te hononga ki te kahui Kafka. Ka mutu noa te panui o te hononga ki te waahi kaore i tukuna ki a Kafka, a ka ngana ki te tuku ano kia tutuki ra ano te nganatanga.
  3. Te koretake o te puna raraunga. Ka ngana te tūhono ki te hono anō ki te pūtake i whirihorahia. Ko te taunoa ko te 16 ngana ki te whakamahi whakamuri taupū. I muri i te 16 o nga nganatanga kaore i angitu, ka tohua te mahi hei i rahua a ka hiahia koe ki te whakaara ano ma te atanga Kafka Connect REST.
    • Tuhinga o mua PostgreSQL e kore e ngaro nga raraunga, no te mea Ma te whakamahi i nga mokamoka tukurua ka aukati i a koe ki te whakakore i nga konae WAL kaore e panuihia e te hononga. I tenei keehi, he kino ano te moni: mena ka pakaru te hononga whatunga i waenga i te hono me te DBMS mo te wa roa, tera pea ka pau te mokowā kōpae, a ka taea e tenei te kore o te DBMS katoa.
    • Tuhinga o mua MySQL Ko nga konae binlog ka taea te huri e te DBMS ake i mua i te whakahokinga mai o te hononga. Ma tenei ka uru te hononga ki te ahua rahua, me te whakahoki ano i te mahi noa, me timata ano koe i te aratau whakaahua tuatahi kia haere tonu te panui mai i nga binlogs.
    • i runga i MongoDB. Ko nga tuhinga e kii ana: ko te whanonga o te hononga ki te mea kua mukua nga konae takiuru/oplog ka kore e taea e te hono te panui tonu mai i te waahi i mahue ai he rite mo nga DBMS katoa. Ko te tikanga ka haere te hono ki te kawanatanga i rahua a ka hiahia kia whakaara ano i te aratau whakaahua tuatahi.

      Heoi ano, he rereke. Mena i momotuhia te hononga mo te wa roa (kaore ranei e tae ki te tauira MongoDB), a ka huri te oplog i tenei wa, katahi ka whakahokia mai te hononga, ka marie te hono ki te panui i nga raraunga mai i te waahi tuatahi e waatea ana, ko te aha etahi o nga raraunga i Kafka e kore ka patua.

mutunga

Ko Debezium taku wheako tuatahi ki nga punaha CDC me te tino pai. I toa te kaupapa me tana tautoko mo nga DBMS nui, te ngawari o te whirihoranga, te tautoko huinga, me te hapori kaha. Mo te hunga e hiahia ana ki te mahi, ka tūtohu ahau kia panui koe i nga kaiarahi mo Kafka Hono и Debezium.

Ka whakatauritea ki te hononga JDBC mo Kafka Connect, ko te painga nui o Debezium ko nga huringa ka panuihia mai i nga raarangi DBMS, e taea ai te whiwhi raraunga me te iti o te waahi. Ko te JDBC Connector (mai i Kafka Connect) ka patai ki te teepu kua aro turukihia i te waa kua whakaritea, a (mo te take ano) kaore e whakaputa karere ina mukua nga raraunga (me pehea e taea ai e koe te uiui i nga raraunga karekau?).

Hei whakaoti rapanga rite, ka taea e koe te aro ki nga otinga e whai ake nei (hei taapiri atu ki a Debezium):

PS

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero