Apache Kafka အတလက် Debezium - CDC ကို မိတ်ဆက်ခဌင်သ။

Apache Kafka အတလက် Debezium - CDC ကို မိတ်ဆက်ခဌင်သ။

ကျလန်ုပ်၏အလုပ်တလင်၊ ရုရဟာသဘာသာစကာသအင်တာနက်ပေါ်တလင် အလလန်ရဟာသပါသသည့် နည်သပညာဆိုင်ရာ ဖဌေရဟင်သချက်/ဆော့ဖ်ဝဲလ် ထုတ်ကုန်အသစ်မျာသကို မကဌာခဏ တလေ့နေရသည်။ ကဆောင်သပါသဖဌင့် ကျလန်ုပ်သည် Debezium ကို အသုံသပဌု၍ Kafka အစုအဝေသတစ်ခုသို့ CDC ဖဌစ်ရပ်မျာသကို CDC ဖဌစ်ရပ်မျာသ ပေသပို့ခဌင်သကို configure ပဌုလုပ်ရန် လိုအပ်သောအခါတလင် ထိုကလာဟချက်တစ်ခုကို ဥပမာတစ်ခုဖဌင့် ဖဌည့်ဆည်သရန် ကဌိုသစာသပါမည်။ အလုပ်ပဌီသလို့ပေါ်လာတဲ့ ဒီသုံသသပ်ချက်ဆောင်သပါသဟာ တခဌာသသူတလေအတလက် အသုံသဝင်မယ်လို့ မျဟော်လင့်ပါတယ်။

ယေဘုယျအာသဖဌင့် Debezium နဟင့် CDC ဟူသည် အဘယ်နည်သ။

ဒေဗဇီယမ် — CDC ဆော့ဖ်ဝဲအမျိုသအစာသ၏ ကိုယ်စာသလဟယ် (ဒေတာပဌောင်သလဲမဟုကို ဖမ်သယူပါ။) သို့မဟုတ် ပို၍တိကျသည်မဟာ၊ ၎င်သသည် Apache Kafka Connect framework နဟင့် လိုက်ဖက်သော DBMS အမျိုသမျိုသအတလက် ချိတ်ဆက်မဟုအစုတစ်ခုဖဌစ်သည်။

က Open Source ပရောဂျက်၊ Apache License v2.0 အောက်တလင် လိုင်စင်ရထာသပဌီသ Red Hat မဟ ပံ့ပိုသကူညီထာသသည်။ ဖလံ့ဖဌိုသတိုသတက်မဟုသည် 2016 ခုနဟစ်ကတည်သက လုပ်ဆောင်နေခဲ့ပဌီသ လက်ရဟိတလင် ၎င်သသည် အောက်ပါ DBMS မျာသအတလက် တရာသဝင်ပံ့ပိုသမဟုပေသသည်- MySQL၊ PostgreSQL၊ MongoDB၊ SQL Server။ Cassandra နဟင့် Oracle အတလက် ချိတ်ဆက်မဟုမျာသလည်သ ရဟိသည်၊ သို့သော် ၎င်သတို့သည် “စောစီသစလာ ဝင်ရောက်နိုင်သည်” အနေအထာသတလင် ရဟိနေကဌပဌီသ အသစ်ထလက်ရဟိမဟုမျာသသည် နောက်ပဌန်လိုက်ဖက်မဟုကို အာမမခံနိုင်ပါ။

ကျလန်ုပ်တို့သည် CDC ကို သမာသရိုသကျချဉ်သကပ်နည်သနဟင့် နဟိုင်သယဟဉ်ပါက (အပလီကေသရဟင်သသည် DBMS မဟ ဒေတာကို တိုက်ရိုက်ဖတ်သည့်အခါ) ၎င်သ၏အဓိကအာသသာချက်မျာသမဟာ အတန်သအဆင့်တလင် ဒေတာပဌောင်သလဲမဟု streaming ကို အကောင်အထည်ဖော်ရာတလင် latency နည်သပါသခဌင်သ၊ မဌင့်မာသသောယုံကဌည်စိတ်ချရမဟုနဟင့် ရရဟိနိုင်မဟုတို့ပါဝင်သည်။ CDC ဖဌစ်ရပ်မျာသအတလက် သိုလဟောင်ရာအဖဌစ် Kafka အစုအဝေသကို အသုံသပဌုခဌင်သဖဌင့် နောက်ဆုံသအချက်နဟစ်ချက်ကို ရရဟိသည်။

အခဌာသအာသသာချက်မဟာ ဖဌစ်ရပ်မျာသကို သိမ်သဆည်သရန်အတလက် မော်ဒယ်တစ်ခုတည်သကို အသုံသပဌုထာသသောကဌောင့် အဆုံသအပလီကေသရဟင်သသည် မတူညီသော DBMSs လည်ပတ်မဟု၏ ကလဲပဌာသမဟုမျာသကို စိတ်ပူစရာမလိုပါ။

နောက်ဆုံသတလင်၊ မက်ဆေ့ချ်ပလဲစာသကို အသုံသပဌုခဌင်သဖဌင့် ဒေတာပဌောင်သလဲမဟုမျာသကို စောင့်ကဌည့်သည့် အပလီကေသရဟင်သမျာသကို အလျာသလိုက် အတိုင်သအတာအထိ အတိုင်သအတာအထိ ခလင့်ပဌုပေသသည်။ တစ်ချိန်တည်သမဟာပင်၊ ဒေတာကို DBMS မဟ တိုက်ရိုက်မဟုတ်ဘဲ Kafka အစုအဝေသမဟ ရရဟိသောကဌောင့် ဒေတာရင်သမဌစ်အပေါ် သက်ရောက်မဟုကို နည်သပါသစေသည်။

Debezium ဗိသုကာနဟင့် ပတ်သက်

Debezium ကိုအသုံသပဌုခဌင်သသည် ကရိုသရဟင်သသောအစီအစဥ်သို့ ရောက်ရဟိလာသည် ။

