
Anns an obair agam, bidh mi gu tric aâ tighinn tarsainn air fuasglaidhean teignigeach / bathar-bog Ăšr, a tha fiosrachadh mu dheidhinn a tha caran gann air an eadar-lĂŹn Ruiseanach. Leis an artaigil seo, feuchaidh mi ri aon bheĂ rn mar sin a lĂŹonadh le eisimpleir bhon chleachdadh a rinn mi o chionn ghoirid, nuair a dhâ fheumadh mi tachartasan CDC a chuir air dòigh bho dhĂ DBMS mòr-chòrdte (PostgreSQL agus MongoDB) gu cruinneachadh Kafka aâ cleachdadh Debezium. Tha mi an dòchas gum bi an artaigil ath-bhreithneachaidh seo, a nochd mar thoradh air an obair a chaidh a dhèanamh, feumail do dhaoine eile.
Dè a thâ ann an Debezium agus CDC san fharsaingeachd?
- Riochdaire roinn bathar-bog CDC (), no nas mionaidiche, is e seata de luchd-ceangail a thâ ann airson diofar DBMS a tha co-chosmhail ri frèam Apache Kafka Connect.
seo le cead fo cheadachas Apache v2.0 agus le taic bho Red Hat. Tha leasachadh air a bhith aâ dol air adhart bho 2016 agus aig an Ă m seo tha e aâ toirt taic oifigeil dha na DBMS a leanas: MySQL, PostgreSQL, MongoDB, SQL Server. Tha luchd-ceangail ann cuideachd airson Cassandra agus Oracle, ach tha iad an-drĂ sta ann an inbhe âruigsinneachd trĂ thâ, agus chan eil fiosan Ăšra aâ gealltainn co-fhreagarrachd air ais.
Ma nĂŹ sinn coimeas eadar CDC agus an dòigh-obrach thraidiseanta (nuair a leughas an tagradh dĂ ta bhon DBMS gu dĂŹreach), tha na prĂŹomh bhuannachdan aige aâ toirt a-steach buileachadh sruthadh atharrachadh dĂ ta aig ĂŹre loidhne le latency ĂŹosal, earbsachd Ă rd agus ruigsinneachd. Tha an dĂ phuing mu dheireadh air an coileanadh le bhith aâ cleachdadh cruinneachadh Kafka mar stòr airson tachartasan CDC.
Cuideachd, tha na buannachdan a 'toirt a-steach gu bheil aon mhodail air a chleachdadh airson tachartasan a stòradh, agus mar sin chan fheum an tagradh mu dheireadh a bhith draghail mu na h-nursaichean a th' ann a bhith ag obrachadh diofar DBMS.
Mu dheireadh, le bhith a âcleachdadh broker teachdaireachd aâ fosgladh cothrom airson sgèileadh còmhnard de thagraidhean a bhios a âcumail sĂšil air atharrachaidhean ann an dĂ ta. Aig an aon Ă m, tha a 'bhuaidh air an stòr dĂ ta air a lĂšghdachadh, oir gheibhear dĂ ta chan ann dĂŹreach bhon DBMS, ach bho bhuidheann Kafka.
Mu ailtireachd Debezium
Tha cleachdadh Debezium aâ tighinn sĂŹos chun sgeama shĂŹmplidh seo:
DBMS (mar stòr dĂ ta) â ceanglaiche ann an Kafka Connect â Apache Kafka â neach-cleachdaidh
Mar eisimpleir, bheir mi diagram bho lĂ rach-lĂŹn aâ phròiseict:

