鑷紑婧愪互鏉ワ紝Tapdata鍙楀埌浜嗚秺鏉ヨ秺澶氬紑鍙戣€呯殑鍏虫敞銆傞殢鐫€鏇村鏂伴矞鍔涢噺娑屽叆绀惧尯锛屽湪涓庣ぞ鍖烘垚鍛樻帰璁ㄥ叡鍒涚殑杩囩▼涓紝鎴戜滑涔熸剰璇嗗埌浜嗛櫎浜嗗熀纭€鏂囨。鍜屽繀瑕佹€т箣澶栵紝鏇粹€滅洿瑙傗€濆拰鈥滀簰鍔ㄢ€濈殑瀹炴垬婕旂ず鏁欑▼鐨勯噸瑕佹€с€備负浜嗗府鍔╁紑鍙戣€呮洿濂藉湴鐞嗚В鎶€鏈枃妗o紝鐪熸鍋氬埌蹇€熶笂鎵嬨€佹繁搴﹀弬涓庯紝鍗冲埢寮€鍚疄鏃舵暟鎹柊浣撻獙锛屾垜浠悓姝ユ帹鍑轰簡Tapdata鍔熻兘鐗规€у拰鎿嶄綔婕旂ず绯诲垪鏁欑▼銆備互涓嬫槸鏈暀绋嬬殑绗竴绡囧唴瀹光€斺€旈浂鍩虹蹇€熷叆闂ㄥ疄璺碉紝浠庢簮鐮佺紪璇戙€佹湇鍔″惎鍔ㄥ埌濡備綍鏂板缓鏁版嵁婧愶紝鍐嶅埌濡備綍鍚姩鍜岄儴缃叉暟鎹簮涔嬮棿鐨勬暟鎹悓姝ワ紝璇︾粏鍒嗕韩甯哥敤鍔熻兘婕旂ず锛屼富瑕佷换鍔″寘鎷細MongoDB=>MySQL瀹炴椂鍚屾浠诲姟锛屽寘鎷嚜鍔ㄥ缓琛ㄥ拰瀹炴椂鏁版嵁鍚屾MongoDB=>MySQL+鑷畾涔夊嚱鏁?鑷姩鎺ㄦā+寤鸿〃浠诲姟锛屽彲浠ヨ嚜鍔ㄦ帹鏂寜鐓ц嚜瀹氫箟鍑芥暟鐨勯€昏緫琛ㄦā鍨婱ySQL=>PG+DDL鍚屾浠诲姟锛屽彲浠ヨ嚜鍔ㄥ悓姝ユ暟鎹拰琛ㄦā鍨嬪彉鍖?.椤圭洰浠嬬粛浠€涔堟槸Tapdata锛烼apdata寮€婧愰」鐩畾浣嶄负瀹炴椂鏁版嵁鏈嶅姟骞冲彴锛岀幇宸叉帹鍑?.0鐗堟湰鏍稿績娑电洊瀹炴椂鏁版嵁鍚屾銆佸疄鏃舵暟鎹紑鍙戙€丗luentETL绛夊満鏅紝鍏峰瀹屾暣鐨勮兘鍔涗互鍙婂閲忓鍒躲€佸紓鏋勬暟鎹簱涔嬮棿鐨勫悓姝ュ拰杞崲銆佽〃绾у悓姝ュ拰浠诲姟鐩戞帶銆傚叾宸ヤ綔鏈哄埗涓昏鍖呮嫭浠ヤ笅鍥涗釜鐜妭鐨勫姛鑳界壒鎬э細鍩轰簬CDC鐨勯潪渚靛叆寮忔暟鎹簮瀹炴椂閲囬泦寮傛瀯鏁版嵁妯″瀷銆佹暟鎹鐞嗙殑鑷姩鎺ㄧ悊鍜岃浆鎹€佹祦璁$畻銆佺紦瀛樺瓨鍌ㄤ竴浣撳寲鏋舵瀯銆佷竴閿紡灏嗘ā鍨嬪彂甯冧负鏁版嵁鏈嶅姟闂幆鑳藉姏濡備笂鍥炬墍绀恒€傛渶宸﹁竟鏄悇绉嶆暟鎹簮锛屽寘鎷暟鎹簱銆佹暟鎹粨搴撳拰搴旂敤绋嬪簭鏂囦欢銆傞€氳繃Tapdata鏃楄埌绾х殑鍩轰簬CDC鐨勫疄鏃舵棤鍒涙暟鎹噰闆嗘ā鍧楋紝鍙互瀹炴椂閲囬泦鏉ヨ嚜杩欎簺鏁版嵁婧愮殑鏁版嵁锛涘紓鏋勬暟鎹ā鍨嬬粡杩囪嚜鍔ㄦ帹鐞嗗拰杞崲鍚庯紝鎴愪负璁$畻娴佺▼涓爣鍑嗘暟鎹殑涓€閮ㄥ垎锛涚劧鍚庣粡杩囦竴浜涙暟鎹鐞嗭紝娴佸紡璁$畻锛屼互鍙婇」鐩嚜甯︾殑缂撳瓨瀛樺偍锛屾牴鎹紑鍙戣€呯殑闇€姹傝繘琛屾暟鎹殑杞崲锛涙渶鍚庨€氳繃鏁版嵁鍙戝竷鑳藉姏锛屼互API鐨勫舰寮忓憟鐜帮紝鎴栬€呮寜闇€鐩存帴浼犲叆鏁版嵁鐩爣锛屼緥濡傛暟鎹簱銆佸簲鐢ㄧ▼搴忋€佹垨鑰匴eb鏈嶅姟绛夛紝浠庤€岃揪鍒拌幏鍙栫殑鐩殑鎵€闇€鐨勬暟鎹洿蹇€備笌浼犵粺鏂规鐨勫姣斿湪鐩稿悓鐨勫満鏅笅锛屼紶缁熸柟妗堟洿甯歌鐨勬槸閫氳繃鑴氭湰杞銆佽嚜瀹氫箟浠g爜杩炴帴鍣紝鎴栬€呭紑婧愰€傞厤鍣ㄥKettle/Canal/OGG銆備粠鍚勭鏁版嵁婧愯鍙栨暟鎹紱鐒跺悗浣跨敤Kafka/MQ绛夋秷鎭槦鍒楋紝鎴栬€匰park/Flink绛夎绠楀紩鎿庤繘琛屾暟鎹紶杈撹浆鎹€佸紑鍙戝拰娓呮礂锛屼互鍙婃暟鎹紶杈撹浆鎹€佸紑鍙戝拰娓呮礂锛涙渶鍚庨€氳繃鑷繁鍐欎竴浜汚PI鎺ュ彛閫昏緫鍚戠洰鏍囩粓绔彂閫佹暟鎹€傝繖绫绘柟妗堢殑鏁翠釜鐜妭锛屼粠鍘熸潵鐨勮鍙栧埌娑堟伅闃熷垪锛屽埌鍐橲tream閫昏緫锛屽埌璁$畻灞傦紝鍐嶅埌杈撳叆灞傦紝鏈変竴涓緢澶у緢鏄庢樉鐨勭己闄凤紝灏辨槸閾捐矾鏃堕棿闀匡紝闈炲疄鏃讹紝鎴愭湰楂橈紝闅句互缁存姢銆俆apdata闇€瑕佸仛鐨勬槸涓€涓揩閫熴€佸疄鏃躲€佺畝鍗曘€佹槗鐢ㄧ殑瑙e喅鏂规鈥斺€旇鎴戜滑鍦ㄤ腑闂村畬鎴愭墍鏈夌殑娴佺▼浠诲姟锛岃繖涔熸槸Tapdata寮€婧愮殑璁捐鐞嗗康銆?.浣跨敤璇存槑濡備綍浠庢簮浠g爜鏋勫缓骞跺惎鍔ㄤ竴涓畬鏁寸殑Tapdata鏈嶅姟锛熶粠澶村紑濮嬫瀯寤哄拰閮ㄧ讲Tapdata寮€婧愮増鏈紝闇€瑕佸畬鎴愪笁涓楠わ細鐜鍑嗗锛歀inux+Docker锛堝綋鍓嶇増鏈粎鏀寔Linux鍜孌ocker鐜锛岄潪鍩轰簬Docker鍜岄潪Linux鐜姝e湪閫傞厤涓?寰堝揩浼氬吋瀹筂eeteveryone)涓嬭浇婧愮爜:gitclonegit@github.com:tapdata/tapdata.git&&cdtapdata缂栬瘧鎵€鏈夌粍浠跺苟鍚姩鏈嶅姟涓€鏉″懡浠?bashbuild/quick-dev.sh闄勪唬鐮佺粨鏋勫垎鏋愬強鍚姩璇存槑锛氫唬鐮佸簱鐨勪富瑕佺粍鎴愰儴鍒嗭紙鐩綍锛塧ssets锛氱敤鏉ュ瓨鏀炬垜浠殑鍥剧墖銆乴ogo绛夐潤鎬佽祫婧恇uild锛氫富瑕佺敤鏉ュ瓨鏀炬垜浠敤鏉ユ墦鍖呫€佺紪璇戞垨娴嬭瘯鐨勮剼鏈紝涓嶆槸妗嗘灦鐨勪富瑕佺粍鎴愰儴鍒哻onnectorscommon锛氭暟鎹簮鍏叡瀵硅薄鍜岀被鐨勫畾涔塸lugin-kit锛氫緵寮€鍙戣€呬娇鐢紝濡傛灉寮€鍙戣€呮兂鍦ㄦ鏋朵笂寮€鍙戣嚜宸辩殑鏁版嵁婧愶紝鍙互浣跨敤杩欓噷鐨勪竴浜汚PI鏂规硶tapshell锛氱洰鍓峊apdata鐨勫紑婧愰」鐩苟娌℃湁瀵瑰鏆撮湶UI鐣岄潰锛屾暣涓郴缁熺殑浜や簰浣跨敤閮芥槸閫氳繃tapshell鏉ヨ繍琛岀殑锛宼apshell鏄竴涓熀浜嶱ython鐨勪氦浜掑懡浠よ宸ュ叿bin锛氭垜浠細鍦ㄨ繖閲屾斁涓€浜涚被浼約tart/stop鐨勮剼鏈湪futureConnectors锛氱洰鍓峊apdata鏀寔鐨勬暟鎹簮閮藉湪杩欓噷锛氬紑婧愭暟鎹簱ApacheDoris娴嬭瘯鏁版嵁搴揇ummyES/Kafka/MySQL/PG/OceanBase/RabbitMQ/RocketMQ...dist锛氬悇涓寘寮曟搸鐨勬垚鍝佺洰褰?engine锛岃绠楃殑涓诲簱锛屽彲鐢ㄤ簬鏁版嵁璇诲彇銆佽浆鎹€佽仛鍚堣绠梞anager锛氱鐞嗙銆佸紑鍙戣€呬换鍔$鐞嗐€佹棩蹇椾笂鎶ャ€佺洃鎺х瓑淇℃伅閮芥槸閫氳繃杩欎釜缁勪欢瀹屾垚鐨勩€傛垜浠篃浣跨敤manager鏉ュ畬鎴愪换鍔$殑鎸佷箙鍖栵紙寮曟搸鏈韩鍙窇浠诲姟锛屼笉鎸佷箙鍖栵級README锛氫竴涓腑鏂囩増锛屼竴涓嫳鏂囩増缂栬瘧璇存槑锛氬厛缂栬瘧plugin-kit鍜宑onnectorscommon锛堢紪璇戞垜浠殑鍩虹渚濊禆瀵硅薄锛夛紝鐒跺悗瀹屾垚engine寮曟搸缂栬瘧锛岀户缁畬鎴恗anager缂栬瘧锛屾暣涓湇鍔″氨鍙互杩愯浜嗐€傛渶鍚庨€氳繃鏋勫缓涓殑DockerFile锛屾墦鍖呮垚涓€涓狝ll-in-One闀滃儚锛屾垜浠渶缁堣繍琛岃繖涓暅鍍忋€傝繍琛屼箣鍚庯紝鎴戜滑杩橀渶瑕佸皢杩炴帴鍣ㄤ笅鐨勬墍鏈夋暟鎹簮娉ㄥ唽鍒扮郴缁熶腑銆傛暟鎹簮娉ㄥ唽锛氬鏋滆娉ㄥ唽涓€涓柊鐨勬暟鎹簮锛屽彲浠ヤ娇鐢╝ccesstoken鏉ュ畬鎴愩€傚浣曞姩鎬佹敞鍐屾暟鎹簮锛熶互MongoDB涓轰緥锛屾紨绀哄浣曞姩鎬佹敞鍐屼竴涓暟鎹簮锛屼娇绯荤粺鍏峰鎻掍欢鏁版嵁闆嗘垚鐨勮兘鍔涳細1銆佸姩鎬佹敞鍐屼竴涓紑鍙戝ソ鐨勬暟鎹簮鎻掍欢锛屽垪鍑虹郴缁熷綋鍓嶆敮鎸佺殑鏁版嵁婧愶細showconnectors娉ㄥ唽MongoDB鏁版嵁婧愭彃浠跺垪鍑虹郴缁熷綋鍓嶆敮鎸佺殑鏁版嵁婧愶細showconnectors鏂板缓涓€涓狹ongoDB鏁版嵁婧怐ataSource("mongodb",$name).uri($uri).save()楠岃瘉骞朵繚瀛樻暟鎹簮2.鍒涘缓鎵€鏈夐渶瑕佺殑鏁版嵁婧愶紝楠岃瘉骞朵繚瀛樻暟鎹簮DataSource("mysql",$name).host($host).port($port).username($username).password($password)銆俤b($db).save()DataSource("postgresql",$name).host($host).port($port).鐢ㄦ埛鍚?$username).password($password).db($db).schema($schema).save()鏌ョ湅鏁版嵁婧愰厤缃紝鏌ョ湅琛ㄥ姞杞界姸鎬?.鍔熻兘绀轰緥鍙婁换鍔℃搷浣滄紨绀烘彁鍓嶅噯澶囩殑搴擄紙纭宸茶繛鎺ワ級锛歁ongoDB锛?.2锛屽寘鍚竴寮犺〃锛歝arMySQL锛?.0.22,绌哄簱PG:12.6,Buildandrun涓€涓畝鍗曠殑MongoDB鍚屾浠诲姟=>MySQL绌哄簱*浠诲姟鎻忚堪锛氳繖涓悓姝ヤ换鍔℃病鏈変换浣曞鏉傜殑澶勭悊锛岄渶姹傛槸浠嶮ongoDB鍚屾car琛ㄥ埌MySQL銆?銆佹柊寤鸿〃鍚屾浠诲姟锛岃繍琛宲=Pipeline('mongo=>mysql')p.readFrom(mongodb.car).writeTo(mysql.car)p.start()2銆傛煡鐪嬩换鍔¤繍琛岀姸鎬侊細showjobs3銆傜洃鍚疄鏃剁姸鎬侊細monitorjobmongo=>mysql4銆傛煡鐪嬭繍琛屾棩蹇楋細logsjobmongo=>mysql5銆傛煡鐪媠ource鍜宼arget6鐨勬暟鎹姸鎬併€備慨鏀逛竴涓嬶紝鏌ョ湅鏁版嵁鏄惁鍚屾浠ュ墠鐨勶紝寤惰繜涓€鑸湪鍑犵櫨姣浠ュ唴銆傛瀯寤哄苟杩愯MongoDB=>MySQL涓嶶DF鍚屾浠诲姟*浠诲姟鎻忚堪锛氫粠MongoDB鍒癕ySQL鐨刄DF锛圲serDefinedFunction锛夋暟鎹悓姝ヤ粛鐒舵槸鏁版嵁鍚屾锛屼絾鏄湁涓€浜涘瓧娈佃浆鎹€?銆佸畾涔塙DF锛圲serDefinedFunction锛夛細娣诲姞涓€浜涘瓧娈碉紝鍒犻櫎涓€鏉″凡鏈夋暟鎹?銆佹柊寤鸿〃鍚屾浠诲姟锛屾坊鍔燯DF鑺傜偣锛岃繍琛宲=Pipeline('mongo=>mysql_with_udf')p.readFrom(mongodb.car).processor(pp).writeTo(mysql.car_with_udf)p.start()*琛ュ厖璇存槑锛氫笌涓婁竴涓换鍔′笉鍚岀殑鏄湪璇诲啓涔嬮棿澧炲姞浜嗕竴涓鐞嗗櫒锛坧rocessor锛夛紝璁板綍鍦ㄨ繘琛屼竴浜涜浆鎹㈢殑鍚屾椂锛屾牴鎹甎DF瀹氫箟澧炲噺瀛楁锛岃浆鎹㈢被鍨嬨€?銆佺洃鎺у疄鏃剁姸鎬侊細monitorjobmongo=>mysql4銆傛煡鐪嬭繍琛屾棩蹇楋細logsjobmongo=>mysql5銆傛煡鐪嬪缓琛ㄧ姸鎬?浠诲姟瀹屾垚锛氫寒鐐瑰湪浜庝笉浠呮暟鎹悓姝ュ畬鎴愶紝琛ㄧ粨鏋勮嚜鍔ㄥ垱寤哄畬鎴愩€傚湪鍚屾杩囩▼涓紝鍙互鑷姩寤鸿〃澶勭悊鍚庣殑琛ㄧ粨鏋勶紝鏃犻渶鍍忓叾浠栧悓姝ュ伐鍏烽偅鏍锋墜鍔ㄥ缓琛紝浣跨敤鏇存柟渚裤€傛瀯寤哄苟杩愯涓€涓敮鎸丏DL鍚屾浠诲姟鐨凪ySQ=>PG*浠诲姟鎻忚堪锛歁ySQL鍒癙G鐨凞DL鍚屾锛屽璞′负绗竴涓换鍔′腑浣跨敤鐨刢ar琛ㄣ€?.鏂板缓琛ㄥ悓姝ヤ换鍔★紝閰嶇疆DDL鏀寔锛岃繍琛宲=Pipeline('mysql=>pg_with_ddl')p.readFrom(mysql.car_ddl,ddl=True).writeTo(pg.car_ddl)p.start()*琛ュ厖璇存槑锛欴DL浠诲姟榛樿鏄笉寮€鍚殑銆傚鏋滆鍚屾DDL锛屽彲浠ラ€氳繃鎵цddl=True鏉ュ紑鍚€?銆佺洃鎺у疄鏃剁姸鎬侊細monitorjobmongo=>mysql3銆傛煡鐪嬭繍琛屾棩蹇楋細logsjobmongo=>mysql4銆傛煡鐪嬪缓琛ㄧ姸鎬?锛巗ource杩涜澶氭DDL妫€鏌arget鏄惁鍚屾锛氳皟鏁存簮瀛楁绫诲瀷锛岄噸鍛藉悕婧愬瓧娈垫坊鍔?鍒犻櫎瀛楁*浠诲姟瀹屾垚鐘舵€侊細瀹炵幇瀹炴椂鍚屾锛屽欢杩熶竴鑸湪鍑犵櫨姣浠ュ唴銆傝嚦姝わ紝浠ヤ笂涓変釜浠诲姟鍦ㄦ垜浠暣涓郴缁熶腑鍚屾椂杩愯銆傛垜浠彲浠ラ殢鏃堕€氳繃logsjob+浠诲姟鍚嶆煡鐪嬩换鍔$殑杩愯鐘舵€侊紱閫氳繃monitorjob+浠诲姟鍚嶆煡鐪嬩换鍔$殑杩愯鎸囨爣淇℃伅锛屽寘鎷緭鍏?鈥嬧€嬭緭鍑?鏇存柊鏁版嵁閲忕瓑锛涢€氳繃show/use鏌ョ湅琛ㄤ俊鎭拰琛ㄧ粨鏋勷煈夝煆籊itHub椤圭洰閾炬帴锛歨ttps://www.github.com/tapdat...濡傛灉鎮ㄥ鎴戜滑鐨勯」鐩劅鍏磋叮锛屾杩庣粰Tapdata[Star+Fork+Watch]morethan涓夎繛鍑伙紝杩欐槸鏈暀绋嬬殑鏍稿績鍐呭鍥為【銆傚Tapdata寮€婧愰」鐩湁鏇村鐤戦棶锛熸偍宸茬粡椤哄埄搴﹁繃鈥滆嚜瀛﹀叆闂ㄦ湡鈥濓紝鎯崇湅鍩虹鐭ヨ瘑鏇磋缁嗙殑鎿嶄綔鍚楋紵娆㈣繋鎵弿浜岀淮鐮佹坊鍔燭apdata灏忓濮愶紙寰俊ID锛歍apdata2022锛夛紝鍔犲叆Tapdata绀惧尯缇よ繘涓€姝ヤ氦娴佽璁恒€傛垜浠湡寰呬笌鎮ㄤ竴璧锋墦閫犱紭绉€鐨勫紑婧愰」鐩拰寮€鏀炬垚鐔熺殑寮€婧愮ぞ鍖猴紝鍏卞悓瑙佽瘉瀹炴椂鏁版嵁鐨勬洿澶氬彲鑳姐€備笅涓€绡囨暀绋嬬殑鍐呭鍙兘鏉ヨ嚜浜庢偍鐨勬彁闂紒馃巵缇ゅ唴鏇村褰╄泲鍦═apdata绀惧尯缇わ紝寮€婧愰」鐩牳蹇冩垚鍛樺湪绾跨瓟鐤戯紝甯姪寮€鍙戣€呭揩閫熺悊娓呭洶鎯戙€傚悓鏃讹紝浣滀负Tapdata绀惧尯鐨勬椿璺冪敤鎴凤紝鎮ㄨ繕鍙互锛氳幏鍙朤apdata寮€婧怚ssues銆佺壒娈婁紭鍏堥渶姹傦紝鎺ユ敹鏈€鏂扮殑绀惧尯璧勮锛堝寘鎷絾涓嶉檺浜庡彂灞曡鍒掋€佹牳蹇冩妧鏈€佷笟鍔″満鏅瓑锛?)绗竴娆°€傚弬涓庢椿鍔ㄩ鍙栧紑婧愪綋楠屽畼鏂版墜浠诲姟銆佸晢鍔¤儗鍖呫€佹疆娴乀鎭ょ瓑鏇村濂界ぜ鏈夋満浼氬彈閭€鍔犲叆TapdataCommitterProgram锛屾垚涓烘寮忕殑TapdataCommitter鏈夋満浼氱洿鎺ュ弬涓庡苟褰卞搷鏈潵TapdataofTapdata馃憠馃徎鐐规瑙傜湅鏁欑▼瀹屾暣鍥炴斁