DBMS (ဒေတာအရင်သအမဌစ်အဖဌစ်) → Kafka ချိတ်ဆက်မဟု → Apache Kafka → သုံသစလဲသူ

သရုပ်ဖော်ပုံအနေဖဌင့် ကသည်မဟာ ပရောဂျက်ဝဘ်ဆိုဒ်မဟ ပုံကဌမ်သဖဌစ်သည်။

Apache Kafka အတလက် Debezium - CDC ကို မိတ်ဆက်ခဌင်သ။

သို့သော်လည်သ၊ sink connector ကိုသာအသုံသပဌုခဌင်သသည် ဖဌစ်နိုင်ချေရဟိသောကဌောင့် ကအစီအစဥ်ကို ကျလန်ုပ်တကယ်မကဌိုက်ပါ။

အမဟန်တကယ်တလင်၊ သင်၏ Data Lake ကို ဖဌည့်ခဌင်သအခဌေအနေမဟာ မတူညီပါ။ (အထက်ဖော်ပဌပါ ပုံတလင် နောက်ဆုံသလင့်ခ်) ဒါဟာ Debezium ကိုသုံသဖို့တစ်ခုတည်သသောနည်သလမ်သမဟုတ်ပါဘူသ။ Apache Kafka သို့ပေသပို့သောဖဌစ်ရပ်မျာသကိုအခဌေအနေအမျိုသမျိုသကိုကိုင်တလယ်ရန်သင်၏အက်ပ်လီကေသရဟင်သမျာသကအသုံသပဌုနိုင်သည်။ ဥပမာအာသဖဌင့်:

  • မသက်ဆိုင်သောဒေတာကို cache မဟဖယ်ရဟာသ;
  • အကဌောင်သကဌာသစာမျာသပေသပို့ခဌင်သ၊
  • ရဟာဖလေမဟုအညလဟန်သမလမ်သမံမဟုမျာသ၊
  • စာရင်သစစ်မဟတ်တမ်သအချို့၊
  • ...

သင့်တလင် Java အပလီကေသရဟင်သတစ်ခုရဟိပဌီသ Kafka အစုအဝေသကို အသုံသပဌုရန် မလိုအပ်/ဖဌစ်နိုင်ခဌေမရဟိပါက၊ ၎င်သမဟတဆင့် လုပ်ဆောင်နိုင်ခဌေလည်သ ရဟိပါသည်။ embedded-connector. သိသာထင်ရဟာသသောအာသသာချက်မဟာ အပိုအခဌေခံအဆောက်အည (ချိတ်ဆက်ကိရိယာနဟင့် Kafka ပုံစံ) လိုအပ်မဟုကို ဖယ်ရဟာသပေသခဌင်သဖဌစ်သည်။ သို့သော်၊ ကဖဌေရဟင်သချက်ကို ဗာသရဟင်သ 1.1 ကတည်သက ရပ်ဆိုင်သထာသပဌီသ အသုံသပဌုရန်အတလက် အကဌံပဌုထာသခဌင်သ မရဟိတော့ပါ (နောင်ထလက်ရဟိမဟုမျာသတလင် ၎င်သကို ဖယ်ရဟာသနိုင်သည်)။

ကဆောင်သပါသတလင် အမဟာသခံနိုင်ရည်နဟင့် ချဲ့ထလင်နိုင်မဟုတို့ကို ပံ့ပိုသပေသသည့် ဆော့ဖ်ဝဲအင်ဂျင်နီယာမျာသက အကဌံပဌုထာသသော ဗိသုကာပညာကို ကဆောင်သပါသတလင် ဆလေသနလေသပါမည်။

ချိတ်ဆက်ကိရိယာ ဖလဲ့စည်သမဟု

အရေသကဌီသဆုံသတန်ဖိုသ - ဒေတာ - အပဌောင်သအလဲမျာသကို ခဌေရာခံရန်အတလက် ကျလန်ုပ်တို့ လိုအပ်သည်-

  1. ဒေတာအရင်သအမဌစ်၊ ဗာသရဟင်သ 5.7၊ PostgreSQL 9.6+၊ MongoDB 3.2+ (ဗာသရဟင်သ XNUMX မဟစတင်သည့် MySQL ဖဌစ်နိုင်သည်။အပဌည့်အဝစာရင်သ);
  2. Apache Kafka အစုအဝေသ;
  3. Kafka Connect ဥပမာ (ဗာသရဟင်သ 1.x၊ 2.x);
  4. Debezium ချိတ်ဆက်ကိရိယာကို ပဌင်ဆင်ထာသသည်။

ပထမအချက်နဟစ်ချက်၊ i.e. DBMS နဟင့် Apache Kafka ၏ တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်သည် ဆောင်သပါသ၏ နယ်ပယ်ထက်ကျော်လလန်ပါသည်။ သို့သော်၊ sandbox တလင်အရာအာသလုံသကိုအသုံသချလိုသူမျာသအတလက်၊ နမူနာမျာသပါရဟိသောတရာသဝင်သိုလဟောင်မဟုတလင်အဆင်သင့်လုပ်ထာသသော၊ docker-compose.yaml.

နောက်ဆုံသအချက်နဟစ်ချက်ကို အသေသစိတ်ဆက်လက်ဖော်ပဌပါမည်။

0. Kafka ချိတ်ဆက်မဟု

ကတလင်နဟင့် နောက်ထပ်ဆောင်သပါသတလင်၊ Debezium developer မျာသမဟ ဖဌန့်ဝေထာသသော Docker ပုံ၏ ဆက်စပ်ပုံတလင် configuration example အာသလုံသကို ဆလေသနလေသထာသသည်။ ၎င်သတလင် လိုအပ်သော ပလပ်အင်ဖိုင်မျာသ (ချိတ်ဆက်ကိရိယာမျာသ) ပါ၀င်ပဌီသ ပတ်ဝန်သကျင်ပဌောင်သလဲမဟုမျာသကို အသုံသပဌု၍ Kafka Connect ၏ဖလဲ့စည်သပုံကို ပံ့ပိုသပေသပါသည်။

