kafka閫熷害蹇殑鍘熷洜
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka閫熷害蹇殑鍘熷洜相关的知识,希望对你有一定的参考价值。
鏍囩锛?a href='http://www.mamicode.com/so/1/info' title='info'>info
write cpu 瀛樺偍 img 缂洪櫡 鍐呮牳绌洪棿 鍐呭瓨鏁版嵁 鎻忚堪鎴戜滑閮界煡閬揔afka闈炲父蹇紝姣旂粷澶у鏁扮殑甯傚満涓婂叾浠栨秷鎭腑闂翠欢閮借蹇€傝繖閲屾潵鐮旂┒涓嬮偅涔堜负浠€涔圞afka閭d箞蹇紙褰撶劧涓嶄細鏄洜涓哄畠鐢ㄤ簡Scala锛夈€?/p>
Kafka鐨勬秷鎭槸淇濆瓨鎴栫紦瀛樺湪纾佺洏涓婄殑锛屼竴鑸涓哄湪纾佺洏涓婅鍐欐暟鎹槸浼氶檷浣庢€ц兘鐨勶紝鍥犱负瀵诲潃浼氭瘮杈冩秷鑰楁椂闂淬€?/p>
浣嗘槸瀹為檯涓婏紝Kafka鍏朵腑涓€涓壒鎬у嵈鏄珮鍚炲悙鐜囷紝鍗充娇鏄櫘閫氱殑鏈嶅姟鍣紝Kafka涔熻兘杞绘澗鏀寔姣忕鐧句竾绾х殑鍐欏叆璇锋眰锛岃秴杩囦簡澶ч儴鍒嗙殑娑堟伅涓棿浠躲€傝繖绉嶇壒鎬т娇寰桲afka鍦ㄦ棩蹇楀鐞嗙瓑娴烽噺鏁版嵁鍦烘櫙涓簲鐢ㄥ箍娉涖€傞偅涔堜负浠€涔圞afka閫熷害閭d箞蹇紝鍙互浠庢暟鎹啓鍏ュ拰鏁版嵁璇诲彇涓ゆ柟闈㈡潵鍒嗘瀽銆?/p>
Kafka鐨勬暟鎹啓鍏ワ紙鐢熶骇鑰咃級
鐢熶骇鑰咃紙Producer锛夋槸璐熻矗鍚慘afka鎻愪氦鏁版嵁鐨勶紝Kafka浼氭妸鏀跺埌鐨勬秷鎭兘鍐欏叆鍒扮鐩樹腑锛屽洜姝ゅ彲浠ヨ涓哄畠缁濆涓嶄細涓㈠け鏁版嵁銆?/p>
鑰屼负浜嗕紭鍖栧啓鍏ラ€熷害锛孠afka閲囩敤浜嗕袱绉嶆妧鏈紝涓€绉嶆槸椤哄簭鍐欏叆锛屼竴绉嶆槸MMFile銆?/p>
椤哄簭鍐欏叆
纾佺洏璇诲啓鐨勫揩鎱㈠彇鍐充簬浣犳€庝箞浣跨敤瀹冿紝涓€鑸彲浠ュ垎涓洪『搴忚鍐欐垨鑰呴殢鏈鸿鍐欍€?/p>
鍥犱负纭洏鏄満姊扮粨鏋勶紝姣忔璇诲啓閮戒細缁忚繃涓€涓€愬鍧€->鍐欏叆銆戠殑杩囩▼锛屽叾涓殑瀵诲潃鏄竴涓崄鍒嗚€楁椂鐨勬満姊板姩浣滐紝鎵€浠ョ‖鐩樻渶璁ㄥ帉闅忔満I/O锛屾渶鍠滄椤哄簭I/O銆備负浜嗘彁楂樿鍐欑‖鐩樼殑閫熷害锛孠afka灏辨槸浣跨敤鐨勯『搴廔/O銆傝€屼笖Linux瀵逛簬纾佺洏鐨勮鍐欎紭鍖栦篃姣旇緝澶氾紝鍖呮嫭read-ahead銆亀rite-behind鍜岀鐩樼紦瀛樼瓑銆傛洿澶氱殑锛屽Java鐨勫唴瀛樼鐞嗗拰鍨冨溇鍥炴敹浼氭湁浼樺寲锛屽洜涓哄鏋滃湪鍐呭瓨鍋氳繖浜涙搷浣滅殑鏃跺€欙紝涓€涓細瀵艰嚧Java瀵硅薄鐨勫唴瀛樺紑閿€寰堝ぇ锛屽彟涓€涓槸闅忕潃鍫嗗唴瀛樻暟鎹殑澧炲锛孞ava鐨凣C鏃堕棿浼氬彉寰楀緢闀裤€?/p>
鍥犳鍙互鎬荤粨鍑轰娇鐢ㄧ鐩樻搷浣滄湁浠ヤ笅鍑犱釜濂藉锛?/p>
1.纾佺洏椤哄簭璇诲啓閫熷害瓒呰繃鍐呭瓨闅忔満璇诲啓銆?/p>
2.JVM鐨凣C鏁堢巼浣庯紝鍐呭瓨鍗犵敤澶э紝浣跨敤纾佺洏鍙互閬垮厤杩欎竴闂銆?/p>
3.绯荤粺鍐峰惎鍔ㄥ悗锛岀鐩樹笂鐨勭紦瀛樹緷鐒跺彲鐢紙鍐呭瓨涓€鏃﹀叧鏈烘暟鎹氨浼氭竻绌猴紝鎸佷箙鍖栧埌纾佺洏涓婂垯涓嶄細锛夈€?/p>
涓婂浘灏卞睍绀轰簡Kafka鏄浣曞啓鍏ユ暟鎹殑锛屾瘡涓€涓狿artition鍏跺疄閮芥槸涓€涓枃浠讹紝鏀跺埌娑堟伅鍚嶬afka浼氭妸鏁版嵁鎻掑叆鍒版枃浠剁殑鏈熬锛堣櫄绾挎鐨勯儴鍒嗭級銆?/p>
浣嗘槸杩欑鏂规硶瀛樺湪涓€涓己闄凤細娌℃湁鍔炴硶鍒犻櫎鏁版嵁銆備竴娆afka鏄笉浼氬垹闄ゆ暟鎹殑锛屽畠鍙細鎶婃墍鏈夌殑鏁版嵁閮戒繚鐣欎笅鏉ワ紝姣忎釜娑堣垂鑰咃紙Consumer锛夊姣忎釜Topic閮芥湁涓€涓猳ffset鐢ㄦ潵琛ㄧず璇诲彇鍒颁簡绗嚑鏉℃暟鎹€?/p>
涓婂浘涓湁涓や釜娑堣垂鑰咃紝Consumer1鏈変袱涓猳ffset鍒嗗埆瀵瑰簲Partition0鍜孭artition1锛堝亣璁炬瘡涓€涓猅opic鏄竴涓狿artition锛夛紱Consumer2鏈変竴涓猳ffset瀵瑰簲Partition2.杩欎釜offset鏄敱瀹㈡埛绔疭KD璐熻矗淇濆瓨鐨勶紝Kafka鐨凚roker瀹屽叏鏃犺杩欎釜涓滆タ鐨勫瓨鍦紱涓€鑸儏鍐典笅SDK浼氭妸瀹冧繚瀛樺埌Zookeeper閲岄潰銆傦紙鎵€浠ラ渶瑕佺粰Consumer鎻愪緵Zookeeper鐨勫湴鍧€锛夈€?/p>
濡傛灉鏁版嵁瀹屽叏涓嶅垹闄わ紝閭d箞鑲畾浼氬鑷寸‖鐩樼垎婊★紝鎵€浠afka鎻愪緵浜嗕袱绉嶇瓥鐣ユ潵鍒犻櫎鏁版嵁锛屼竴鏄熀浜庢椂闂达紝浜屾槸鍩轰簬Partition鏂囦欢澶у皬銆傚叿浣撻厤缃彲浠ュ弬鐪嬪畠鐨勯厤缃枃妗c€?/p>
MMFiles锛圡emory Mapped Files锛?/span>
鍗充究鏄『搴忓啓鍏ョ鐩橈紝纾佺洏鐨勮闂€熷害杩樻槸涓嶅彲鑳借拷涓婂唴瀛樼殑銆傛墍浠afka鐨勬暟鎹苟涓嶆槸瀹炴椂鐨勫啓鍏ョ‖鐩橈紝瀹冨厖鍒嗗埄鐢ㄤ簡鐜颁唬鎿嶄綔绯荤粺鐨勫垎椤靛瓨鍌ㄦ潵鍒╃敤鍐呭瓨锛屼互姝ゆ潵鎻愰珮I/O鏁堢巼銆侻emory Mapped Files锛堝悗闈㈢畝绉癕MAP锛変篃琚炕璇戞垚鍐呭瓨鏄犲皠鏂囦欢锛屽湪64浣嶆搷浣滅郴缁熶腑涓€鑸彲浠ヨ〃绀?0G鐨勬暟鎹枃浠躲€傚畠鐨勫伐浣滃師鐞嗘槸鐩存帴鍒╃敤鎿嶄綔绯荤粺鐨凱age鏉ュ疄鐜版枃浠跺埌鐗╃悊鍐呭瓨鐨勭洿鎺ユ槧灏勩€傚畬鎴愭槧灏勪箣鍚庯紝浣犲鐗╃悊鍐呭瓨鐨勬搷浣滀細琚悓姝ュ埌纭洏涓婏紙鎿嶄綔绯荤粺鍦ㄩ€傚綋鐨勬椂鍊欙級銆?/p>
閫氳繃MMAP锛岃繘绋嬪氨鍙互鍍忚鍐欑‖鐩樹竴鏍疯鍐欏唴瀛橈紙褰撶劧鏄櫄鎷熸満鍐呭瓨锛夛紝涔熶笉蹇呭叧绯诲唴瀛樼殑澶у皬锛屽洜涓烘湁铏氭嫙鍐呭瓨涓烘垜浠厹搴曘€備娇鐢ㄨ繖绉嶆柟寮忓彲浠ヨ幏鍙栧緢澶х殑I/O鎻愬崌锛岀渷鍘讳簡鐢ㄦ埛绌洪棿鍒板唴鏍哥┖闂村鍒剁殑寮€閿€锛堣皟鐢ㄦ枃浠剁殑read浼氭湁鎶婃暟鎹厛鏀惧埌鍐呮牳绌洪棿鐨勫唴瀛樹腑锛岀劧鍚庡啀澶嶅埗鍒扮敤鎴风┖闂寸殑鍐呭瓨涓級銆備絾鏄繖鏍蜂篃鏈変竴涓緢鏄庢樉鐨勭己闄凤細涓嶅彲闈狅紝鍥犱负鍐欏埌MMAP涓殑鏁版嵁骞舵病鏈夎鐪熸鍦板啓鍏ュ埌纭洏涓紝鎿嶄綔绯荤粺浼氬湪绋嬪簭涓诲姩璋冪敤flush鍛戒护鐨勬椂鍊欐墠浼氭妸鏁版嵁鐪熸鍦板啓鍏ュ埌纭洏涓€侹afka鎻愪緵浜嗕竴涓弬鏁皃rducer.type鏉ユ帶鍒舵槸涓嶆槸涓诲姩flush锛屽鏋淜afka鍐欏叆鍒癕MAP涔嬪悗灏辩珛鍗砯lush鐒跺悗鍐嶈繑鍥濸roducer锛屽氨鍙仛鍚屾锛坰ync锛夛紱濡傛灉Kafka鍐欏叆鍒癕MAP涔嬪悗绔嬪嵆杩斿洖Producer涓嶈皟鐢╢lush锛屽氨鍙仛寮傛锛坅sync锛夈€?/p>
MMAP鍏跺疄鏄疞inux涓殑涓€涓嚱鏁帮紝灏辨槸鐢ㄦ潵瀹炵幇鍐呭瓨鏄犲皠鐨勩€侸ava鐨凬IO鎻愪緵浜嗕竴涓狹appedByteBuffer绫绘潵瀹炵幇鍐呭瓨鏄犲皠锛堝洜姝afka鏄簿浜咼ava鐨勫厜锛岃€屼笉鏄疭cala锛夈€?/p>
Kafka鐨勬暟鎹鍙栵紙娑堣垂鑰咃級
涓轰粈涔圞afka浣跨敤纾佺洏鏂囦欢杩樿兘閭d箞蹇?mdash;—涓€涓敤纭洏鐨勬瘮鐢ㄥ唴瀛樼殑杩樺揩锛岃繖缁濆杩濆弽甯歌瘑锛屽洜涓篕afka浣滃紛浜嗭紝鏃犺鏄『搴忓啓鍏ヨ繕鏄疢MAP锛屽叾瀹為兘鏄疜afka浣滃紛鍓嶇殑鍑嗗宸ヤ綔銆?/p>
Zero Copy
Kafka浣跨敤浜嗗熀浜巗endfile鐨刏ero Copy鎻愰珮Web Server闈欐€佹枃浠剁殑閫熷害銆?/p>
浼犵粺妯″紡涓嬶紝浠庣‖鐩樿鍙栦竴涓枃浠舵槸杩欐牱鐨勶細
1.璋冪敤read鍑芥暟锛屾枃浠舵暟鎹copy鍒板唴鏍哥殑缂撳啿鍖猴紙read鏄郴缁熻皟鐢紝鏀惧埌浜咲MA锛屾墍浠ョ敤鍐呮牳绌洪棿锛夈€?/p>
2.read鍑芥暟杩斿洖锛屾枃浠舵暟鎹粠鍐呮牳缂撳啿鍖篶opy鍒扮敤鎴风紦鍐插尯銆?/p>
3.write鍑芥暟璋冪敤锛屽皢鏂囦欢鏁版嵁浠庣敤鎴风紦鍐插尯copy鍒板唴鏍镐笌Socket鐩稿叧鐨勭紦鍐插尯銆?/p>
4.鏁版嵁浠嶴ocket缂撳啿鍖篶opy鍒扮浉鍏冲崗璁紩鎿庯紙缃戝崱锛夈€?/p>
浠ヤ笂缁嗚妭鏄紶缁熺殑read/write鏂瑰紡杩涜缃戠粶浼犺緭鐨勬柟寮忥紝鎴戜滑鍙互鐪嬪埌锛屽湪杩欎釜杩囩▼褰撲腑锛屾枃浠舵暟鎹疄闄呬笂鏄粡杩囦簡鍥涙copy鎿嶄綔锛氱‖鐩?mdash;>鍐呮牳buf—>鐢ㄦ埛buf—>socket鐩稿叧缂撳啿鍖?mdash;>鍗忚寮曟搸銆傝€宻endfile绯荤粺璋冪敤鍒欐槸鎻愪緵浜嗕竴绉嶅噺灏戜互涓婂娆opy锛屾彁鍗囨枃浠朵紶杈撴€ц兘鐨勬柟娉曘€侹afka鍦ㄥ唴鏍哥増鏈?.1涓紝寮曠敤浜唖endfile绯荤粺璋冪敤锛屼互姝ょ畝鍖栫綉缁滀笂鍜屼袱涓湰鍦版枃浠朵箣闂寸殑鏁版嵁浼犺緭銆俿endfile鐨勫紩鍏ヤ笉浠呭噺灏戜簡鏁版嵁澶嶅埗锛岃繕鍑忓皯浜嗕笂涓嬫枃鐨勫垏鎹細sendfile(socket, file, len)銆?/p>
杩愯娴佺▼濡備笅锛?/p>
1.sendfile绯荤粺璋冪敤锛屾枃浠舵暟鎹copy鑷冲唴鏍哥紦鍐插尯銆?/p>
2.鍐嶄粠鍐呮牳缂撳啿鍖篶opy鑷冲唴鏍镐腑socket鐩稿叧鐨勭紦鍐插尯銆?/p>
3.鏈€鍚庡啀socket鐩稿叧鐨勭紦鍐插尯copy鍒板崗璁紩鎿庛€?/p>
鐩歌緝浼犵粺read/write鏂瑰紡锛?.1鐗堟湰鍐呮牳寮曡繘鐨剆endfile宸茬粡鍑忓皯浜嗗唴鏍哥紦鍐插尯鍒皍ser缂撳啿鍖猴紝鍐嶇敱user缂撳啿鍖哄埌socket鐩稿叧缂撳啿鍖虹殑鏂囦欢copy锛岃€屽湪鍐呮牳鐗堟湰2.4涔嬪悗锛屾枃浠舵弿杩扮缁撴灉琚敼鍙橈紝sendfile瀹炵幇浜嗘洿绠€鍗曠殑鏂瑰紡锛屽啀娆″噺灏戜簡涓€娆opy鎿嶄綔銆?/p>
鍦╝pache锛宯ginx锛宭ighttpd绛墂eb鏈嶅姟鍣ㄥ綋涓紝閮芥湁涓€椤箂endfile鐩稿叧鐨勯厤缃紝浣跨敤sendfile鍙互澶у箙鎻愬崌鏂囦欢浼犺緭鎬ц兘銆?/p>
Kafka鎶婃墍鏈夌殑娑堟伅閮藉瓨鏀惧湪涓€涓竴涓殑鏂囦欢涓紝褰撴秷璐硅€呴渶瑕佹暟鎹殑鏃跺€橩afka鐩存帴鎶婃枃浠跺彂閫佺粰娑堣垂鑰咃紝閰嶅悎MMAP浣滀负鏂囦欢璇诲啓鏂瑰紡锛岀洿鎺ユ妸瀹冧紶缁檚endfile銆?/p>
Java鐨凬IO鎻愪緵浜咶ileChannle锛屽畠鐨則ransferTo()鏂规硶鍜宼ransferFrom()鏂规硶灏辨槸Zero Copy銆?/p>
Kafka鐨勬壒閲忓帇缂?/span>
鍦ㄥ緢澶氭儏鍐典笅锛岀郴缁熺殑鐡堕涓嶆槸CPU鎴栫鐩橈紝鑰屾槸缃戠粶IO锛屽浜庨渶瑕佸湪骞垮煙缃戜笂鐨勬暟鎹腑蹇冧箣闂村彂閫佹秷鎭殑鏁版嵁娴佹按绾垮挨鍏跺姝ゃ€傝繘琛屾暟鎹帇缂╀細娑堣€楀皯閲忕殑CPU璧勬簮,涓嶈繃瀵逛簬kafka鑰岃█,缃戠粶IO鏇村簲璇ラ渶瑕佽€冭檻銆?/p>
1.濡傛灉姣忎釜娑堟伅閮藉帇缂╋紝浣嗘槸鍘嬬缉鐜囩浉瀵瑰緢浣庯紝鎵€浠afka浣跨敤浜嗘壒閲忓帇缂╋紝鍗冲皢澶氫釜娑堟伅涓€璧峰帇缂╄€屼笉鏄崟涓秷鎭帇缂┿€?/p>
2.Kafka鍏佽浣跨敤閫掑綊鐨勬秷鎭泦鍚堬紝鎵归噺鐨勬秷鎭彲浠ラ€氳繃鍘嬬缉鐨勫舰寮忎紶杈撳苟涓斿湪鏃ュ織涓篃鍙互淇濇寔鍘嬬缉鏍煎紡锛岀洿鍒拌娑堣垂鑰呰В鍘嬬缉銆?/p>
3.Kafka鏀寔澶氱鍘嬬缉鍗忚锛屽寘鎷珿zip鍜孲nappy鍘嬬缉鍗忚銆?/p>
Kafka閫熷害蹇殑绉樺瘑——浣滃紛
Kafka鎶婃墍鏈夌殑娑堟伅閮藉瓨鏀惧湪涓€涓竴涓殑鏂囦欢涓紝褰撴秷璐硅€呴渶瑕佹暟鎹殑鏃跺€橩afka鐩存帴鎶婃枃浠跺彂閫佺粰娑堣垂鑰呫€傝繖灏辨槸绉樿瘈鎵€鍦紝姣斿锛?0W鐨勬秷鎭粍鍚堝湪涓€璧锋槸10MB鐨勬暟鎹噺锛岀劧鍚嶬afka鐢ㄧ被浼间簬鍙戞枃浠剁殑鏂瑰紡鐩存帴鎵斿嚭鍘讳簡锛屽鏋滄秷璐硅€呭拰鐢熶骇鑰呬箣闂寸殑缃戠粶闈炲父濂斤紙鍙缃戠粶绋嶅井姝e父涓€鐐?0MB鏍规湰涓嶆槸浜嬨€傘€傘€傚閲屼笂缃戦兘鏄?00Mbps鐨勫甫瀹戒簡锛夛紝10MB鍙兘鍙渶瑕?s銆傛墍浠ョ瓟妗堟槸——10W鐨凾PS锛孠afka姣忕閽熷鐞嗕簡10W鏉℃秷鎭€?br />鍙兘浣犱細璇达細涓嶅彲鑳芥妸鏁翠釜鏂囦欢鍙戝嚭鍘诲惂锛熼噷闈㈣繕鏈変竴浜涗笉闇€瑕佺殑娑堟伅鍛紵鏄殑锛孠afka浣滀负涓€涓€愰珮绾т綔寮婂垎瀛愩€戣嚜鐒惰鎶婁綔寮婂仛鐨勬湁閫兼牸銆俍ero Copy瀵瑰簲鐨勬槸sendfile杩欎釜鍑芥暟锛堜互Linux涓轰緥锛夛紝杩欎釜鍑芥暟鎺ュ彈锛?/p>
1.out_fd浣滀负杈撳嚭锛堜竴鑸強鏃秙ocket鐨勫彞鏌勶級銆?/p>
2.in_fd浣滀负杈撳叆鏂囦欢鍙ユ焺銆?/p>
3.off_t琛ㄧずin_fd鐨勫亸绉伙紙浠庡摢閲屽紑濮嬭鍙栵級銆?/p>
4.size_t琛ㄧず璇诲彇澶氬皯涓€?/p>
娌¢敊锛孠afka鏄敤MMAP浣滀负鏂囦欢璇诲啓鏂瑰紡鐨勶紝瀹冨氨鏄竴涓枃浠跺彞鏌勶紝鎵€浠ョ洿鎺ユ妸瀹冧紶缁檚endfile锛涘亸绉讳篃濂借В鍐筹紝鐢ㄦ埛浼氳嚜宸变繚鎸佽繖涓猳ffset锛屾瘡娆¤姹傞兘浼氬彂閫佽繖涓猳ffset銆傦紙杩樿寰楀悧锛熸斁鍦▃ookeeper涓殑锛夛紱鏁版嵁閲忔洿瀹规槗瑙e喅浜嗭紝濡傛灉娑堣垂鑰呮兂瑕佹洿蹇紝灏卞叏閮ㄦ墧缁欐秷璐硅€呫€傚鏋滆繖鏍峰仛涓€鑸儏鍐典笅娑堣垂鑰呰偗瀹氱洿鎺ュ氨琚?strong>鍘嬫浜?/strong>锛涙墍浠afka鎻愪緵浜嗙殑涓ょ鏂瑰紡——Push锛屾垜鍏ㄩ儴鎵旂粰浣犱簡锛屼綘姝讳簡涓嶇鎴戠殑浜嬫儏锛汸ull锛屽ソ鍚т綘鍛婅瘔鎴戜綘闇€瑕佸灏戜釜锛屾垜缁欎綘澶氬皯涓€?/p>
鎬荤粨
Kafka閫熷害鐨勭璇€鍦ㄤ簬锛屽畠鎶婃墍鏈夌殑娑堟伅閮藉彉鎴愪竴涓壒閲忕殑鏂囦欢锛屽苟涓旇繘琛屽悎鐞嗙殑鎵归噺鍘嬬缉锛屽噺灏戠綉缁淚O鐨勬崯鑰楋紝閫氳繃MMAP鎻愰珮I/O鐨勯€熷害銆傚啓鍏ユ暟鎹殑鏃跺€欙紝鐢变簬鍗曚釜Partition锛堝垎鍖猴級鏄湯灏炬坊鍔犵殑鎵€浠ラ€熷害鏈€浼橈紱璇诲彇鏁版嵁鐨勬椂鍊欓厤鍚坰endfile鐩存帴鏆村姏杈撳叆銆傞樋閲岀殑RocketMQ涔熸槸杩欑妯″紡锛屽彧涓嶈繃鏄敤Java鍐欑殑銆?/p>
"浣犲彲浠ヨ糠鑼紝浣嗘槸璇蜂綘涓嶈铏氬害銆?
以上是关于kafka閫熷害蹇殑鍘熷洜的主要内容,如果未能解决你的问题,请参考以下文章
濡備綍浣跨敤 lftp 鏉ュ姞閫?ftp/https 涓嬭浇閫熷害 | Linux 涓浗