தரவு பிடிப்பு மாற்றம் (CDC) என்பது தரவுத்தள செயல்பாடுகளில் (செருகல்கள், புதுப்பிப்புகள், நீக்குதல்கள்) வரிசை மட்டத்தில் மாற்றங்களைக் கண்காணிக்கவும், நிகழ்வுகளின் வரிசையில் பிற அமைப்புகளுக்கு அறிவிக்கவும் பயன்படுத்தப்படும் ஒரு நுட்பமாகும். பேரிடர் மீட்பு சூழ்நிலைகளில், CDC முதன்மையாக ஒரு முதன்மை மற்றும் காப்பு தரவுத்தளத்திற்கு இடையில் தரவை ஒத்திசைக்கிறது, இது நிகழ்நேர தரவை முதன்மை தரவுத்தளத்திலிருந்து இரண்டாம் நிலை தரவுத்தளத்திற்கு ஒத்திசைக்க உதவுகிறது.
source ----------> CDC ----------> sink
சீடனல் சிடிசி இரண்டு வகையான தரவு ஒத்திசைவை வழங்குகிறது:
டெபீசியம் போன்ற பல CDC தளங்கள் வரலாற்று தரவு ஒத்திசைவின் போது அட்டவணைகளைப் பூட்டக்கூடும் என்பதால், பூட்டு இல்லாத ஸ்னாப்ஷாட் ஒத்திசைவு கட்டம் வலியுறுத்தப்படுகிறது. ஸ்னாப்ஷாட் வாசிப்பு என்பது ஒரு தரவுத்தளத்தின் வரலாற்றுத் தரவை ஒத்திசைக்கும் செயல்முறையாகும். இந்த செயல்முறையின் அடிப்படை ஓட்டம் பின்வருமாறு:
storage -------------> splitEnumerator ---------- split ----------> reader ^ | | | \----------------- report -----------/
பிரித்தல் பகிர்வு
splitEnumerator
(பிரிக்கப்பட்ட விநியோகஸ்தர்) குறிப்பிட்ட புலங்கள் (அட்டவணை ஐடி அல்லது தனித்துவமான விசைகள் போன்றவை) மற்றும் வரையறுக்கப்பட்ட படி அளவு ஆகியவற்றின் அடிப்படையில் அட்டவணைத் தரவை பல பிரிவுகளாகப் பிரிக்கிறது.
இணை செயலாக்கம்
ஒவ்வொரு பிரிவும் இணையான வாசிப்புக்காக வெவ்வேறு வாசகருக்கு ஒதுக்கப்பட்டுள்ளது. ஒரு வாசகர் ஒரு இணைப்பை ஆக்கிரமிப்பார்.
நிகழ்வு கருத்து
ஒரு பிரிவிற்கான வாசிப்பு செயல்பாட்டை முடித்த பிறகு, ஒவ்வொரு வாசகரும் முன்னேற்றத்தை splitEnumerator
க்கு மீண்டும் தெரிவிக்கிறார்கள். பிரிவிற்கான மெட்டாடேட்டா பின்வருமாறு வழங்கப்படுகிறது:
String splitId # Routing ID TableId tableId # Table ID SeatunnelRowType splitKeyType # The type of field used for partitioning Object splitStart # Start point of the partition Object splitEnd # End point of the partition
வாசகர் பிரிப்புத் தகவலைப் பெற்றவுடன், அது பொருத்தமான SQL அறிக்கைகளை உருவாக்குகிறது. தொடங்குவதற்கு முன், அது தரவுத்தள பதிவில் தற்போதைய பிரிவின் தொடர்புடைய நிலையைப் பதிவு செய்கிறது. தற்போதைய பிரிவை முடித்த பிறகு, வாசகர் பின்வரும் தரவுகளுடன் முன்னேற்றத்தைப் splitEnumerator
க்கு அறிக்கை செய்கிறார்:
String splitId # Split ID Offset highWatermark # Log position corresponding to the split, for future validation
ஸ்னாப்ஷாட் வாசிப்பு கட்டத்திற்குப் பிறகு அதிகரிக்கும் ஒத்திசைவு கட்டம் தொடங்குகிறது. இந்த கட்டத்தில், மூல தரவுத்தளத்தில் நிகழும் எந்த மாற்றங்களும் உண்மையான நேரத்தில் காப்புப்பிரதி தரவுத்தளத்துடன் ஒத்திசைக்கப்படுகின்றன. இந்த கட்டம் தரவுத்தள பதிவைக் கேட்கிறது (எ.கா., MySQL பின்லாக்). பின்லாக்கின் நகல் இழுப்புகளைத் தவிர்க்கவும் தரவுத்தள சுமையைக் குறைக்கவும் அதிகரிக்கும் கண்காணிப்பு பொதுவாக ஒற்றை-திரிக்கப்பட்டதாகும். எனவே, ஒரு இணைப்பை மட்டுமே பயன்படுத்தி, ஒரே ஒரு வாசகர் மட்டுமே பயன்படுத்தப்படுகிறார்.
data log -------------> splitEnumerator ---------- split ----------> reader ^ | | | \----------------- report -----------/
அதிகரிக்கும் ஒத்திசைவு கட்டத்தில், ஸ்னாப்ஷாட் கட்டத்திலிருந்து அனைத்து பிளவுகளும் அட்டவணைகளும் ஒரே பிரிவாக இணைக்கப்படுகின்றன. இந்த கட்டத்தில் பிளவு மெட்டாடேட்டா பின்வருமாறு:
String splitId Offset startingOffset # The lowest log start position among all splits Offset endingOffset # Log end position, or "continuous" if ongoing, eg, in the incremental phase List<TableId> tableIds Map<TableId, Offset> tableWatermarks # Watermark for all splits List<CompletedSnapshotSplitInfo> completedSnapshotSplitInfos # Snapshot phase split details
CompletedSnapshotSplitInfo
புலங்கள் பின்வருமாறு:
String splitId TableId tableId SeatunnelRowType splitKeyType Object splitStart Object splitEnd Offset watermark # Corresponds to the highWatermark in the report
அதிகரிக்கும் கட்டத்தில் உள்ள பிரிவானது, ஸ்னாப்ஷாட் கட்டத்தில் உள்ள அனைத்துப் பிளவுகளுக்கும் வாட்டர்மார்க்கைக் கொண்டுள்ளது. அதிகரிக்கும் ஒத்திசைவுக்கான தொடக்கப் புள்ளியாக குறைந்தபட்ச வாட்டர்மார்க் தேர்ந்தெடுக்கப்படுகிறது.
ஸ்னாப்ஷாட் வாசிப்பு கட்டத்திலோ அல்லது அதிகரிக்கும் வாசிப்பு கட்டத்திலோ, தரவுத்தளமும் ஒத்திசைவுக்காக மாறக்கூடும். சரியாக ஒரு டெலிவரியை எவ்வாறு உத்தரவாதம் செய்வது?
உதாரணமாக, ஸ்னாப்ஷாட் வாசிப்பு கட்டத்தில், மாற்றங்கள் நிகழும்போது ஒரு பிளவு ஒத்திசைக்கப்படுகிறது, எடுத்துக்காட்டாக k3
வரிசையைச் செருகுதல், k2
க்கு புதுப்பித்தல் மற்றும் k1
ஐ நீக்குதல். படிக்கும் செயல்பாட்டின் போது எந்த பணி அடையாளமும் பயன்படுத்தப்படாவிட்டால், புதுப்பிப்புகள் இழக்கப்படலாம். SeaTunnel இதை பின்வருமாறு கையாளுகிறது:
split{start, end}
.
high = low
எனில், பிரிப்புக்கான தரவு படிக்கும் போது மாறவில்லை. (high - low) > 0
எனில், செயலாக்கத்தின் போது மாற்றங்கள் ஏற்பட்டுள்ளன. இதுபோன்ற சூழ்நிலையில், சீ டன்னல்:
low watermark
high watermark
மாற்றங்களை வரிசையில் பயன்படுத்தவும்.
insert k3 update k2 delete k1 | | | vvv bin log --|---------------------------------------------------|-- log offset low watermark high watermark CDC reads: k1 k3 k4 | Replays v Real data: k2 k3' k4
அதிகரிக்கும் கட்டத்தைத் தொடங்குவதற்கு முன், சீ டன்னல் முதலில் முந்தைய படியிலிருந்து அனைத்துப் பிளவுகளையும் சரிபார்க்கிறது. பிளவுகளுக்கு இடையில், தரவு புதுப்பிக்கப்படலாம், எடுத்துக்காட்டாக, பிளவு1 மற்றும் பிளவு2 க்கு இடையில் புதிய பதிவுகள் செருகப்பட்டால், ஸ்னாப்ஷாட் கட்டத்தின் போது அவை தவறவிடப்படலாம். பிளவுகளுக்கு இடையில் இந்தத் தரவை மீட்டெடுக்க, சீ டன்னல் இந்த அணுகுமுறையைப் பின்பற்றுகிறது:
completedSnapshotSplitInfos
சரிபார்க்கவும். இல்லையெனில், அது பிளவுகளுக்கு இடையிலான தரவாகக் கருதப்படுகிறது, மேலும் அதை சரிசெய்ய வேண்டும்.
|------------filter split2-----------------| |----filter split1------| data log -|-----------------------|------------------|----------------------------------|- log offset min watermark split1 watermark split2 watermark max watermark
CDC-ஐ இடைநிறுத்தி மீண்டும் தொடங்குவது பற்றி என்ன? SeaTunnel ஒரு பரவலாக்கப்பட்ட ஸ்னாப்ஷாட் வழிமுறையைப் பயன்படுத்துகிறது (Chandy-Lamport):
இந்த அமைப்பில் p1
மற்றும் p2
இரண்டு செயல்முறைகள் இருப்பதாகக் கொள்வோம், இங்கு p1
மூன்று மாறிகளைக் கொண்டுள்ளது X1 Y1 Z1
மற்றும் p2
மூன்று மாறிகளைக் கொண்டுள்ளது X2 Y2 Z2
. ஆரம்ப நிலைகள் பின்வருமாறு:
p1 p2 X1:0 X2:4 Y1:0 Y2:2 Z1:0 Z2:3
இந்த கட்டத்தில், p1
ஒரு உலகளாவிய ஸ்னாப்ஷாட்டைத் தொடங்குகிறது. p1
முதலில் அதன் செயல்முறை நிலையைப் பதிவுசெய்து, பின்னர் p2
க்கு ஒரு மார்க்கரை அனுப்புகிறது.
மார்க்கர் p2
அடைவதற்கு முன்பு, p2
, p1
க்கு M
செய்தியை அனுப்புகிறது.
p1 p2 X1:0 -------marker-------> X2:4 Y1:0 <---------M---------- Y2:2 Z1:0 Z2:3
மார்க்கரைப் பெற்றவுடன், p2
அதன் நிலையைப் பதிவு செய்கிறது, மேலும் p1
M
என்ற செய்தியைப் பெறுகிறது. p1
ஏற்கனவே ஒரு உள்ளூர் ஸ்னாப்ஷாட்டைச் செய்திருப்பதால், அது M
என்ற செய்தியை மட்டுமே பதிவு செய்ய வேண்டும். இறுதி ஸ்னாப்ஷாட் இப்படி இருக்கும்:
p1 M p2 X1:0 X2:4 Y1:0 Y2:2 Z1:0 Z2:3
சீ டன்னல் சிடிசியில், குறிப்பான்கள் அனைத்து வாசகர்களுக்கும் அனுப்பப்படுகின்றன, கணக்கீட்டாளர்கள், எழுத்தாளர்கள் மற்றும் பிற முனைகளைப் பிரிக்கின்றன, ஒவ்வொன்றும் அதன் நினைவக நிலையைப் பராமரிக்கின்றன.