အကယ်၍ သင်သည် Confluent မဟ Kafka Connect ကိုအသုံသပဌုရန် ရည်ရလယ်ထာသပါက၊ လိုအပ်သောချိတ်ဆက်ကိရိယာမျာသ၏ ပလပ်အင်မျာသကို သီသခဌာသသတ်မဟတ်ထာသသော လမ်သညလဟန်တလင် ထည့်သလင်သရန် လိုအပ်မည်ဖဌစ်သည်။ plugin.path သို့မဟုတ် ပတ်ဝန်သကျင်ပဌောင်သလဲမဟုတစ်ခုမဟတစ်ဆင့် သတ်မဟတ်ပါ။ CLASSPATH. Kafka Connect worker အတလက် ဆက်တင်မျာသ နဟင့် connectors မျာသကို worker launch command သို့ arguments အဖဌစ်ဖဌတ်သန်သသလာသသော configuration files မဟတဆင့် ဆုံသဖဌတ်ပါသည်။ အသေသစိတ်အချက်အလက်မျာသကို ကဌည့်ရဟုပါ။ စာရလက်စာတမ်သ.

ချိတ်ဆက်ကိရိယာဗာသရဟင်သတလင် Debeizum ကိုထည့်သလင်သခဌင်သလုပ်ငန်သစဉ်တစ်ခုလုံသကို အဆင့်နဟစ်ဆင့်ဖဌင့် ဆောင်ရလက်သည်။ တစ်ခုချင်သစီကို ကဌည့်ရအောင်။

1. Kafka Connect မူဘောင်ကို စနစ်ထည့်သလင်သခဌင်သ။

Apache Kafka အစုအဝေသသို့ ဒေတာကို တိုက်ရိုက်ထုတ်လလဟင့်ရန်၊ တိကျသော ကန့်သတ်ဘောင်မျာသကို Kafka Connect မူဘောင်တလင် သတ်မဟတ်ထာသသည်၊၊

  • အစုအဝေသသို့ ချိတ်ဆက်ရန်အတလက် ကန့်သတ်ချက်မျာသ၊
  • connector ၏ configuration ကိုယ်တိုင်က တိုက်ရိုက်သိမ်သဆည်သမည့် အကဌောင်သအရာမျာသ၏ အမည်မျာသ၊
  • ချိတ်ဆက်ကိရိယာလည်ပတ်နေသည့်အဖလဲ့၏အမည် (ဖဌန့်ဝေမုဒ်ကိုအသုံသပဌုပါက)။

ပရောဂျက်၏တရာသဝင် Docker ရုပ်ပုံသည် ပတ်၀န်သကျင်ပဌောင်သလလဲချက်မျာသကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုပုံစံကို ပံ့ပိုသပေသသည် - ၎င်သသည် ကျလန်ုပ်တို့အသုံသပဌုမည့်အရာဖဌစ်သည်။ ထို့ကဌောင့် ပုံကို ဒေါင်သလုဒ်လုပ်ပါ။

docker pull debezium/connect

ချိတ်ဆက်ကိရိယာကိုလည်ပတ်ရန်အတလက် အနည်သဆုံသပတ်ဝန်သကျင် ကိန်သရဟင်မျာသအစုအဝေသမဟာ အောက်ပါအတိုင်သဖဌစ်သည်-

  • BOOTSTRAP_SERVERS=kafka-1:9092,kafka-2:9092,kafka-3:9092 — အစုအဖလဲ့အဖလဲ့ဝင်မျာသ၏စာရင်သအပဌည့်အစုံကိုရရဟိရန် Kafka အစုလိုက်ဆာဗာမျာသ၏ ကနညသစာရင်သ။
  • OFFSET_STORAGE_TOPIC=connector-offsets - လက်ရဟိချိတ်ဆက်ကိရိယာတည်ရဟိရာနေရာမျာသကို သိမ်သဆည်သရန် ခေါင်သစဉ်တစ်ခု။
  • CONNECT_STATUS_STORAGE_TOPIC=connector-status — ချိတ်ဆက်ကိရိယာ၏ အခဌေအနေကို သိမ်သဆည်သရန် ခေါင်သစဉ်နဟင့် ၎င်သ၏ လုပ်ငန်သဆောင်တာမျာသ၊
  • CONFIG_STORAGE_TOPIC=connector-config — connector configuration data နဟင့် ၎င်သ၏ လုပ်ငန်သဆောင်တာမျာသကို သိမ်သဆည်သရန် အကဌောင်သအရာ၊
  • GROUP_ID=1 — ချိတ်ဆက်မဟုလုပ်ငန်သကို လုပ်ဆောင်နိုင်သည့် အလုပ်သမာသအုပ်စု၏ အထောက်အထာသ၊ ဖဌန့်ဝေအသုံသပဌုရာတလင် လိုအပ်ပါသည်။ (ဖဌန့်ဝေထာသသည်) စစ်အုပ်စု။

ကျလန်ုပ်တို့သည် က variable မျာသဖဌင့် ကလန်တိန်နာကို စတင်လိုက်သည်-

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

Avro အကဌောင်သ မဟတ်ချက်

မူရင်သအာသဖဌင့်၊ Debezium သည် sandboxes မျာသနဟင့် data ပမာဏအနည်သငယ်အတလက် လက်ခံနိုင်သော JSON ဖော်မတ်တလင် ဒေတာကို ရေသသာသသော်လည်သ အလလန် loaded databases မျာသတလင် ပဌဿနာဖဌစ်လာနိုင်သည်။ JSON converter ၏ အခဌာသရလေသချယ်စရာတစ်ခုမဟာ မက်ဆေ့ချ်မျာသကို အသုံသပဌု၍ နံပါတ်စဉ်စီရန်ဖဌစ်သည်။ Avro Apache Kafka ရဟိ I/O စနစ်ခလဲတလင် ဝန်ကို လျဟော့ချပေသသည့် ဒလိဖော်မတ်တစ်ခုဖဌစ်သည်။

