ການນໍາໃຊ້ SeaTunnel CDC (Change Data Capture) ໃນສະພາບແວດລ້ອມການຜະລິດໃນໄລຍະເວລາທີ່ຜ່ານມາເພື່ອເຂົ້າລະຫັດ scenarios ເຊັ່ນ Oracle, MySQL, ແລະ SQL Server, ແລະການເຊື່ອມຕໍ່ກັບການຕອບສະຫນອງຈາກຂະຫນາດໃຫຍ່ຂອງຜູ້ໃຊ້, ຂ້າພະເຈົ້າໄດ້ຂຽນບົດຄວາມນີ້ເພື່ອຊ່ວຍໃຫ້ທ່ານຮູ້ວິທີການທີ່ SeaTunnel ການນໍາໃຊ້ CDC. ການອຸປະກອນຕົ້ນຕໍກວມເອົາສາມລະດັບຂອງ CDC: Snapshot, Backfill, ແລະ Incremental. ການຝຶກອົບຮົມ Three Stages of CDC ລະບົບການຄົ້ນຄວ້າຂໍ້ມູນຂອງ CDC ໃນທົ່ວໄປສາມາດຖືກກວດສອບໃນສາມພາກສ່ວນຕົ້ນຕໍ: ຮູບພາບ ສໍາ ລັບ Snapshot (Full Load) ລະຫັດ QR ການເພີ່ມເຕີມ ປະເພດ Snapshot ຄວາມຮູ້ຂອງສະຖານທີ່ Snapshot ແມ່ນຢ່າງງ່າຍດາຍ: ດາວໂຫລດ snapshot ຂອງຂໍ້ມູນຂອງຄອມພິວເຕີທີ່ໃຊ້ເວລາແລະດໍາເນີນການ scan ການຄອມພິວເຕີທັງຫມົດໂດຍຜ່ານ JDBC. ການນໍາໃຊ້ MySQL ເປັນຕົວຢ່າງ, ສະຖານທີ່ binlog ໃນປັດຈຸບັນແມ່ນຖືກຊອກຫາໃນໄລຍະ snapshot: SHOW MASTER STATUS; File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set binlog.000011 1001373553 ລະຫັດ QR 1001373553 SeaTunnel ດາວນ໌ໂຫລດ File ແລະ Location ເປັນ . low watermark ຊື່ຫຍໍ້ຂອງ : This is not only executed once, because SeaTunnel has implemented its own split cutting logic to accelerate snapshots. ຊື່ຫຍໍ້ຂອງ : This is not only executed once, because SeaTunnel has implemented its own split cutting logic to accelerate snapshots. ລະບົບ MySQL Snapshot (Split) ສະ ຫນັບ ສະ ຫນັບ ສະ ຫນັບ ສະ ຫນັບ ສະ ຫນູນ ສະ ຫນັບ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ SeaTunnel ຈະທົດສອບລັກສະນະທັງ ຫມົດ ແລະຂະຫນາດຂອງ key primary / key unique ຂອງເຂົາເຈົ້າແລະເລືອກຊັ້ນຕັດທີ່ເຫມາະສົມ. ມັນຖືກແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແຜ່ນແ ຕາຕະລາງຂະຫນາດໃຫຍ່ສາມາດໄດ້ຮັບການຕັດອອກໃນຫຼາຍກ່ວາ 100 Splits, ທີ່ຖືກຈັດຂຶ້ນໃນ 10 ຄາສິໂນ parallel ໂດຍ enumerator ໂດຍທົ່ວໄປໂດຍຜ່ານການຄຸ້ມຄອງຄໍາຮ້ອງສະຫມັກ subtask (ທັນສະໄຫມກັບການປະໂຫຍດທີ່ເຫມາະສົມທັງຫມົດ). Table-level sequential processing (schematic): // Processing sequence: // 1. Table1 -> Generate [Table1-Split0, Table1-Split1, Table1-Split2] // 2. Table2 -> Generate [Table2-Split0, Table2-Split1] // 3. Table3 -> Generate [Table3-Split0, Table3-Split1, Table3-Split2, Table3-Split3] Split-level parallel allocation: // Allocation to different subtasks: // Subtask 0: [Table1-Split0, Table2-Split1, Table3-Split2] // Subtask 1: [Table1-Split1, Table3-Split0, Table3-Split3] // Subtask 2: [Table1-Split2, Table2-Split0, Table3-Split1] ຊື່ຫຍໍ້ຂອງ : Every Split is actually a query with a range condition. SELECT * FROM user_orders WHERE order_id >= 1 AND order_id < 10001; ປະເພດຂອງການບັນຊີລາຍລະອຽດສູງ / watermark ອື່ນໆ. Crucial: ດາວໂຫລດ The ຂະຫນາດນ້ອຍ; ມີຫຼາຍກ່ວາ Splits ແມ່ນບໍ່ຈໍາເປັນຢ່າງວ່ອງໄວ, ແລະ scheduling ແລະ memory overhead ຈະມີຂະຫນາດໃຫຍ່. Practical Advice: split_size ຫນ້າທໍາອິດ / Backfill Stage ຖ້າຫາກວ່າທ່ານກໍາລັງຊອກຫາ snapshot ທັງຫມົດຂອງທ້ອງຖ່າຍຮູບທີ່ຖືກຂຽນຢ່າງກວ້າງຂວາງໃນ. ຖ້າຫາກວ່າທ່ານກໍາລັງຊອກຫາຊຸດ 100 ນີ້, ຂໍ້ມູນໃນຊຸດ 1 ສາມາດໄດ້ຮັບການປ່ຽນແປງ. ຖ້າຫາກວ່າທ່ານກໍາລັງຊອກຫາ snapshot ທັງຫມົດ, ຂໍ້ມູນທີ່ທ່ານກໍາລັງຊອກຫາໃນເວລາທີ່ທ່ານຕັດສິນໃຈກັບການອ່ານແມ່ນບໍ່ມີຜົນປະໂຫຍດ (ສ່ວນຫນຶ່ງແມ່ນອາຍຸ,ສ່ວນຫນຶ່ງແມ່ນໃຫມ່). Why is Backfill needed? The role of Backfill is to compensate for the "data changes that occurred during the snapshot" so that the data is eventually consistent. ການຄຸ້ມຄອງຂອງສະຖານທີ່ນີ້ຕົ້ນຕໍ depende ຈາກການຄຸ້ມຄອງຂອງ ອັດຕະໂນມັດ exactly_once ຊື່ຫຍໍ້ຂອງ : English ( ) exactly_once = false ນີ້ແມ່ນສະພາບແວດລ້ອມ default; logic ແມ່ນຢ່າງງ່າຍດາຍຢ່າງງ່າຍດາຍແລະ direct, ແລະມັນບໍ່ຈໍາເປັນຕ້ອງ caching memory: Direct Snapshot Emission: ດາວນ໌ໂຫລດຂໍ້ມູນ snapshot ແລະຂຽນມັນໂດຍບໍ່ມີການເຂົ້າລະຫັດ cache. Direct Log Emission: ດາວນ໌ໂຫລດ Binlog ໃນເວລາທີ່ດຽວກັນແລະສົ່ງມັນໂດຍຜ່ານການຫຼຸດລົງ. ປະສິດທິພາບທີ່ຜ່ານມາ: ເຖິງແມ່ນວ່າຈະມີ duplicates ໃນລະຫວ່າງ (ຫຼັງຈາກນັ້ນ A ທີ່ຜ່ານມາ, ຫຼັງຈາກນັ້ນ B ທີ່ຜ່ານມາ), ໃນຂະນະທີ່ downstream supports idempotent writes (ເຊັ່ນ MySQL's REPLACE INTO), ຜົນປະໂຫຍດທີ່ຜ່ານມາແມ່ນປົກກະຕິ. ລະຫັດ QR ) exactly_once = true ນີ້ແມ່ນພາກສ່ວນທີ່ຍິ່ງໃຫຍ່ທີ່ສຸດຂອງ SeaTunnel CDC, ແລະມັນເປັນປະໂຫຍດສໍາລັບການຮັບປະກັນວ່າຂໍ້ມູນແມ່ນ "ບໍ່ເສຍຄ່າ, ບໍ່ດາວໂຫລດ." ສໍາລັບການ deduplication memory buffer (Buffer) ການຄາດຄະເນດິນດີຕ້ອນຮັບຂອງພວກເຮົາແມ່ນການຄາດຄະເນດິນດີຕ້ອນຮັບຂອງພວກເຮົາແມ່ນການຄາດຄະເນດິນດີຕ້ອນຮັບຂອງພວກເຮົາແມ່ນການຄາດຄະເນດິນດີຕ້ອນຮັບ. Simple Explanation: SeaTunnel ເຮັດວຽກນີ້: ຮູບພາບ ສໍາ ລັບ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ Watch the Surveillance (Backfill): ດາວນ໌ໂຫລດວິດີໂອການຄວບຄຸມ (Binlog log) ສໍາລັບເວລາທີ່ທ່ານໄດ້ກວດສອບ. ດາວນ໌ໂຫລດ The Records (Merge): If the surveillance shows someone just came in, but you didn’t count them -> add them. If the surveillance shows someone just run out, but you counted them in -> cross them out. If the surveillance shows somebody changed their clothes -> ການປ່ຽນແປງບັນຊີລາຍລະອຽດກັບອຸປະກອນໃຫມ່. ສະ ຫນັບ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ສະ ຫນູນ ປະເພດ Summary for Beginners: exactly_once = true "hold it in and don't send it until it's clearly verified." ປະສິດທິພາບ: ຂໍ້ມູນທີ່ໄດ້ຮັບການຂົນສົ່ງດຽວກັນແມ່ນສະດວກສະບາຍ, ບໍ່ມີ duplicates ຫຼື disorder. ຄ່າໃຊ້ຈ່າຍ: ເນື່ອງຈາກວ່າມັນຈໍາເປັນຕ້ອງໄດ້ຮັບການ "ລວມ" ໃນ, ມັນຈໍາເປັນຕ້ອງນໍາໃຊ້ຄວາມມາດຕະຖານທີ່ແຕກຕ່າງກັນເພື່ອເກັບຮັກສາຂໍ້ມູນ. ຖ້າຫາກວ່າທັນສະໄຫມແມ່ນຂະຫນາດໃຫຍ່, ຄວາມມາດຕະຖານອາດຈະບໍ່ພຽງພໍ. 2.3 ຄໍາຖາມທີ່ສໍາຄັນແລະຄໍາສັ່ງ ຊື່ຫຍໍ້ຂອງ : Why are there no READ events during the Backfill stage? Q1: Why is case READ: throw Exception ການບັນທຶກ READ ໄດ້ຖືກຄັດເລືອກໂດຍ SeaTunnel ໂດຍຕົນເອງ, ໂດຍສະເພາະເພື່ອສະຫນັບສະຫນູນ "ຂໍ້ມູນອຸປະກອນທີ່ອ່ານຈາກ snapshot." ຂັ້ນຕອນ Backfill ດາວນ໌ໂຫລດ Binlog ຂອງອີເມວ. Binlog ພຽງແຕ່ຊອກຫາ "additions, deletions, and modifications" (INSERT/UPDATE/DELETE) ແລະບໍ່ໄດ້ຊອກຫາ "ເປັນຜູ້ທີ່ຊອກຫາຂໍ້ມູນ". ດັ່ງນັ້ນ, ຖ້າຫາກວ່າທ່ານໄດ້ອ່ານບັນຫາ READ ໃນໄລຍະລະດັບ Backfill, ມັນເປັນສິ່ງທີ່ຄ້າຍຄືກັນກັບລັກສະນະລະຫັດ. Q2: If it's placed in memory, can the memory hold it? Will it OOM? ມັນບໍ່ແມ່ນການຕິດຕັ້ງທໍ່ທັງຫມົດໃນຄວາມຮູ້: SeaTunnel ການປິ່ນປົວໂດຍ splits. splits ແມ່ນຂະຫນາດນ້ອຍ: splits ຄຸນນະສົມບັດມີພຽງແຕ່ 8096 rades ຂອງຂໍ້ມູນ. ດາວໂຫລດຫຼັງຈາກການນໍາໃຊ້: ຫຼັງຈາກການປິ່ນປົວ split, ກະລຸນາໃຫ້ມັນ, ດາວໂຫລດຄວາມຮູ້ສຶກ, ແລະການປິ່ນປົວທີ່ຜ່ານມາ. ຮູບພາບ ສໍາ ລັບ Parallelism × Split Size × Single row data size ຊື່ຫຍໍ້ຂອງ : Watermark Alignment Between Multiple Splits ນີ້ແມ່ນບັນຫາທີ່ບໍ່ຈໍາເປັນຢ່າງງ່າຍດາຍ. ຖ້າຫາກວ່າບໍ່ໄດ້ປິ່ນປົວຢ່າງງ່າຍດາຍ, it will lead to data being either lost or repeated. ຄວາມປອດໄພ / ຄວາມປອດໄພ Runner Problem: ສະແດງໃຫ້ເຫັນວ່າສອງນັກສຶກສາ (Split A ແລະ Split B) ແມ່ນຄອມພິວເຕີມື້ (ຂໍ້ມູນ Backfill). Plain Language Explanation: Student A (fast): Copied to page 100 ແລະໄດ້ຮັບການປິ່ນປົວໃນ 10:00. Student B ( slow): Copied to page 200 and just finished at 10:05. ໃນປັດຈຸບັນ, ການຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມຝຶກອົບຮົມ ຖ້າ ຫາກ ວ່າ ທ່ານ ສາ ມາດ ຊອກ ຫາ ຄູ່ ຮ່ວມ ງານ ຂອງ ຊີ ວິດ, ທ່ານ ສາ ມາດ ຊອກ ຫາ ຄູ່ ຮ່ວມ ງານ ຂອງ ຊີ ວິດ, ທີ່ ນີ້ ທ່ານ ສາ ມາດ ຊອກ ຫາ ຄູ່ ຮ່ວມ ງານ ຂອງ ຊີ ວິດ, ທີ່ ນີ້ ທ່ານ ຈະ ສາ ມາດ ຊອກ ຫາ ຄູ່ ຮ່ວມ ງານ ຂອງ ຊີ ວິດ. ຫຼັງຈາກ ຫນ້າ 100: Student A ມີການເຊື່ອມຕໍ່, ແຕ່ Student B ຈະຄາດຄະເນ: "Master, I already copied the content from page 100 to 200!" ການປິ່ນປົວຂອງ SeaTunnel: ເລີ່ມຕົ້ນຈາກເລີ່ມຕົ້ນແລະກວດສອບສິ່ງທີ່ທ່ານໄດ້ຊອກຫາ: SeaTunnel adopts a ລະຫັດ QR "Minimum Watermark Starting Point + Dynamic Filtering" ການຄາດຄະເນດິນ (ການປິ່ນປົວສໍາລັບການ slow): ການຝຶກອົບຮົມຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ຄາດຄະເນດິນທີ່ແຕກຕ່າງກັນ ການກັ່ນຕອງສະພາບແວດລ້ອມ (ບໍ່ຮູ້ສຶກວ່າສິ່ງທີ່ໄດ້ຮັບການຊອກຫາ): ໃນຂະນະທີ່ຜູ້ຊ່ຽວຊານແມ່ນການຝຶກອົບຮົມ (ອ່ານ Binlog), ພວກເຮົາມີລາຍລະອຽດ: { A: 100, B: 200 }. ຫຼັງຈາກນັ້ນ, ຜູ້ຊ່ຽວຊານຈະເຂົ້າເຖິງ Page 150: ຂ້າພະເຈົ້າສືບຕໍ່ໄດ້ຮັບການປະທັບໃຈ ສໍາ ລັບ A? 150 > 100, A ບໍ່ໄດ້ຊອກຫາມັນ, ດາວນ໌ໂຫລດມັນ (ສົ່ງ). ຂ້າພະເຈົ້າສືບຕໍ່ໄດ້ຮັບການປະທັບໃຈກໍໂດຍ B? 150 < 200, B already copied it, skip it directly (discard). ສະພາບອາກາດຄວາມໄວສູງ (ທຸກຄົນໄດ້ຕັດສິນໃຈ): ໃນຂະນະທີ່ຜູ້ຊ່ຽວຊານເຂົ້າໄປໃນເວັບໄຊ 201 ແລະຊອກຫາວ່າທຸກຄົນໄດ້ຊອກຫາມັນ, ພວກເຂົາເຈົ້າບໍ່ຈໍາເປັນຕ້ອງກວດສອບ. ປະເພດ ປະເພດ : ປະເພດເພີ່ມເຕີມການກັ່ນຕອງຢ່າງກວ້າງຂວາງໂດຍລວມທັງ "ການເລີ່ມຕົ້ນ offset + ປະເພດ split + watermark ສູງ." Summary in one sentence: exactly_once ບໍ່ມີ : ສະຖານທີ່ incremental ຈະເປັນ "ການນໍາໃຊ້ sequential ຈາກ offset ການເລີ່ມຕົ້ນທີ່ຈໍາເປັນ". exactly_once ປະເພດ: Incremental Stage ຫຼັງຈາກການກັ່ນຕອງ (for ) ຫຼືສະຖານທີ່ Snapshot ends, ມັນເຂົ້າໄປໃນສະຖານທີ່ incremental purely: exactly_once = true ຊື່ຫຍໍ້ຂອງ : Based on binlog ຊື່ຫຍໍ້ຂອງ : Based on redo / logminer SQL Server: ທີ່ຖືກສ້າງຕັ້ງຂຶ້ນໂດຍ Log / LSN. ລະຫັດ QR ການຄຸ້ມຄອງຂອງ SeaTunnel ໃນລະດັບ incremental ແມ່ນປະມານຫຼາຍກັບ native Debezium: ການນໍາໃຊ້ logs ໃນອົງປະກອບ offset. ການກໍ່ສ້າງບັນຫາເຊັ່ນ INSERT / UPDATE / DELETE ສໍາລັບທຸກການປ່ຽນແປງ. ໃນເວລາທີ່ exact_once = true, ສະຖານທີ່ offset ແລະ split ໄດ້ຖືກນໍາໃຊ້ໃນການຄວບຄຸມເພື່ອໄດ້ຮັບການ "precisely-once" semantics ຫຼັງຈາກການປິ່ນປົວຄວາມຜິດພາດ. ລະຫັດ QR ການອອກແບບພື້ນຖານຂອງ SeaTunnel CDC ແມ່ນເພື່ອຊອກຫາການປະຫຍັດທີ່ດີທີ່ສຸດ ແລະ "Fast" (parallel snapshots) "Stable" (data consistency). ການທົບທວນຄືນທີ່ສໍາຄັນຂອງໂຄງການທັງຫມົດ: Slicing (Split) ແມ່ນພື້ນຖານຂອງການດໍາເນີນການ parallel: ການຕັດທ້ອງຖ່າຍຮູບຂະຫນາດໃຫຍ່ໃນຕັດຂະຫນາດນ້ອຍເພື່ອໃຫ້ການເຮັດວຽກ multi-threads ໃນຂະນະທີ່ຫນຶ່ງ. Snapshot ເປັນຜູ້ຊ່ຽວຊານໃນການຕັດສິນໃຈໃນການຕັດສິນໃຈ: ການນໍາໃຊ້ slices ເພື່ອອ່ານຂໍ້ມູນປະຫວັດສາດໃນ parallel. Backfill ເປັນຜູ້ຊ່ຽວຊານໃນການປິ່ນປົວຄວາມຮ້ອນ: ນີ້ແມ່ນເລີ່ມຕົ້ນທີ່ສໍາຄັນທີ່ສຸດ. ມັນຕັດສິນໃຈສໍາລັບການປ່ຽນແປງໃນລະຫວ່າງ snapshot ແລະ eliminates duplicates using memory merging algorithms to Exactly-Once. Incremental ເປັນຜູ້ຮັບຜິດຊອບສໍາລັບການ synchronization ໃນເວລາທີ່ແທ້ຈິງ: ການເຊື່ອມຕໍ່ຢ່າງງ່າຍດາຍກັບລະດັບ Backfill ແລະ consume logs database ໃນໄລຍະການ. ການຄົ້ນຄວ້າ Trilogy ຂອງ ວິທະຍາສາດແລະວິທະຍາສາດ ໃນປັດຈຸບັນ, ໃນປັດຈຸບັນ, ພວກເຮົາຈະເຮັດວຽກຮ່ວມກັບທ່ານອີກເທື່ອຫນຶ່ງ. ໃນປັດຈຸບັນ, ພວກເຮົາຈະເຮັດວຽກຮ່ວມກັບທ່ານອີກເທື່ອຫນຶ່ງ. "Snapshot -> Backfill -> Incremental" "Watermarks"