Ach, chan eil an sgeama seo a 'còrdadh rium gu mòr, oir tha e coltach nach eil e comasach ach ceanglaiche sinc.
Ann an da-rÏribh, tha an suidheachadh eadar-dhealaichte: lÏonadh do Data Lake (ceangal mu dheireadh san dealbh gu h-à rd) chan e seo an aon dòigh air Debezium a chleachdadh. Faodar tachartasan a chuirear gu Apache Kafka a chleachdadh leis na tagraidhean agad gus dèiligeadh ri diofar shuidheachaidhean. Mar eisimpleir:
- toirt air falbh dĂ ta neo-iomchaidh bhon tasgadan;
- a 'cur fiosan;
- Ăšrachadh clĂ r-amais rannsachaidh;
- seòrsa de chlà ran sgrÚdaidh;
- ...
Air eagal gu bheil tagradh Java agad agus nach eil feum / comasach air cruinneachadh Kafka a chleachdadh, tha cothrom ann cuideachd obrachadh troimhe . Is e a âbhuannachd follaiseach gu bheil e aâ cur Ă s don fheum air bun-structar a bharrachd (ann an cruth ceanglaiche agus Kafka). Ach, cha deach am fuasgladh seo a mholadh bho dhreach 1.1 agus chan eilear ga mholadh airson a chleachdadh (dhâ fhaodadh taic air a shon a bhith air a thoirt air falbh ann am fiosan san Ă m ri teachd).
Bruidhnidh an artaigil seo air an ailtireachd a mhol luchd-leasachaidh, a bheir seachad fulangas sgĂ inidhean agus scalability.
Suidheachadh ceangail
Gus tòiseachadh air lorg atharrachaidhean anns an luach - dà ta as cudromaiche - feumaidh sinn:
- stòr dĂ ta, a dhâ fhaodadh a bhith MySQL aâ tòiseachadh bho dhreach 5.7, PostgreSQL 9.6+, MongoDB 3.2+ ();
- brabhsair Apache Kafka;
- Eisimpleir Kafka Connect (tionndaidhean 1.x, 2.x);
- ceanglaiche Debezium a rèiteachadh.
Obraich air aâ chiad dĂ phuing, i.e. tha am pròiseas airson DBMS agus Apache Kafka a chuir a-steach taobh a-muigh raon an artaigil. Ach, dhaibhsan a tha airson a h-uile cĂ il a chuir a-steach ann am bogsa gainmhich, tha fear deiseil anns an stòr oifigeil le eisimpleirean .
Cuiridh sinn fòcas nas mionaidiche air an dà phuing mu dheireadh.
0. Ceangal Kafka
An seo agus nas fhaide san artaigil, tha na h-eisimpleirean rèiteachaidh uile air an deasbad ann an co-theacsa ĂŹomhaigh Docker air a sgaoileadh le luchd-leasachaidh Debezium. Tha na faidhlichean plugan riatanach (luchd-ceangail) ann agus bheir e seachad rèiteachadh Kafka Connect aâ cleachdadh caochladairean Ă rainneachd.
Ma tha thu am beachd Kafka Connect bho Confluent a chleachdadh, feumaidh tu na plugins de na ceanglaichean riatanach thu fhèin a chur ris an eòlaire a tha air a shònrachadh ann an plugin.path no air a shuidheachadh tro chaochladair à rainneachd CLASSPATH. Tha na roghainnean airson neach-obrach Kafka Connect agus luchd-ceangail air am mÏneachadh tro fhaidhlichean rèiteachaidh a thèid a thoirt seachad mar argamaidean gu à ithne tòiseachaidh an neach-obrach. Airson tuilleadh fiosrachaidh, faic .
Tha am pròiseas gu lèir airson stèidheachadh Debeizum anns an dreach ceangail air a dhèanamh ann an dà Ïre. Beachdaichidh sinn air gach fear dhiubh:
1. A 'stèidheachadh frèam Kafka Connect
Gus dà ta a shruthladh gu cruinneachadh Apache Kafka, tha crÏochan sònraichte air an suidheachadh ann am frèam Kafka Connect, leithid:
- crĂŹochan airson ceangal ris aâ bhuidheann,
- ainmean chuspairean anns am bi rèiteachadh aâ cheangail fhèin air a stòradh,
- ainm na buidhne anns a bheil an ceanglaiche aâ ruith (gun fhios nach cleachd thu modh sgaoilte).
Tha ĂŹomhaigh oifigeil Docker den phròiseact aâ toirt taic do rèiteachadh aâ cleachdadh caochladairean Ă rainneachd - is e seo a chleachdas sinn. Mar sin, luchdaich sĂŹos an dealbh:
docker pull debezium/connectTha an seata as lugha de chaochladairean Ă rainneachd a dhâ fheumar gus an ceanglaiche a ruith mar a leanas:
-
BOOTSTRAP_SERVERS=kafka-1:9092,kafka-2:9092,kafka-3:9092- liosta tĂšsail de luchd-frithealaidh brabhsair Kafka gus liosta iomlan de bhuill brabhsair fhaighinn; -
OFFSET_STORAGE_TOPIC=connector-offsets- cuspair airson à iteachan a stòradh far a bheil an ceanglaiche suidhichte an-drà sta; -
CONNECT_STATUS_STORAGE_TOPIC=connector-status- cuspair airson inbhe a âcheangail agus na gnĂŹomhan aige a stòradh; -
CONFIG_STORAGE_TOPIC=connector-config- cuspair airson stòradh dà ta rèiteachaidh ceangail agus na gnÏomhan aige; -
GROUP_ID=1- aithnichear aâ bhuidheann de luchd-obrach air am faodar an obair ceangail a choileanadh; riatanach nuair a thathar aâ cleachdadh sgaoileadh (air a chuairteachadh) modh.
Bidh sinn aâ tòiseachadh aâ bhogsa leis na caochladairean seo:
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.2Nota mu Avro
Gu gnĂ thach, bidh Debezium aâ sgrĂŹobhadh dĂ ta ann an cruth JSON, a tha iomchaidh airson bogsaichean gainmhich agus meudan beaga de dhĂ ta, ach a dhâ fhaodadh a bhith na dhuilgheadas ann an stòran-dĂ ta lĂ n luchdaichte. Is e roghainn eile an Ă ite an inneal-tionndaidh JSON teachdaireachdan a chuir gu sreath aâ cleachdadh gu cruth binary, a lughdaicheas an luchd air an fho-shiostam I / O ann an Apache Kafka.
Gus Avro a chleachdadh feumaidh tu fear air leth a chleachdadh (airson sgeamaichean a stòradh). Bidh na caochladairean airson an inneal-tionndaidh aâ coimhead mar seo:
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.AvroConverterTha mion-fhiosrachadh mu bhith aâ cleachdadh Avro agus aâ stèidheachadh clĂ r air a shon taobh a-muigh farsaingeachd an artaigil - nas fhaide, airson soilleireachd, cleachdaidh sinn JSON.
2. A 'stèidheachadh an ceanglaiche fhèin
A-nis faodaidh tu a dhol dÏreach gu rèiteachadh an ceanglaiche fhèin, a leughas dà ta bhon stòr.
Bheir sinn sÚil air an eisimpleir de luchd-ceangail airson dà DBMS: PostgreSQL agus MongoDB, air a bheil eòlas agam agus air a bheil eadar-dhealachaidhean (ged a tha e beag, ach ann an cuid de chÚisean cudromach!).
Tha an rèiteachadh air a mhĂŹneachadh ann an comharradh JSON agus air a luchdachadh suas gu Kafka Connect aâ cleachdadh iarrtas POST.
2.1. PostgreSQL
Eisimpleir de rèiteachadh ceangail airson 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"
}
}Tha prionnsabal obrachadh a 'cheangail an dèidh an stèidheachadh seo gu math sÏmplidh:
- Aig a 'chiad thoiseach, bidh e a' ceangal ris an stòr-dĂ ta a tha air a shònrachadh anns an rèiteachadh agus a 'tòiseachadh sa mhodh dealbh tĂšsail, aâ cur gu Kafka aâ chiad sheata de dhĂ ta a fhuaireadh leis aâ chumha
SELECT * FROM table_name. - Ăs deidh an tòiseachadh a bhith deiseil, thèid an ceanglaiche a-steach don mhodh gus atharrachaidhean bho fhaidhlichean PostgreSQL WAL a leughadh.
Mu na roghainnean a chaidh a chleachdadh:
-
name- ainm a 'cheangail airson a bheil an rèiteachadh a tha air a mhĂŹneachadh gu h-ĂŹosal air a chleachdadh; san Ă m ri teachd, tha an t-ainm seo air a chleachdadh gus obrachadh leis aâ cheangail (ie coimhead air an inbhe / ath-thòisich / Ăšraich an rèiteachadh) tro Kafka Connect REST API; -
connector.class- an clas ceangail DBMS a chleachdas an ceanglaiche rèiteachaidh; -
plugin.name- ainm aâ phlug airson dĂŹ-chòdachadh loidsigeach air dĂ ta bho fhaidhlichean WAL. Ri fhaighinn airson taghadhwal2json,decoderbuffsиpgoutput. Feumaidh aâ chiad dhĂ leudachadh iomchaidh a chuir a-steach san DBMS, aguspgoutputairson PostgreSQL dreach 10 agus nas Ă irde chan eil feum air lĂ imhseachadh a bharrachd; -
database.*- roghainnean airson ceangal ris an stòr-dĂ ta, cĂ itedatabase.server.name- ainm an eisimpleir PostgreSQL a chaidh a chleachdadh gus ainm aâ chuspair a chruthachadh ann am buidheann Kafka; -
table.include.list- liosta de chlà ran anns a bheil sinn airson sÚil a chumail air atharrachaidhean; air a shònrachadh ann an cruthschema.table_name; chan urrainnear a chleachdadh còmhla ritable.exclude.list; -
heartbeat.interval.ms- eadar-ama (ann am milliseconds) leis am bi an ceanglaiche aâ cur teachdaireachdan buille cridhe gu cuspair sònraichte; -
heartbeat.action.query- iarrtas a thèid a chuir gu bàs nuair a chuireas tu a h-uile teachdaireachd buille cridhe (tha an roghainn air nochdadh bhon dreach 1.1); -
slot.name- ainm an t-slot mac-samhail a chleachdas an ceanglaiche; publication.nameâ Ainm ann am PostgreSQL a bhios an ceanglaiche aâ cleachdadh. Mura h-eil e ann, feuchaidh Debezium ri chruthachadh. Mura h-eil còraichean gu leòr aig aâ chleachdaiche fon deach an ceangal a dhèanamh airson aâ ghnĂŹomh seo, falbhaidh an ceanglaiche le mearachd;-
transformsaâ dearbhadh mar a dhâ atharraicheas tu ainm aâ chuspair targaid:-
transforms.AddPrefix.typeaâ nochdadh gun cleachd sinn abairtean cunbhalach; -
transforms.AddPrefix.regex- masg a bhios ag ath-mhĂŹneachadh ainm aâ chuspair targaid; -
transforms.AddPrefix.replacement- gu dĂŹreach na tha sinn ag ath-mhĂŹneachadh.
-
Tuilleadh mu bhuille-cridhe agus cruth-atharrachadh
Gu gnĂ thach, bidh an ceanglaiche aâ cur dĂ ta gu Kafka airson gach gnothach dealasach, agus aâ sgrĂŹobhadh a LSN (Ăireamh Seicheamh Log) gu cuspair na seirbheis offset. Ach dè a thachras ma tha an ceanglaiche air a rèiteachadh gus nach leugh e an stòr-dĂ ta gu lèir, ach dĂŹreach pĂ irt de na clĂ ran aige (anns nach bi Ăšrachaidhean dĂ ta a âtachairt gu tric)?
- Leughaidh an ceanglaiche faidhlichean WAL agus chan lorg e gealltanasan malairt annta gu na bĂšird air a bheil e aâ cumail sĂšil.
- Mar sin, chan Ăšraich e an suidheachadh lĂ ithreach aige an dĂ rna cuid sa chuspair no san t-slot ath-riochdachadh.
- Mar thoradh air seo, thèid faidhlichean WAL a chumail air diosc agus is dòcha gun ruith iad a-mach à à ite diosc.
Agus an seo thig roghainnean gu teasairginn. heartbeat.interval.ms и heartbeat.action.query. Le bhith aâ cleachdadh nan roghainnean sin ann an cĂ raidean bidh e comasach iarrtas a chuir an gnĂŹomh airson dĂ ta atharrachadh ann an clĂ r air leth gach uair a thèid teachdaireachd buille-cridhe a chuir. Mar sin, tha an LSN air a bheil an ceanglaiche suidhichte an-drĂ sta (anns an t-slot mac-samhail) air Ăšrachadh gu cunbhalach. Leigidh seo leis an DBMS faidhlichean WAL a thoirt air falbh nach eil a dhĂŹth tuilleadh. Faodaidh tu barrachd ionnsachadh mu mar a tha na roghainnean ag obair ann .
Is e roghainn eile a tha airidh air aire nas mionaidiche transforms. Ged a tha e nas motha mu dheidhinn goireasachd agus bòidhchead ...
Gu gnĂ thach, bidh Debezium aâ cruthachadh chuspairean aâ cleachdadh aâ phoileasaidh ainmeachaidh a leanas: serverName.schemaName.tableName. Is dòcha nach bi seo an-còmhnaidh goireasach. Roghainnean transforms aâ cleachdadh abairtean cunbhalach, faodaidh tu liosta de chlĂ ran a mhĂŹneachadh aig am feum tachartasan a bhith air an stiĂšireadh gu cuspair le ainm sònraichte.
Anns an rèiteachadh againn taing do transforms bidh na leanas aâ tachairt: thèid a h-uile tachartas CDC bhon stòr-dĂ ta rianail chun chuspair leis an ainm data.cdc.dbname. Rud eile (Ă s aonais na roghainnean sin), chruthaicheadh ââDebezium cuspair gu bunaiteach airson gach clĂ r den fhoirm: pg-dev.public.<table_name>.
Cuingealachaidhean ceangail
Aig deireadh an tuairisgeul air rèiteachadh an ceanglaiche airson PostgreSQL, is fhiach bruidhinn mu na feartan / crÏochan obrach a leanas:
- Tha gnĂŹomhachd ceangail airson PostgreSQL an urra ris aâ bhun-bheachd de chòdachadh loidsigeach. Uime sin esan chan eil e aâ cumail sĂšil air iarrtasan airson structar an stòr-dĂ ta atharrachadh (DDL) - a rèir sin, cha bhi an dĂ ta seo anns na cuspairean.
- Leis gu bheilear aâ cleachdadh sliotan mac-samhail, tha e comasach ceangal a cheangal a-mhĂ in gu prĂŹomh eisimpleir DBMS.
- Ma tha còraichean leughaidh a-mhĂ in aig an neach-cleachdaidh fon bheil an ceanglaiche aâ ceangal ris an stòr-dĂ ta, an uairsin ron chiad fhoillseachadh, feumaidh tu slot mac-samhail a chruthachadh le lĂ imh agus fhoillseachadh don stòr-dĂ ta.
A 'cur a-steach Configuration
Mar sin luchdaich sinn ar rèiteachadh a-steach don cheangal:
curl -i -X POST -H "Accept:application/json"
-H "Content-Type:application/json" http://localhost:8083/connectors/
-d @pg-con.jsonNÏ sinn cinnteach gun robh an luchdachadh sÏos soirbheachail agus thòisich an ceanglaiche:
$ 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"}Sgoinneil: tha e deiseil agus deiseil airson a dhol. A-nis leig dhuinn a bhith nad neach-cleachdaidh agus ceangal a dhèanamh ri Kafka, às deidh sin cuiridh sinn ris agus atharraich sinn inntrig sa chlà r:
$ 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', 'foo@bar.com');
INSERT 0 1
postgres=# update customers set first_name = 'egg' where id = 1005;
UPDATE 1Anns a 'chuspair againn, bidh seo air a thaisbeanadh mar a leanas:
JSON glè fhada leis na h-atharrachaidhean againn
{
"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":"foo@bar.com"
},
"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":"foo@bar.com"
},
"after":{
"id":1005,
"first_name":"egg",
"last_name":"bar",
"email":"foo@bar.com"
},
"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
}
}Anns gach cÚis, tha na clà ran a 'gabhail a-steach an iuchair (PK) den chlà r a chaidh atharrachadh, agus fÏor bhrÏgh nan atharrachaidhean: dè bha an clà r roimhe agus dè a thà inig às a dhèidh.
- Ann an cĂšis
INSERT: luach roimhe (before) co-ionannnullair a leantainn leis an t-sreang a chaidh a chuir a-steach. - Ann an cĂšis
UPDATE: aigpayload.beforetha staid an t-sreath roimhe air a thaisbeanadh, agus ann anpayload.after- Ăšr le brĂŹgh an atharrachaidh.
2.2 MongoDB
Bidh an ceanglaiche seo aâ cleachdadh an uidheamachd mac-samhail Ă bhaisteach MongoDB, aâ leughadh fiosrachadh bho oplog prĂŹomh nĂłd DBMS.
Mar an ceudna ris aâ cheangail a chaidh a mhĂŹneachadh mar-thĂ airson PgSQL, an seo, cuideachd, aig aâ chiad dol-a-mach, thathas aâ togail aâ phrĂŹomh dhealbh dĂ ta, Ă s deidh sin bidh an ceanglaiche ag atharrachadh gu modh leughaidh oplog.
Eisimpleir rèiteachaidh:
{
"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"
}
}Mar a chÏ thu, chan eil roghainnean Úra ann an seo an taca ris an eisimpleir roimhe, ach dÏreach chaidh an à ireamh de roghainnean a tha an urra ri ceangal ris an stòr-dà ta agus na ro-leasachain aca a lughdachadh.
Roghainnean transforms an turas seo nĂŹ iad na leanas: tionndaidh ainm aâ chuspair targaid bhon sgeama <server_name>.<db_name>.<collection_name> в data.cdc.mongo_<db_name>.
fulangas lochd
Tha cĂšis fulangas sgĂ inidhean agus ruigsinneachd Ă rd nar n-Ăšine nas gèire na bha e a-riamh - gu sònraichte nuair a bhios sinn aâ bruidhinn mu dhĂ ta agus gnothaichean, agus nach eil lorg atharrachadh dĂ ta air an taobh sa chĂšis seo. Bheir sinn sĂšil air dè as urrainn a dhol ceĂ rr ann am prionnsapal agus dè a thachras do Debezium anns gach cĂšis.
Tha trĂŹ roghainnean tarraing a-mach ann:
- Dh'fhĂ illig Kafka Connect. Ma tha Connect air a rèiteachadh gus obrachadh ann am modh sgaoilte, feumaidh seo grunn luchd-obrach an aon bhuidheann.id a shuidheachadh. An uairsin, ma dh âfhailicheas aon dhiubh, thèid an ceanglaiche ath-thòiseachadh air an neach-obrach eile agus lean air adhart aâ leughadh bhon t-suidheachadh dealasach mu dheireadh sa chuspair ann an Kafka.
- Caill ceangal le buidheann Kafka. Bidh an ceanglaiche dĂŹreach aâ stad air leughadh aig an t-suidheachadh nach do chuir e gu Kafka agus bho Ă m gu Ă m feuchaidh e ri ath-chuir air ais gus an soirbhich leis an oidhirp.
- Stòr dĂ ta nach eil ri fhaighinn. Feuchaidh an ceanglaiche ri ath-cheangal ris an stòr a rèir an rèiteachaidh. Is e an roghainn Ă bhaisteach 16 oidhirpean aâ cleachdadh . Ăs deidh an 16mh oidhirp air fĂ iligeadh, thèid an obair a chomharrachadh mar Dh'fhĂ illig agus feumar ath-thòiseachadh le lĂ imh tro eadar-aghaidh Kafka Connect REST.
- Ann an cĂšis PostgreSQL cha tèid an dĂ ta a chall, oir le bhith aâ cleachdadh sliotan mac-samhail cuiridh sin casg air cuir Ă s do fhaidhlichean WAL nach leugh an ceanglaiche. Anns a 'chĂšis seo, tha eas-bhuannachd ann: ma tha an ceangal lĂŹonra eadar an ceanglaiche agus an DBMS air a bhriseadh airson Ăšine mhòr, tha teansa gum bi an t-Ă ite diosg a' ruith a-mach, agus dh'fhaodadh seo leantainn gu fĂ illigeadh an DBMS gu lèir.
- Ann an cĂšis MySQL faodar faidhlichean binlog a thionndadh leis an DBMS fhèin mus tèid ceangal a thoirt air ais. Bidh seo ag adhbhrachadh gun tèid an ceanglaiche a-steach don staid a dhâ fhĂ illig, agus feumaidh e ath-thòiseachadh sa mhodh dealbh tĂšsail gus leantainn air adhart aâ leughadh bho binlogs gus obrachadh Ă bhaisteach a thoirt air ais.
- air a ' MongoDB. Tha na sgrĂŹobhainnean ag rĂ dh: tha giĂšlan aâ cheangail air eagal âs gun tèid na faidhlichean log/oplog a dhubhadh Ă s agus nach urrainn don cheangalaiche cumail aâ leughadh bhon t-suidheachadh far an do dhâ fhalbh e mar an ceudna airson a h-uile DBMS. Tha e na laighe anns an fhĂŹrinn gun tèid an ceanglaiche a-steach don stĂ it Dh'fhĂ illig agus bidh feum air ath-thòiseachadh sa mhodh dealbh tĂšsail.
Ach, tha eisgeachdan ann. Ma chaidh an ceanglaiche a dhĂŹ-cheangal airson Ăšine mhòr (no nach b âurrainn dha suidheachadh MongoDB a ruighinn), agus chaidh an oplog tro chuairteachadh rè na h-Ăšine seo, an uairsin nuair a thèid an ceangal ath-nuadhachadh, leanaidh an ceanglaiche gu socair aâ leughadh dĂ ta bhon chiad suidheachadh a tha ri fhaighinn, is e sin as coireach gu bheil cuid den dĂ ta ann an Kafka chan eil buailidh.
co-dhĂšnadh
Is e Debezium aâ chiad eòlas agam le siostaman CDC agus tha e air a bhith gu math dòchasach san fharsaingeachd. Bhris am pròiseact taic bhon phrĂŹomh DBMS, cho furasta âs a bha e rèiteachaidh, taic airson cruinneachadh agus coimhearsnachd ghnĂŹomhach. Dhaibhsan aig a bheil Ăšidh ann an cleachdadh, tha mi aâ moladh gun leugh thu an stiĂšireadh airson и .
An coimeas ris aâ cheangal JDBC airson Kafka Connect, is e prĂŹomh bhuannachd Debezium gu bheil atharrachaidhean air an leughadh bho logaichean DBMS, a leigeas le dĂ ta fhaighinn le glè bheag de dhâ Ăšine. Bidh an JDBC Connector (bho Kafka Connect) aâ ceasnachadh aâ bhòrd sgrĂšdaichte aig Ă m stèidhichte agus (airson an aon adhbhar) cha bhith e aâ gineadh teachdaireachdan nuair a thèid dĂ ta a dhubhadh Ă s (ciamar a dhâ fhaighnicheas tu dĂ ta nach eil ann?).
Gus fuasgladh fhaighinn air duilgheadasan coltach ris, faodaidh tu aire a thoirt do na fuasglaidhean a leanas (a bharrachd air Debezium):
- Beagan fhuasglaidhean MySQL a-mhĂ in:
- , ach tha seo gu tur eadar-dhealaichte "roinn cuideam".
PS
Leugh cuideachd air ar blog:
- ÂŤ";
- ÂŤ";
- ÂŤ".
Source: www.habr.com