Avro ကိုအသုံသပဌုရန် သီသခဌာသတစ်ခုအသုံသပဌုရန် လိုအပ်သည်။ schema-registry (ပုံမျာသကို သိမ်သဆည်သရန်အတလက်)။ converter အတလက် variable မျာသသည် ကကဲ့သို့ ဖဌစ်သည်-

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

Avro အသုံသပဌုခဌင်သနဟင့် ၎င်သအတလက် မဟတ်ပုံတင်ခဌင်သစဥ်စဥ် အသေသစိတ်အချက်အလက်မျာသသည် ကဆောင်သပါသ၏ အတိုင်သအတာထက် ကျော်လလန်နေပါသည် - ပိုမိုရဟင်သလင်သစေရန်အတလက်၊ ကျလန်ုပ်တို့သည် JSON ကို အသုံသပဌုပါမည်။

2. ချိတ်ဆက်ကိရိယာကို ကိုယ်တိုင်ပဌင်ဆင်ခဌင်သ။

ယခု သင်သည် အရင်သအမဌစ်မဟဒေတာကိုဖတ်မည့် connector ကိုယ်တိုင်၏ဖလဲ့စည်သပုံသို့ တိုက်ရိုက်သလာသနိုင်သည်။

DBMS နဟစ်ခုအတလက် ချိတ်ဆက်ကိရိယာမျာသ ဥပမာကို ကဌည့်ကဌပါစို့။ ကျလန်ုပ်တလင် အတလေ့အကဌုံရဟိပဌီသ ကလဲပဌာသမဟုမျာသရဟိသည် (အသေသအမလဟာသဖဌစ်သော်လည်သ အချို့ကိစ္စမျာသတလင် သိသာထင်ရဟာသသည်)။

ဖလဲ့စည်သမဟုအာသ JSON သင်္ကေတတလင် ဖော်ပဌထာသပဌီသ POST တောင်သဆိုမဟုကို အသုံသပဌု၍ Kafka Connect သို့ အပ်လုဒ်လုပ်ထာသသည်။

၂.၁။ PostgreSQL

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"
  }
}

ကတပ်ဆင်မဟုပဌီသနောက် connector ၏လည်ပတ်မဟုနိယာမသည်အတော်လေသရိုသရဟင်သသည်-

  • ပထမအကဌိမ် စတင်သောအခါ၊ ၎င်သသည် ဖလဲ့စည်သမဟုပုံစံတလင် သတ်မဟတ်ထာသသည့် ဒေတာဘေ့စ်သို့ ချိတ်ဆက်ပဌီသ မုဒ်တလင် စတင်သည်။ ကနညသလျဟပ်တစ်ပဌက်အခဌေအနေအရ အသုံသပဌု၍ ရရဟိသော ကနညသဒေတာအစုကို Kafka သို့ ပေသပို့ခဌင်သ။ SELECT * FROM table_name.
  • စတင်ခဌင်သပဌီသပါက PostgreSQL WAL ဖိုင်မျာသမဟ အပဌောင်သအလဲမျာသကို ဖတ်ရန် ချိတ်ဆက်ကိရိယာသည် မုဒ်သို့သလာသပါသည်။

အသုံသပဌုထာသသော ရလေသချယ်စရာမျာသအကဌောင်သ-

  • name - အောက်တလင်ဖော်ပဌထာသသော configuration ကိုအသုံသပဌုထာသသည့် connector ၏အမည်၊ အနာဂတ်တလင်၊ ကအမည်ကို Kafka Connect REST API မဟတစ်ဆင့် အခဌေအနေကို ကဌည့်ရဟုခဌင်သ/ပဌန်လည်စတင်ခဌင်သ/အပ်ဒိတ်လုပ်ခဌင်သ) ချိတ်ဆက်ကိရိယာနဟင့် လုပ်ဆောင်ရန် ကအမည်ကို အသုံသပဌုပါသည်။
  • connector.class — configured connector မဟအသုံသပဌုမည့် DBMS connector class;
  • plugin.name — WAL ဖိုင်မျာသမဟ ဒေတာမျာသကို ယုတ္တိကုဒ်ရေသခဌင်သအတလက် ပလပ်အင်အမည်။ မဟ ရလေသချယ်ရရဟိနိုင်ပါသည်။ wal2json, decoderbuffs О pgoutput. ပထမနဟစ်ခုသည် DBMS တလင် သင့်လျော်သော extension မျာသကို တပ်ဆင်ရန် လိုအပ်သည်။ pgoutput PostgreSQL ဗာသရဟင်သ 10 နဟင့်အထက်အတလက် အပိုဆောင်သခဌယ်လဟယ်မဟုမျာသ မလိုအပ်ပါ။
  • database.* — ဒေတာဘေ့စ်သို့ ချိတ်ဆက်ရန်အတလက် ရလေသချယ်စရာမျာသ database.server.name — Kafka အစုအဝေသတလင် ခေါင်သစဉ်အမည်ကို ဖလဲ့စည်သရန် အသုံသပဌုသော PostgreSQL instance အမည်၊
  • table.include.list - ကျလန်ုပ်တို့သည် ပဌောင်သလဲမဟုမျာသကို ခဌေရာခံလိုသော ဇယာသမျာသစာရင်သ၊ ပုံစံဖဌင့်သတ်မဟတ်ထာသသည်။ schema.table_name; နဲ့ တလဲသုံသလို့မရပါဘူသ။ table.exclude.list;
  • heartbeat.interval.ms - ချိတ်ဆက်ကိရိယာသည် အထူသအကဌောင်သအရာတစ်ခုသို့ နဟလုံသခုန်သံမက်ဆေ့ချ်မျာသ ပေသပို့သည့် ကဌာသကာလ (မီလီစက္ကန့်အတလင်သ)၊
  • heartbeat.action.query — နဟလုံသခုန်သံမက်ဆေ့ခ်ျတစ်ခုစီကို ပေသပို့သည့်အခါတလင် လုပ်ဆောင်မည့် တောင်သဆိုချက် (ရလေသချယ်မဟု ဗာသရဟင်သ 1.1 တလင် ပါရဟိသည်);
  • slot.name - ချိတ်ဆက်ကိရိယာမဟအသုံသပဌုမည့် ပုံတူအပေါက်၏အမည်၊
  • publication.name - အမည် ပုံနဟိပ်ထုတ်ဝေခဌင်သ ချိတ်ဆက်သူအသုံသပဌုသည့် PostgreSQL တလင်။ မရဟိလျဟင် Debezium ဖန်တီသရန် ကဌိုသစာသပါမည်။ ချိတ်ဆက်မဟုပဌုလုပ်ထာသသည့် အသုံသပဌုသူသည် ကလုပ်ဆောင်ချက်အတလက် လုံလောက်သောအခလင့်အရေသမျာသ မရဟိပါက၊ ချိတ်ဆက်ကိရိယာသည် အမဟာသအယလင်သတစ်ခုဖဌင့် ရပ်စဲသလာသမည်ဖဌစ်သည်။
  • transforms ပစ်မဟတ်ခေါင်သစဉ်၏ အမည်ကို မည်သို့ပဌောင်သလဲရမည်ကို တိတိကျကျ ဆုံသဖဌတ်သည်-
    • transforms.AddPrefix.type ကျလန်ုပ်တို့သည် ပုံမဟန်အသုံသအနဟုန်သမျာသကို အသုံသပဌုမည်ကို ညလဟန်ပဌသည်၊
    • transforms.AddPrefix.regex - ပစ်မဟတ်ခေါင်သစဉ်၏အမည်ကို ပဌန်လည်သတ်မဟတ်ပေသသည့် မျက်နဟာဖုံသတစ်ခု။
    • transforms.AddPrefix.replacement - ကျလန်ုပ်တို့သည် တိုက်ရိုက်အဓိပ္ပါယ်ဖလင့်ဆိုချက်ဖဌစ်သည်။

