Miorina amin'ny fomba fanao farany tao amin'ny tontolo iainana famokarana mampiasa SeaTunnel CDC (Change Data Capture) mba hanamafisana toe-javatra toy ny Oracle, MySQL, ary SQL Server, ary miaraka amin'ny valiny avy amin'ny mpampiasa maro, nanoratra ity lahatsoratra ity aho mba hanampy anao hahatakatra ny dingana izay SeaTunnel mampihatra CDC. Ny dingana telo amin'ny CDC Ny dingana ankapobeny amin'ny famakiana angon-drakitra amin'ny CDC dia azo ampahany amin'ny dingana telo lehibe: Snapshot amin'ny fandefasana feno) Ny famerenana Ny fampitomboana Snapshot dingana voalohany Ny dikany amin'ny dingana Snapshot dia tena intuitive: handray ny snapshot ny daty tabilao daty amin'izao fotoana izao ary manatanteraka tabilao feno amin'ny alalan'ny JDBC. Raha raisina amin'ny MySQL ohatra, ny toerana amin'ny binlog amin'izao fotoana izao dia voatahiry nandritra ny snapshot: SHOW MASTER STATUS; File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set binlog.000011 1001373553 Ny lahatsary 0011 1001373553 SeaTunnel dia manoratra ny rakitra sy ny toerana ho toy ny . low watermark Fanamarihana: Tsy mandeha indray mandeha fotsiny izany, satria ny SeaTunnel dia nanatanteraka ny lohahevitry ny fisarahana ny fizarana mba hanatsarana ny snapshots. Fanamarihana: Tsy mandeha indray mandeha fotsiny izany, satria ny SeaTunnel dia nanatanteraka ny lohahevitry ny fisarahana ny fizarana mba hanatsarana ny snapshots. MySQL Snapshot Splitting Mechanism (Split) amin'ny alalan'ny tranonkala Araka ny voalazan'ny Global Parallelism dia 10: Ny SeaTunnel dia hanadihady voalohany ny tabilao rehetra sy ny lafiny fototra / fototra tokana tokana ary misafidy ny lafiny mifanaraka amin'izany. Izany dia mifototra amin'ny ambaratonga ambony sy ambany indrindra amin'ity vavahady ity, miaraka amin'ny fangatahana snapshot.split.size = 8096. Ny tabilao lehibe dia azo alaina ho an'ny ankamaroan'ny Splits, izay voafetra ho an'ny fantsona 10 mifanaraka amin'ny enumerator araka ny fehezan-dalàna amin'ny fangatahan'ny subtask (mipetraka mankany amin'ny fandefasana mahomby amin'ny ankapobeny). 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] Ny fizarana tsirairay dia tena fanontaniana miaraka amin'ny fepetra isan-karazany, ohatra: SELECT * FROM user_orders WHERE order_id >= 1 AND order_id < 10001; Ny tsirairay dia manoratra ny marika rano ambany / marika rano avo manokana. Crucial: Aza manao ny kely loatra; Ny fihenam-bidy be dia be dia be dia be dia be, ary ny fandaharam-potoana sy ny fahatsiarovana dia ho lehibe. Practical Advice: split_size Ny dingana faharoa dia ny Backfill Stage Aoka ho fantatrao fa mandeha amin'ny sary ankapobeny ny tabilao izay matetika voasoratra. Rehefa mamaky ny andininy faha-100 ianao, ny angon-drakitra ao amin'ny andininy faha-1 dia mety efa navoaka. Raha mamaky ny sary ankapobeny fotsiny ianao, ny angon-drakitra voatahiry rehefa tapitra ny famakiana dia tena "tsara" (ny ampahany lava, ny ampahany vaovao). 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. Ny fitondran-tena amin'ity dingana ity dia miankina indrindra amin'ny fametrahana ny Ny fitsipika. exactly_once Ny fomba fanao dia ny fomba fanao ( ) exactly_once = false Ity no fomba voafaritra; ny lohahevitra dia tsotra sy mivantana, ary tsy ilaina ny fametrahana fahatsiarovana: Direct Snapshot Emission: Mamaky ny snapshot angon-drakitra ary mandefa azy mivantana amin'ny alàlan'ny alàlan'ny fidirana amin'ny cache. Direct Log Emission: Mamaky Binlog amin'ny fotoana iray ihany koa ary mandefa azy mivantana. Ny fifanarahana azo atao: Na dia hisy duplicates eo afovoany (A taloha nalefa voalohany, dia B vaovao), raha mbola manohana ny idempotent soratra (toy ny MySQL ny REPLACE INTO), ny vokatra farany dia mifanaraka. Amin'ny ankapobeny, ny fahasamihafana eo amin'ny toetr'andro ( ) exactly_once = true Ity no ampahany mahatalanjona indrindra amin'ny SeaTunnel CDC, ary izany dia ny tsiambaratelo mba hahazoana antoka fa ny angon-drakitra dia tsy ho very, tsy hiverina intsony. Ho an'ny fanamafisana memory buffer (Buffer) Indro, ny mpianatra ao amin'ny kilasy dia tena mampihomehy; raha toa ianao ka mihazakazaka, ny olona dia mihazakazaka sy mihazakazaka (fanovana angon-drakitra). Simple Explanation: Ny SeaTunnel dia manao toy izao: Take a Photo First (Snapshot): Raiso ny isan'ny olona ao amin'ny kilasy voalohany ary manoratra izany ao amin'ny taratasy kely (memory buffer); tsy milaza ny lehibe (downstream) mbola. Jereo ny fanaraha-maso (Backfill): Hahita ny lahatsary fanaraha-maso (Binlog log) ho an'ny vanim-potoana izay niantsoanao. Mifanaraka amin'ny rakitsoratra (mifanaraka amin'ny rakitsoratra): Raha mampiseho ny fanaraha-maso ny olona vao tonga, fa tsy nihaino azy ireo ianao -> manampy azy ireo. Raha ny fanaraha-maso dia mampiseho ny olona izay vao nandeha, fa nihaino azy ireo -> mandehandeha azy ireo. Raha ny fanaraha-maso dia mampiseho ny olona niova ny akanjo -> manova ny rakitra amin'ny akanjo vaovao. Ampidiro ny asa: Taorian'ny fanitsiana, ny taratasy kely ao amin'ny tananao dia lisitry ny tena marina; ankehitriny manolotra izany amin'ny mpitantana. Izany dia midika Summary for Beginners: exactly_once = true "hold it in and don't send it until it's clearly verified." Ny tombony: Ny angon-drakitra azo avy hatrany dia madio tanteraka, tsy misy duplicates na disorder. Ny vidiny: Satria tsy maintsy "ho voatahiry", dia mila mampiasa ny fahatsiarovana mba hamonjy ny angon-drakitra. 2.3 Fanontaniana roa fototra sy valiny Nahoana no tsy misy hetsika READ nandritra ny dingana Backfill? Q1: Why is case READ: throw Exception Ny zava-nitranga READ dia voafaritra amin'ny SeaTunnel ny tenany, manokana mba hanehoana "ny angon-drakitra voasoratra avy amin'ny snapshot." Ny dingana Backfill dia mamaky ny Binlog ao amin'ny banky. Binlog dia manoratra fotsiny ny "fanampian'ny, ny fanesorana, ary ny fanitsiana" (INSERT/UPDATE/DELETE) ary tsy manoratra na oviana na oviana "ny olona nanontany daty". Noho izany, raha mamaky zava-nitranga READ ianao nandritra ny dingana Backfill, dia midika izany fa mampiahiahy ny logic code. Q2: If it's placed in memory, can the memory hold it? Will it OOM? Tsy ny fametrahana ny latabatra manontolo ao amin'ny fahatsiarovana: ny SeaTunnel dia mandroso amin'ny ampahany. Ny fisarahana dia kely: Ny fisarahana voafaritra dia manana rakitra 8096 ihany. Hamoaka aorian'ny fampiasana: Taorian'ny fanodinana ny fizarana, mandefa izany, manafoana ny fahatsiarovana, ary manara-maso ny manaraka. Ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana ny fametrahana. 2.4 Key Details: Watermark Alignment eo amin'ny fizarana maromaro Izany dia olana goavana, saingy tena zava-dehibe, raha tsy voafehy tsara. it will lead to data being either lost or repeated. Ny Fast / Slow Runner Problem: Tsapako fa roa mpianatra (Split A sy Split B) dia manoratra ny asany (Backfill angon-drakitra). Plain Language Explanation: Mpianatra A (haingana): Nosoratany ho amin'ny pejy 100 ary vita amin'ny 10:00. Mpianatra B (lany): Nosoratan'izy ireo ho amin'ny pejy 200 ary vao vita amin'ny 10:05. Amin'izao fotoana izao, ny mpampianatra (Incremental task) dia mila mitohy amin'ny fampianarana fampianarana vaovao (mba mamaky Binlog) avy amin'ny toerana nahavita ny kopia. Raha manomboka amin'ny pejy 200: Mpianatra B dia mifandray, fa ny votoatin'ny Mpianatra A tsy hita eo amin'ny pejy 100 sy 200 (izay nitranga eo anelanelan'ny 10:00 sy 10:05) dia ho very tanteraka. Raha manomboka amin'ny pejy 100: Mpianatra A dia mifandray, fa Mpianatra B dia mitaraina hoe: "Mpampianatra, efa nanoratra ny votoatin'ny pejy 100 ho amin'ny pejy 200!" Ny vahaolana amin'ny SeaTunnel: Manomboka amin'ny voalohany ary miaro ny feonao amin'ny zavatra efa renareo: Ny SeaTunnel dia mandray Ny sehatra: "Minimum Watermark Starting Point + Dynamic Filtering" Manapa-kevitra ny manomboka amin'ny pejy 100 ny mpampianatra (ny marika rano kely indrindra amin'ny fizarana rehetra). Dynamic Filtering (tsy mihaino izay efa reko): Raha ny mpampianatra dia mamaky (manoratra Binlog), dia mitazona lisitra: { A: 100, B: 200 }. Rehefa tonga amin'ny pejy 150 ny mpampianatra: Jereo ny lisitra; ve izany ho an'ny A? 150 > 100, A tsy nandre izany, manoratra izany (mandefa). Jereo ny lisitra; izany ho an'ny B? 150 < 200, B efa nanoratra azy, mandehandeha mivantana (discard). Full Speed Mode (ny rehetra efa tapitra ny fitenenana): Rehefa tonga amin'ny pejy 201 ny mpampianatra ary mahita fa efa nandre izany ny rehetra, dia tsy mila ny lisitra intsony izy ireo. Ny : Ny fandaharam-potoana tsikelikely dia manara-maso araka ny fiaraha-miombon'ny "tsarimihetsika fanombohana + fahasamihafana + rano avo lenta". Summary in one sentence: exactly_once Tsy Ny dingana fampidirana dia lasa tsotra "fampiasàna tsy tapaka avy amin'ny fialan-tsasatra voalohany iray." exactly_once Ny dingana fampitomboana Taorian'ny famerenana ny ) na Snapshot dingana mifarana, dia miditra amin'ny tsotra fanampiny dingana: exactly_once = true MySQL: mifototra amin'ny binlog. Oracle: Miorina amin'ny redo / logminer. SQL Server: Miorina amin'ny tranonkala / LSN. PostgreSQL: mifototra amin'ny WAL. Ny fitondran'i SeaTunnel amin'ny dingana fampidirana dia tena akaiky amin'ny Debezium native: Ampiasao ny taratasy amin'ny fe-potoana offset. Mamorona hetsika toy ny INSERT/UPDATE/DELETE ho an'ny fanovana tsirairay. Rehefa precisely_once = true, dia ampidirina ao amin'ny fanaraha-maso ny toe-javatra offset sy split mba hahatratra ny "exactly-once" semantics aorian'ny tsy fahombiazana famerenana. Ny famaritana Ny fototry ny famolavolana ny SeaTunnel CDC dia ny mahita ny fitoviana tsara amin'ny Ary "Fast" (parallel snapshots) "Stable" (data consistency). Aoka isika hanadihady ny fototry ny dingana manontolo: Slicing (Split) dia fototry ny parallel acceleration: ny fanapahan-kevitry ny latabatra lehibe ho an'ny ampahany kely mba hahafahana miasa amin'ny fitaovana maromaro amin'ny fotoana iray. Snapshot dia tompon'andraikitra amin'ny fitateram-pivarotana: Ny fampiasana ny vitsivitsy mba hamaky ny angon-drakitra ara-tantara amin'ny ankapobeny. Backfill dia tompon'andraikitra amin'ny fanadiovana ny fahasamihafana: Ity no dingana manan-danja indrindra. dia manatsara ny fiovana nandritra ny snapshot ary manafoana ny duplicates mampiasa algorithms famoronana fahatsiarovana mba hahatratra Exactly-Once. Incremental dia tompon'andraikitra amin'ny synchronization amin'ny fotoana tena izy: Mifandray tsy tapaka amin'ny dingana Backfill ary mandanjalanja tsy tapaka ny databases logs. Ny fahatakarana an'ity trilogy ity Ny andraikitry ny mpiara-miasa amin'ny Ao anatin'izany dia ny tena hianatra ny fototry ny SeaTunnel CDC. "Snapshot -> Backfill -> Incremental" "Watermarks"