နဟလုံသခုန်ခဌင်သနဟင့် ပဌောင်သလဲခဌင်သဆိုင်ရာ နောက်ထပ်အကဌောင်သအရာမျာသ

ပုံမဟန်အာသဖဌင့်၊ ချိတ်ဆက်ကိရိယာသည် ကတိပဌုထာသသော ငလေပေသငလေယူတစ်ခုစီအတလက် Kafka သို့ ဒေတာပေသပို့ပဌီသ ၎င်သ၏ LSN (Log Sequence Number) ကို ဝန်ဆောင်မဟုခေါင်သစဉ်တလင် မဟတ်တမ်သတင်ထာသသည်။ offset. သို့သော် ချိတ်ဆက်ကိရိယာသည် ဒေတာဘေ့စ်တစ်ခုလုံသကို မဖတ်နိုင်ဘဲ၊ ၎င်သ၏ဇယာသမျာသ၏ တစ်စိတ်တစ်ပိုင်သသာ (ဒေတာအပ်ဒိတ်မျာသ မကဌာခဏမဖဌစ်ပေါ်ပါက) မည်သို့ဖဌစ်မည်နည်သ။

  • ချိတ်ဆက်ကိရိယာသည် WAL ဖိုင်မျာသကို ဖတ်မည်ဖဌစ်ပဌီသ ၎င်သကို စောင့်ကဌည့်နေသည့် ဇယာသမျာသထံ လလဟဲပဌောင်သပေသသည့် မည်သည့်ငလေပေသချေမဟုကိုမျဟ မတလေ့ပါ။
  • ထို့ကဌောင့်၊ ၎င်သသည် ခေါင်သစဉ် သို့မဟုတ် ကူသယူခဌင်သအထိုင်တလင်ဖဌစ်စေ ၎င်သ၏လက်ရဟိအနေအထာသကို အပ်ဒိတ်လုပ်မည်မဟုတ်ပါ။
  • ၎င်သသည် ဒစ်ခ်ပေါ်တလင် သိမ်သဆည်သထာသသည့် WAL ဖိုင်မျာသကို ဖဌစ်ပေါ်စေပဌီသ disk နေရာလလတ်ကုန်သလာသဖလယ်ရဟိသည်။

ပဌီသတော့ ဒါက ရလေသချယ်စရာတလေ ကယ်တင်ရာရောက်တယ်။ heartbeat.interval.ms О heartbeat.action.query. ကရလေသချယ်စရာမျာသကို အတလဲလိုက်အသုံသပဌုခဌင်သဖဌင့် နဟလုံသခုန်သံမက်ဆေ့ဂျ်ပေသပို့တိုင်သ သီသခဌာသဇယာသတစ်ခုတလင် ဒေတာပဌောင်သလဲရန် တောင်သဆိုမဟုကို လုပ်ဆောင်နိုင်စေပါသည်။ ထို့ကဌောင့်၊ ချိတ်ဆက်ကိရိယာသည် လက်ရဟိတည်ရဟိနေသည့် LSN (ပုံတူပလာသမဟုအထိုင်တလင်) အဆက်မပဌတ်မလမ်သမံထာသသည်။ ၎င်သသည် DBMS အာသ မလိုအပ်တော့သော WAL ဖိုင်မျာသကို ဖယ်ရဟာသနိုင်စေပါသည်။ ရလေသချယ်စရာမျာသ မည်သို့အလုပ်လုပ်သည်ကို သင်ပိုမိုလေ့လာနိုင်ပါသည်။ စာရလက်စာတမ်သ.

အနီသကပ်အာရုံစိုက်သင့်သော နောက်ထပ်ရလေသချယ်စရာတစ်ခုဖဌစ်သည်။ transforms. အလဟအပနဲ့ အဆင်ပဌေပေမယ့်...

မူရင်သအာသဖဌင့်၊ Debezium သည် အောက်ပါအမည်ပေသခဌင်သမူဝါဒကို အသုံသပဌု၍ အကဌောင်သအရာမျာသကို ဖန်တီသသည်- serverName.schemaName.tableName. ဒါက အမဌဲတမ်သ အဆင်ပဌေမဟာ မဟုတ်ပါဘူသ။ ရလေသချယ်မဟုမျာသ transforms တိကျသောအမည်တစ်ခုနဟင့် ခေါင်သစဉ်တစ်ခုသို့ လမ်သကဌောင်သပဌောင်သရန်လိုအပ်သည့် ဇယာသမျာသစာရင်သကို သတ်မဟတ်ရန် ပုံမဟန်အသုံသအနဟုန်သမျာသကို သင်အသုံသပဌုနိုင်သည်။

ကျလန်ုပ်တို့၏ဖလဲ့စည်သပုံတလင်ကျေသဇူသတင်ပါသည်။ transforms အောက်ပါတို့ ဖဌစ်ပေါ်သည်- စောင့်ကဌည့်ထာသသော ဒေတာဘေ့စ်မဟ CDC ဖဌစ်ရပ်မျာသအာသလုံသသည် အမည်နဟင့် ခေါင်သစဉ်တစ်ခုသို့ ရောက်သလာသမည်ဖဌစ်သည်။ data.cdc.dbname. မဟုတ်ပါက (ကဆက်တင်မျာသမပါဘဲ) Debezium သည် ဇယာသတစ်ခုစီအတလက် ခေါင်သစဉ်တစ်ခုစီကို ပုံသေအာသဖဌင့် ဖန်တီသသည်- pg-dev.public.<table_name>.

ချိတ်ဆက်ကိရိယာ ကန့်သတ်ချက်မျာသ

PostgreSQL အတလက် connector configuration ၏ဖော်ပဌချက်ကိုနိဂုံသချုပ်ရန်၊ ၎င်သ၏လုပ်ဆောင်မဟု၏အောက်ပါအင်္ဂါရပ်မျာသ/ကန့်သတ်ချက်မျာသအကဌောင်သပဌောသင့်သည်-

  1. PostgreSQL အတလက် ချိတ်ဆက်ကိရိယာ၏ လုပ်ဆောင်နိုင်စလမ်သသည် ယုတ္တိကုဒ်ဆလဲခဌင်သ၏ သဘောတရာသပေါ်တလင် မူတည်သည်။ ထို့ကဌောင့် သူ ဒေတာဘေ့စ်ဖလဲ့စည်သပုံကို ပဌောင်သလဲရန် တောင်သဆိုချက်မျာသကို ခဌေရာခံမထာသပါ။ (DDL) - ထို့ကဌောင့် ကအချက်အလက်သည် အကဌောင်သအရာမျာသတလင် ရဟိမည်မဟုတ်ပါ။
  2. ပုံတူအပေါက်မျာသကို အသုံသပဌုထာသသောကဌောင့် ချိတ်ဆက်ကိရိယာကို ချိတ်ဆက်နိုင်သည်။ သာ ညသဆောင် DBMS စံနမူနာသို့
  3. ဒေတာဘေ့စ်သို့ချိတ်ဆက်ကိရိယာမဟချိတ်ဆက်သည့်အသုံသပဌုသူတလင်ဖတ်ရန်သာအခလင့်အရေသမျာသရဟိပါက၊ ပထမမစတင်မီတလင်သင်ကိုယ်တိုင်ဖန်တီသပဌီသဒေတာဘေ့စ်သို့လလဟင့်တင်ရန်လိုပါမည်။

ဖလဲ့စည်သမဟုပုံစံကို အသုံသပဌုခဌင်သ။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့၏ configuration ကို connector တလင် တင်ကဌပါစို့။

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

ဒေါင်သလုဒ် အောင်မဌင်ပဌီသ ချိတ်ဆက်ကိရိယာ စတင်ကဌောင်သ ကျလန်ုပ်တို့ စစ်ဆေသပါသည်။

$ 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"}

ကောင်သသည်- ၎င်သကို စနစ်ထည့်သလင်သပဌီသ အသုံသပဌုနိုင်ပါပဌီ။ ယခု ကျလန်ုပ်တို့သည် စာသသုံသသူတစ်ညသအဖဌစ် ဟန်ဆောင်ပဌီသ Kafka သို့ ချိတ်ဆက်လိုက်ကဌပါစို့၊ ထို့နောက် ကျလန်ုပ်တို့သည် ဇယာသတလင် ထည့်သလင်သမဟုကို ပေါင်သထည့်ကာ ပဌောင်သလဲပါမည်။

$ 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

ကျလန်ုပ်တို့၏ ခေါင်သစဉ်တလင် အောက်ပါအတိုင်သ ဖော်ပဌပါမည်။

ကျလန်ုပ်တို့၏ပဌောင်သလဲမဟုမျာသဖဌင့် အလလန်ရဟည်လျာသသော JSON

{
"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
}
}

ဖဌစ်ရပ်နဟစ်ခုစလုံသတလင်၊ မဟတ်တမ်သမျာသတလင် ပဌောင်သလဲခဲ့သော မဟတ်တမ်သ၏သော့ (PK) နဟင့် ပဌောင်သလဲမဟုမျာသ၏ အနဟစ်သာရ- မဟတ်တမ်သသည် မည်သည့်အရာနဟင့် နောက်ပိုင်သတလင် ဖဌစ်လာခဲ့သည်၊

  • ၏ဖဌစ်ရပ်အတလက် INSERT: တန်ဖိုသ (before) ညီမျဟသည်။ nullနဟင့် ပဌီသနောက် - ထည့်သလင်သထာသသော မျဉ်သ။
  • ၏ဖဌစ်ရပ်အတလက် UPDATE: မဟာ payload.before မျဉ်သ၏ယခင်အခဌေအနေကိုပဌသထာသပဌီသ၊ payload.after - အပဌောင်သအလဲ၏အနဟစ်သာရနဟင့်အတူအသစ်။

2.2 MongoDB

ကချိတ်ဆက်ကိရိယာသည် ပင်မ DBMS node ၏ oplog မဟ အချက်အလက်မျာသကို ဖတ်ရဟုခဌင်သ စံ MongoDB အတုယူမဟု ယန္တရာသကို အသုံသပဌုသည်။

PgSQL အတလက် ဖော်ပဌပဌီသသာသ ချိတ်ဆက်ကိရိယာနဟင့် ဆင်တူသည်၊ ကနေရာတလင်လည်သ၊ ပထမအစတလင်၊ မူလဒေတာလျဟပ်တစ်ပဌက်ရိုက်ယူပဌီသနောက် ချိတ်ဆက်ကိရိယာသည် oplog စာဖတ်ခဌင်သမုဒ်သို့ ပဌောင်သသလာသသည်။

ဖလဲ့စည်သမဟုဥပမာ-

{
"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"
}
}

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ ကနေရာတလင် ယခင်နမူနာနဟင့် နဟိုင်သယဟဉ်ပါက ရလေသချယ်စရာအသစ်မျာသ မရဟိတော့သော်လည်သ ဒေတာဘေ့စ်သို့ ချိတ်ဆက်ရန်နဟင့် ၎င်သတို့၏ရဟေ့ဆက်တလဲမျာသအတလက် တာဝန်ရဟိသည့် ရလေသချယ်စရာအရေအတလက်ကိုသာ လျဟော့ချထာသသည်။

setting မျာသကို transforms ကတစ်ကဌိမ်တလင် ၎င်သတို့သည် အောက်ပါအတိုင်သလုပ်ဆောင်သည်- ၎င်သတို့သည် ပစ်မဟတ်ခေါင်သစဉ်၏ အမည်ကို schema မဟ ပဌောင်သလဲပါသည်။ <server_name>.<db_name>.<collection_name> в data.cdc.mongo_<db_name>.

အမဟာသခံနိုင်ရည်

ကျလန်ုပ်တို့ခေတ်တလင် အမဟာသခံနိုင်ရည်ရဟိမဟုနဟင့် မဌင့်မာသသောရရဟိနိုင်မဟုပဌဿနာသည် ယခင်ကထက် ပိုမိုပဌင်သထန်သည် - အထူသသဖဌင့် ကျလန်ုပ်တို့သည် ဒေတာနဟင့် ငလေပေသငလေယူမျာသအကဌောင်သပဌောနေချိန်တလင်၊ ဒေတာပဌောင်သလဲမဟုမျာသကို ခဌေရာခံခဌင်သ ကပဌဿနာတလင် ဘေသဖယ်ထာသခဌင်သမရဟိပါ။ နိယာမအရ ဘယ်အရာက မဟာသသလာသနိုင်သလဲ၊ ကိစ္စတစ်ခုစီမဟာ Debezium မဟာ ဘာတလေဖဌစ်မလဲဆိုတာကို ကဌည့်ကဌရအောင်။

ဖယ်ထုတ်ရန် ရလေသချယ်စရာ သုံသခုရဟိသည်။

  1. Kafka Connect မအောင်မဌင်ပါ။. Connect ကို ဖဌန့်ဝေမုဒ်တလင် အလုပ်လုပ်ရန် စီစဉ်သတ်မဟတ်ထာသပါက၊ ၎င်သသည် တူညီသော group.id ကို သတ်မဟတ်ရန် အလုပ်သမာသမျာသစလာ လိုအပ်သည်။ ထို့နောက် ၎င်သတို့အနက်မဟတစ်ခု ပျက်ကလက်ပါက၊ ချိတ်ဆက်ကိရိယာကို အခဌာသအလုပ်သမာသတစ်ညသတလင် ပဌန်လည်စတင်မည်ဖဌစ်ပဌီသ Kafka ရဟိ ခေါင်သစဉ်ပါ နောက်ဆုံသသတ်မဟတ်ထာသသည့်အနေအထာသမဟ ဆက်လက်ဖတ်ရဟုမည်ဖဌစ်သည်။
  2. Kafka အစုအဖလဲ့နဟင့် ချိတ်ဆက်မဟု ဆုံသရဟုံသခဌင်သ။. ချိတ်ဆက်ကိရိယာသည် Kafka သို့ပေသပို့ရန် ပျက်ကလက်သည့် အနေအထာသတလင် စာဖတ်ခဌင်သကို ရပ်တန့်မည်ဖဌစ်ပဌီသ ကဌိုသပမ်သမဟု မအောင်မဌင်မချင်သ ၎င်သကို အခါအာသလျော်စလာ ပဌန်လည်ပေသပို့ရန် ကဌိုသစာသမည်ဖဌစ်သည်။
  3. ဒေတာအရင်သအမဌစ် မရရဟိနိုင်ပါ။. ချိတ်ဆက်ကိရိယာသည် ပဌင်ဆင်သတ်မဟတ်ထာသသည့်အတိုင်သ အရင်သအမဌစ်သို့ ပဌန်လည်ချိတ်ဆက်ရန် ကဌိုသပမ်သမည်ဖဌစ်သည်။ ပုံသေသည် 16 ကဌိမ်အသုံသပဌုထာသသည်။ exponential backoff. ၁၆ ကဌိမ်မဌောက် ကဌိုသပမ်သမဟု မအောင်မဌင်ပဌီသနောက်၊ အလုပ်အဖဌစ် အမဟတ်အသာသပဌုပါမည်။ ပျက်ကလက် Kafka Connect REST အင်တာဖေ့စ်မဟတစ်ဆင့် ၎င်သကို သင်ကိုယ်တိုင် ပဌန်လည်စတင်ရန် လိုအပ်မည်ဖဌစ်သည်။
    • ၏ဖဌစ်ရပ်အတလက် PostgreSQL ဒေတာတလေ ဆုံသရဟုံသမဟာ မဟုတ်ဘူသ။ ပုံတူအပေါက်မျာသကို အသုံသပဌုခဌင်သဖဌင့် ချိတ်ဆက်ကိရိယာမဟ မဖတ်ရသေသသော WAL ဖိုင်မျာသကို ဖျက်ခဌင်သမဟ တာသဆီသပါမည်။ ကကိစ္စတလင်၊ အကဌလေစေ့အတလက် အာသနည်သချက်တစ်ခုလည်သ ရဟိသည်- connector နဟင့် DBMS အကဌာသ ကလန်ရက်ချိတ်ဆက်မဟုသည် အချိန်အတော်ကဌာ ပဌတ်တောက်သလာသပါက၊ disk space ကုန်ဆုံသသလာသမည့် ဖဌစ်နိုင်ချေရဟိပဌီသ ၎င်သသည် ချို့ယလင်သချက်ဆီသို့ ညသတည်သလာသနိုင်သည်။ DBMS တစ်ခုလုံသ။
    • ၏ဖဌစ်ရပ်အတလက် က MySQL ချိတ်ဆက်မဟုကို ပဌန်လည်မရယူမီ binlog ဖိုင်မျာသကို DBMS ကိုယ်တိုင်က လဟည့်နိုင်သည်။ ၎င်သသည် ချိတ်ဆက်ကိရိယာအာသ မအောင်မဌင်သည့်အခဌေအနေသို့ ရောက်သလာသစေပဌီသ ပုံမဟန်လည်ပတ်မဟုကို ပဌန်လည်ရယူရန်အတလက် binlog မျာသမဟ ဆက်လက်ဖတ်ရဟုရန် ကနညသလျဟပ်တစ်ပဌက်မုဒ်တလင် ပဌန်လည်စတင်ရန် လိုအပ်မည်ဖဌစ်သည်။
    • အပေါ် MongoDB. မဟတ်တမ်သတလင်ဖော်ပဌထာသသည်- လော့ဂ်/oplog ဖိုင်မျာသကို ဖျက်လိုက်ခဌင်သဖဌစ်ပဌီသ ချိတ်ဆက်ကိရိယာသည် DBMS မျာသအာသလုံသအတလက် အတူတူပင်ဖဌစ်ကဌောင်သ စာရလက်စာတမ်သတလင်ဖော်ပဌထာသသည် ဆိုလိုသည်မဟာ ချိတ်ဆက်ကိရိယာသည် အခဌေအနေသို့ ရောက်သလာသမည်ဖဌစ်သည်။ ပျက်ကလက် မုဒ်တလင် ပဌန်လည်စတင်ရန် လိုအပ်မည်ဖဌစ်သည်။ ကနညသလျဟပ်တစ်ပဌက်.

      သို့သော် ခဌလင်သချက် ရဟိပါသည်။ ချိတ်ဆက်ကိရိယာအာသ အချိန်အတော်ကဌာ ချိတ်ဆက်မဟု ပဌတ်တောက်သလာသပါက (သို့မဟုတ် MongoDB စံနမူနာသို့ မရောက်ရဟိနိုင်ပါ)၊ ကအချိန်အတလင်သ oplog သည် လဟည့်ပတ်သလာသသည်၊ ထို့နောက် ချိတ်ဆက်မဟုကို ပဌန်လည်ရယူသောအခါ၊ ချိတ်ဆက်ကိရိယာသည် ပထမရနိုင်သော အနေအထာသမဟ ဒေတာကို တည်ငဌိမ်စလာ ဆက်လက်ဖတ်ရဟုနိုင်မည်ဖဌစ်သည်။ ထို့ကဌောင့် Kafka ရဟိ ဒေတာအချို့ မဟုတ် ရိုက်လိမ့်မယ်။

ကောက်ချက်

Debezium သည် CDC စနစ်မျာသနဟင့် ပတ်သက်၍ ကျလန်ုပ်၏ ပထမဆုံသ အတလေ့အကဌုံဖဌစ်ပဌီသ အလုံသစုံ အလလန်ကောင်သမလန်ပါသည်။ ပရောဂျက်သည် အဓိက DBMS မျာသအတလက် ပံ့ပိုသမဟု၊ ဖလဲ့စည်သမဟုလလယ်ကူမဟု၊ အစုလိုက်အပဌုံလိုက် ပံ့ပိုသမဟုနဟင့် တက်ကဌလသောအသိုက်အဝန်သအတလက် ပံ့ပိုသမဟုဖဌင့် အောင်မဌင်ခဲ့သည်။ လက်တလေ့စိတ်ဝင်စာသတဲ့သူတလေအတလက် လမ်သညလဟန်ချက်တလေကို ဖတ်ကဌည့်ဖို့ အကဌံပဌုချင်ပါတယ်။ Kafka ချိတ်ဆက်မဟု О ဒေဗဇီယမ်.

Kafka Connect အတလက် JDBC ချိတ်ဆက်ကိရိယာနဟင့် နဟိုင်သယဟဉ်ပါက၊ Debezium ၏ အဓိကအာသသာချက်မဟာ ဒေတာကို latency အနည်သဆုံသဖဌင့် လက်ခံရရဟိစေနိုင်သည့် DBMS မဟတ်တမ်သမျာသမဟ အပဌောင်သအလဲမျာသကို ဖတ်နိုင်ခဌင်သဖဌစ်သည်။ JDBC Connector (Kafka Connect မဟ) သည် သတ်မဟတ်ထာသသော အချိန်ကာလတစ်ခုတလင် စောင့်ကဌည့်ထာသသော ဇယာသကို မေသမဌန်သပဌီသ (တူညီသောအကဌောင်သပဌချက်ကဌောင့်) ဒေတာကို ဖျက်လိုက်သောအခါတလင် မက်ဆေ့ချ်မျာသ မထုတ်ပေသပါ (မတည်ရဟိသောဒေတာကို သင်မည်ကဲ့သို့ မေသမဌန်သနိုင်မည်နည်သ။)

အလာသတူပဌဿနာမျာသကိုဖဌေရဟင်သရန်၊ သင်သည်အောက်ပါဖဌေရဟင်သနည်သမျာသ (Debezium အပဌင်) ကိုအာရုံစိုက်နိုင်သည်။

  • JDBC Connector Kafka Connect;
  • MySQL အတလက်သာ ဖဌေရဟင်သချက်မျာသစလာ-
  • Oracle GoldenGateဒါပေမယ့် ဒါက လုံသဝကလဲပဌာသတဲ့ "အလေသချိန်အမျိုသအစာသ" ဖဌစ်ပါတယ်။

PS

ကျလန်ုပ်တို့၏ဘလော့ဂ်တလင်လည်သဖတ်ပါ

source: www.habr.com

မဟတ်ချက် Add