±à¼ÍƼö: |
±¾Æª´ÓÏûÏ¢¶ÓÁеÄ×÷Óóö·¢£¬´Ó°¢ÀïË«11¡¢¿ìÊÖ¡¢ÃÀÍÅ¡¢Î¢Ðźì°üµÈ°¸Àý£¬¾ÍÏûÏ¢¶ÓÁб¾ÉíµÄÓÅ»¯·½°¸ºÍÒµÎñ¶ÔÏûÏ¢¶ÓÁеĸßЧÀûÓ㬲ûÊöÁËÏûÏ¢¶ÓÁÐÔڸ߲¢·¢µÄÓÅ»¯³¡¾°ÏµÄ×÷Óã¬Ï£Íû´ËÎĶÔÄúµÄѧϰÓÐËù°ïÖú¡£
À´×ÔÓÚ΢ÐŹ«Õ˺ÅCoderµÄ¼¼Êõ֮·£¬,ÓÉ»ðÁú¹ûÈí¼þLinda±à¼¡¢ÍƼö¡£ |
|
Part1ÊÇʲô£¿ÎªÊ²Ã´£¿
1ʲôÊÇÏûÏ¢¶ÓÁÐ
˵µ½JavaÖеĶÓÁÐÓ¦¸Ã¶¼²»»áİÉú¡£Æä¾ßÓÐͨ¹ýÏȽøÏȳö£¬»òÕßË«¶Ë½ø³öµÄ·½Ê½½øÐÐÊý¾Ý¹ÜÀí£»Í¨¹ý×èÈûÒÔ´ïµ½×Ô¶¯Æ½ºâ¸ºÔصŦÄÜ¡£
ÏûÏ¢¶ÓÁÐÖ®ËùÒÔÒÔ¶ÓÁÐÃüÃû£¬Æð³õÒ²ÊÇÒòΪÆä¹¦ÄܺͲÙ×÷£¬ºÍjavaµÄ±¾µØ¶ÓÁÐÓÐÏàËÆÖ®´¦¡£ËùÒÔ£¬ÎÒÃÇ¿ÉÒÔ¼òµ¥µÄÈÏΪÏûÏ¢¶ÓÁоÍÊÇΪÁËÂú×ã·Ö²¼Ê½Ï¸÷·þÎñÖ®¼äµÄÊý¾Ý´«Êä¡¢¹ÜÀíºÍÏû·ÑµÄÒ»ÖÖÖмä·þÎñ¡£
2ΪʲôҪʹÓÃÏûÏ¢¶ÓÁÐ
ÎÊ£ºÄãÃǵÄϵͳÖÐΪʲôҪÒýÈëÏûÏ¢¶ÓÁУ¿
ÎÒÃÇ×ܹéÐèÒªÖªÏþÏûÏ¢¶ÓÁеÄʹÓüÛÖµ£¬ÒÔ¼°×Ô¼ºµÄÒµÎñ³¡¾°ÏµÄʵ¼ÊÍ´µã²ÅÄܻشðΪʲôҪÓÃÏûÏ¢¶ÓÁÐÕâ¸öÎÊÌ⣬²ÅÄܻشðϵͳÒýÈëÏûÏ¢¶ÓÁеļÛÖµËùÔÚ¡£
ϵͳ¼ä½âñî
ÒÔǰ¼¸ÌìÔÚºǫ́ºÍ¹Ø×¢¹«ºÅµÄÒ»¸ö´óÀÐÌÖÂÛµÄ¹ã¸æÁ÷Ë®¸üеIJÙ×÷ΪÀý£º
 ¹ã¸æ¼ìË÷ϵͳ£¬ÐèÒª¸ÐÖª¹ã¸æÌùµÄÐÅÏ¢±ä¶¯À´¸üÐÂ×Ô¼ºµÄË÷Òý£¬µ«Êµ¼ÊÉϼìË÷ϵͳºÍͶ·Å¡¢ÎïÁÏ¡¢×ʲúµÈϵͳ¼äûÓбØÒªÒÀ¿¿½Ó¿Ú¶Ô¸ÐÖªÐÐΪ½øÐÐÇ¿¹ØÁª£¬Çҽӿڵķ½Ê½ÔÚά»¤ºÍϵͳµÄѹÁ¦·½Ãæ²»ÓѺã¬ÄÇô£¬ÏûÏ¢¶ÓÁеÄ×÷ÓþÍÏԵĺÜÖØÒªÁË£¬¸÷ϵͳ·¢²¼¸÷×ÔµÄÏûÏ¢£¬ËÐèҪ˶©ÔÄ£¬´ïµ½Ä¿µÄͬʱ²»»áÔö¼Ó¶îÍâµÄϵͳµ÷ÓÃѹÁ¦¡££¨×¢£ºbuilderµÄ½Ó¿Úµ÷ÓÃÊÇΪÁË»ñÈ¡×îеÄÐÅÏ¢£¬´Ë´¦¿ÉÒÔͨ¹ýѹËõµÈ·½Ê½½øÐÐÓÅ»¯£©
Òò´Ë£¬µ±ÏµÍ³¼äÎÞʵʱÊý¾Ý½»»¥ÒªÇ󣬵«»¹ÐèÒªÆäÒµÎñÐÅϢʱ£¬¿ÉÒÔÓÃÏûÏ¢¶ÓÁÐÀ´´ïµ½ÏµÍ³¼ä½âñîµÄ×÷Óã¬Ö»Òª·¢²¼·½¶¨ÒåºÃÏûÏ¢¶ÓÁиñʽ£¬Ïû·Ñ·½µÄÈκβÙ×÷¾ù¿ÉºÍ·¢²¼·½Î޹أ¬¼õÉÙÁ˲»±ØÒªµÄÁªµ÷ºÍ·¢²¼³åÍ»µÈÓ°Ïì¡£
·þÎñÒì²½»¯
×îµäÐ͵ÄÒ»¸öÀý×Ó£¬¾ÍÊÇÖ§¸¶³¡¾°ÏµĽá¹û֪ͨ¹¦ÄÜ¡£
ÎÒÃÇÖªµÀ£¬Ò»°ãÇé¿öϲ»¹ÜÊÇapp push »¹ÊǶÌÐÅ֪ͨ£¬¶¼ÊDZȽϺÄʱµÄ²Ù×÷¡£ËùÒÔ£¬Ã»ÓбØÒªÒòΪÕâЩ·ÇºËÐŦÄܵĺÄʱ²Ù×÷¶øÓ°ÏìÁËÖ§¸¶µÄºËÐIJÙ×÷£¬Ö»ÒªÎÒÃÇÔÚÖ§¸¶²Ù×÷Íê³ÉÖ®ºó£¬½«Ö§¸¶½á¹û·¢µ½¶ÌÐÅÖÐÐÄÖ¸¶¨µÄÏûÏ¢topicÏ£¬¶ÌÐÅÖÐÐÄ×ÔÈ»»á½ÓÊÕµ½´ËÏûÏ¢²¢±£Ö¤Í¨Öª¸øÓû§¡£

ͼƬÀ´Ô´ÓÚÖªºõ»Ø´ð
Òò´ËʹÓÃÏûÏ¢¶ÓÁУ¬È÷ǺËÐĵIJÙ×÷Òì²½»¯£¬Ìá¸ßÕû¸öÒµÎñÁ´Â·µÄ¸ßЧºÍÎȶ¨£¬ÊǺÜÓÐЧµÄ¡£
Ï÷·åÌî¹È
Õâ¸ö¹¦ÄÜʹÎÒÃDZ¾Æª¹Ø×¢µÄÖØµã£¬Ãæ¶ÔÌØÊⳡ¾°ÈçÃëɱ¡¢´ºÍíºì°üµÈÍòÒÚ¼¶Á÷Á¿µÄÂö³åʽѹÁ¦Ï£¬Ò»ÖÖ±£»¤ÎÒÃÇϵͳµÄ·þÎñÃâÓÚ±ÀÀ£µÄÓÐЧÊֶξÍÊÇÏûÏ¢¶ÓÁС£
ͨ¹ýÏûÏ¢ÖÐÐĸßÐÔÄܵĴ洢ºÍ´¦ÀíÄÜÁ¦£¬½«³¬¹ýϵͳ´¦ÀíÄÜÁ¦µÄ¶àÓàÁ÷Á¿ÔÝʱ´æ´¢ÆðÀ´£¬²¢ÔÚϵͳ´¦ÀíÄÜÁ¦ÄÚÆ½»ºÊͷųöÀ´£¬´ïµ½Ï÷·åµÄЧ¹û¡£
±ÈÈçÎÒÃÇµÄ¹ã¸æ¼Æ·Ñϵͳ£¬Ãæ¶ÔÉÏÍò²¢·¢µÄÉÌÒµÌù¼ìË÷Á¿£¬Êýǧ²¢·¢µÄµã»÷²Ù×÷£¬ÊµÊ±½Ó¿ÚµÄ·½Ê½Ò»¶¨ÊDz»ºÏÊʵģ¬±Ï¾¹¹ã¸æÐÐΪºÍÖ§¸¶ÐÐΪ²»Ò»Ñù£¬Ö§¸¶Ê§°ÜÓû§»¹¿ÉÒÔÖØÊÔ£¬µ«Óû§µÄÉÌÒµÌùµã»÷ÐÐΪÊDz»¿É»Ø·ÅµÄ£¬±¾´ÎÁ÷Á¿¹ýÈ¥¾Í¹ýÈ¥ÁË£¬Òò´Ë£¬ÐèÒªÀûÓÃÏûÏ¢¶ÓÁн«¿Û·ÑÇëÇ󻺴æÏÂÀ´£¬À´±£Ö¤¼Æ·ÑϵͳµÄÎȶ¨¡£
ÆäËû
»¹Èç¹ã²¥¡¢ÊÂÎñÐÍ¡¢×îÖÕÒ»ÖÂÐÔµÈÌØÐÔ£¬Ò²ÊÇÏûÏ¢¶ÓÁо³£Óõ½µÄ¹¦ÄÜ¡£
3ÏûÏ¢¶ÓÁÐ»á´æÔÚÄÄЩÎÊÌâ
ÒµÎñÉÏÔö¼ÓÏìÓ¦ÑÓ³Ù
Ç°ÃæÌáµ½£¬ÏûÏ¢¶ÓÁÐʹµÃÒµÎñ·ÇºËÐÄÁ÷³ÌÒì²½»¯£¬¿ÉÒÔÌá¸ßÕû¸öÒµÎñ²Ù×÷µÄʱЧÐÔºÍÁ÷³©¶È£¬ÌáÉýÓû§²Ù×÷ÌåÑé¡£µ«£¬Ò²ÊÇÒòΪÊý¾Ý½øÈë¶ÓÁеÄÔÒò£¬²»¿É±ÜÃâµÄ»áµ¢¸éÏû·ÑËÙ¶È¡£µ¼ÖÂÒµÎñÉúЧ²»¼°Ê±¡£
±ÈÈ磬֮ǰÓöµ½µÄÉÌÆ·ÍƼö£¬²úÆ·ÒªÇóÍÆ¼öÁбíÖв»ÄܳöÏÖÂú¼õÃëɱµÄÉÌÆ·£¬ÒÔÏû³ýÌØÊâÉÌÆ·¶ÔÍÆ¼öЧ¹û²úÉúÓ°Ïì¡£³ýÁËÃëɱ£¬ÎÒÃÇ»¹ÐèÒª¸ÐÖªÉÌÆ·µÄÉÏϼܡ¢ºÚÃûµ¥¡¢¿â´æµÈµÈ£¬Òò´Î£¬ÓÃredisÖеÄbit¶à¸öÆ«ÒÆÁ¿À´Î¬»¤Ò»¸öÉÌÆ·µÄ¶à¸ö״̬¡£È»ºó½ÓÊÕ´ÙÏú×éµÄÏûÏ¢À´±ä¸üÍÆ¼ö»º´æ¼¯ÈºÖеÄÉÌÆ·×´Ì¬£¬µ«ÓÉÓÚÏûÏ¢µÄÑÓ³Ù£¬¾ÍÓпÉÄܵ¼ÖÂÉÌÆ·×´Ì¬±ä¸ü²»¼°Ê±µÄÇé¿ö·¢Éú¡£²»¹ýֻҪȨºâÖ®ÏÂÒµÎñºÍ¼¼ÊõÉÏÊǿɽÓÊܵľÍOKÁË¡£
¼Ü¹¹ÉÏÒýÈë²»Îȶ¨ÒòËØ
ÏûÏ¢¶ÓÁеÄÒýÈ룬Ï൱ÓÚÔÚÔÓеķֲ¼Ê½·þÎñÁ´Â·ÖÐÐÂÔöÁËÒ»¸öϵͳ£¬ÏµÍ³¸´ÔÓ¶ÈÒ²ËæÖ®±ä´óÁË¡£Í¬Ê±£¬ÏûÏ¢¶ÓÁеÄ×÷ÓÃÒªÇóÆä¾ßÓиßÐÔÄܺ͸߿ÉÓá£
ËùÒÔ£¬Ãæ¶ÔÔõÑù²¿Êð¸ß¿ÉÓÃÎȶ¨¼¯Èº¡¢ÏûÏ¢·¢ËͲ»³É¹¦ÔõÃ´ÖØÊÔ¡¢brokerÊý¾Ýͬ²½²ßÂÔÔõôÉèÖá¢brokerÒì³£µ¼ÖÂÏûÏ¢ÖØ·¢ÔõôÃݵȡ¢Ïû·Ñ²»³É¹¦ÔõÃ´ÖØÊԵȵÈÎÊÌ⣬ÐèÒªÖмä¼þÍŶӺÍÒµÎñϵͳһÆðŬÁ¦Ó¦¶Ô¡£
Part2ÔõôÑù£¿
4Ö§³ÅÆßÄêË«11Áã¹ÊÕϵÄRocketMQ
2020 Äê˫ʮһ½»Ò×·åÖµ´ïµ½ 58.3W ±Ê/Ãë¡£RocketMQΪÁ˰¢ÀïµÄ½»Ò×Éú̬ÓкܶàÉî¶È¶¨ÖÆ£¬ÕâÀïÎÒÃÇÖ»½éÉÜÆäÖÐÕë¶Ô¸ß¿ÉÓõÄÓÅ»¯¡£
¸öÈËÀí½â£¬pushÏû·ÑģʽֻÊʺÏÓÚÏû·ÑËÙ¶ÈÔ¶´óÓÚÉú²úËٶȵij¡¾°£¬Èç¹ûÊÇ´óÁ÷Á¿²¢·¢³¡¾°£¬»ù±¾»¹ÊÇÒÔPullÏû·ÑΪÖ÷¡£
¶øpullǰbrokerºÍclient¼ä»á½øÐиºÔؾùºâ½¨Á¢Á¬½Ó£¬ÄÇô£¬Ò»µ©Client±»Hangס,(ûÓÐ崾Ͳ»»árebalance£¬¼´Ê±å´»úÒ²ÊÇĬÈÏ20s²Å»árebalance)£¬¾Í»áÈÃbrokerÓë¸Ãclient¹ØÁªµÄ¶ÓÁÐÏûÏ¢ÎÞ·¨¼°Ê±±»Ïû·Ñ£¬µ¼Ö»ýѹ¡£Ôõô°ì£ºPOP£¬ÐµÄÏû·Ñģʽ

POP Ïû·ÑÖв¢²»ÐèÒªrebalanceÈ¥·ÖÅäÏû·Ñ¶ÓÁУ¬È¡¶ø´úÖ®µÄÊÇÇëÇóËùÓÐµÄ broker »ñÈ¡ÏûÏ¢½øÐÐÏû·Ñ¡£broker
ÄÚ²¿»á°Ñ×ÔÉíµÄÈý¸ö¶ÓÁеÄÏûÏ¢¸ù¾ÝÒ»¶¨µÄËã·¨·ÖÅ䏸µÈ´ýµÄ POPClient¡£¼´Ê¹ PopClient
2 ³öÏÖ hang£¬µ«ÄÚ²¿¶ÓÁеÄÏûÏ¢Ò²»áÈà Pop Client1 ºÍ Pop Client2 ½øÐÐÏû·Ñ¡£ÕâÑù±ÜÃâÁËÏû·Ñ¶Ñ»ý¡£[1]
5¿ìÊÖÍòÒÚ¼¶kafka¼¯ÈºµÄƽ»¬À©ÈÝ[2]
ҪʵÏÖÆ½»¬£¬ÔòÐèÒªÈÃproducerÎ޸еÄʵÏÖpartitionÇ¨ÒÆ¡£
´óÖÂÔÀíÊǽ«´ýÇ¨ÒÆpartitionµÄÊý¾ÝºÍеÄpartitionÊý¾Ý½øÐÐͬ²½²¢³ÖÐøÒ»¶Îʱ¼ä£¬Ö±µ½Ïû·ÑÕßÈ«²¿¸ÏÉÏͬ²½µÄ¿ªÊ¼½Úµã£¬È»ºóÔÙ±ä¸ü·ÓÉ£¬É¾³ýÔpartition£¬Íê³ÉÇ¨ÒÆ¡£

ÏàͬµÄÊý¾Ýͬ²½Ë¼Â·£¬ÔÚfacebookµÄ·Ö²¼Ê½¶ÓÁÐÔÖ±¸·½°¸ÉÏÒ²ÓÐÓ¦Óá£
6¿ìÊÖ/ÃÀÍŶÔkafka»º´æÎÛȾµÄÓÅ»¯[3]
kafkaµÄ¸ßÐÔÄÜ£¬À´Ô´ÓÚ˳ÐòÎļþ¶ÁдºÍ²Ù×÷ϵͳ»º´æpagecacheµÄÖ§³Ö£¬ÔÚµ¥partition£¬µ¥consumerµÄ³¡¾°Ï£¬kafka±íÏֵķdz£ÓÅÐã¡£µ«ÊÇ£¬Èç¹ûͬһ»úÆ÷ÉÏ£¬´æÔÚ²»Í¬µÄpartition,ÉõÖÁ£¬Ïû·ÑģʽÓÐʵʱºÍÑÓ³ÙÏû·ÑµÄ»ìºÏ³¡¾°£¬½«»á³öÏÖPageCache×ÊÔ´¾ºÕù£¬µ¼Ö»º´æÎÛȾ£¬Ó°ÏìbrokerµÄ·þÎñµÄ´¦ÀíЧÂÊ¡£
ÃÀÍÅÓ¦¶Ôʵʱ/ÑÓ³ÙÏû·Ñ»º´æÎÛȾ
½«Êý¾Ý°´ÕÕʱ¼äά¶È·Ö²¼ÔÚ²»Í¬µÄÉ豸ÖУ¬½üʵʱ²¿·ÖµÄÊý¾Ý»º´æÔÚ SSD ÖУ¬ÕâÑùµ±³öÏÖ PageCache
¾ºÕùʱ£¬ÊµÊ±Ïû·Ñ×÷Òµ´Ó SSD ÖжÁÈ¡Êý¾Ý£¬±£Ö¤ÊµÊ±×÷Òµ²»»áÊܵ½ÑÓ³ÙÏû·Ñ×÷ÒµÓ°Ïì  µ±Ïû·ÑÇëÇóµ½´ï
Broker ʱ£¬Broker Ö±½Ó¸ù¾ÝÆäά»¤µÄÏûÏ¢Æ«ÒÆÁ¿ºÍÉ豸µÄ¹ØÏµ´Ó¶ÔÓ¦µÄÉ豸ÖлñÈ¡Êý¾Ý²¢·µ»Ø£¬²¢ÇÒÔÚ¶ÁÇëÇóÖв¢²»»á½«
HDD ÖжÁÈ¡µÄÊý¾Ý»ØË¢µ½ SSD£¬·ÀÖ¹³öÏÖ»º´æÎÛȾ¡£Í¬Ê±·ÃÎÊ·¾¶Ã÷È·£¬²»»áÓÉÓÚ Cache Miss
¶ø²úÉúµÄ¶îÍâ·ÃÎÊ¿ªÏú¡£
¿ìÊÖÓ¦¶ÔfollowerÊý¾Ýͬ²½ÒýÆðµÄ»º´æÎÛȾ
 broker ÖÐÒýÈëÁËÁ½¸ö¶ÔÏó£ºÒ»¸öÊÇ block cache£»ÁíÒ»¸öÊÇ flush queue¡£
Producer µÄдÈëÇëÇóÔÚ broker ¶ËÊ×ÏȻᱻÒÔÔ message µÄÐÎʽдÈë flush
queue ÖУ¬Ö®ºóÔÙ½«Êý¾ÝдÈëµ½ block cache µÄÒ»¸ö block ÖУ¬Ö®ºóÕû¸öÇëÇó¾Í½áÊøÁË¡£ÔÚ
flush queue ÖеÄÊý¾Ý»áÓÉÆäËûÏß³ÌÒì²½µØÐ´Èëµ½´ÅÅÌÖУ¨»á¾Àú page cache ¹ý³Ì£©¡£±£Ö¤queue²»ÊÜfollowerµÄÓ°Ïì
consumer Ê×ÏÈ»á´Ó block cache ÖмìË÷Êý¾Ý£¬Èç¹ûÃüÖУ¬ÔòÖ±½Ó·µ»Ø¡£·ñÔò£¬Ôò´Ó´ÅÅ̶ÁÈ¡Êý¾Ý¡£ÕâÑùµÄ¶Áȡģʽ±£ÕÏÁË
consumer µÄ cache miss ¶Á²¢²»»áÌî³ä block cache£¬´Ó¶ø±ÜÃâÁ˲úÉúÎÛȾ¡£
×ܽá
ÎÒÃÇ¿ÉÒÔ¿´³ö£¬½â¾ö»º´æÎÛȾµÄ»ù±¾³ö·¢µã£¬»¹ÊÇÒª²ð½â²»Í¬Ïû·ÑËٶȵÄÈÎÎñ¡¢»ò²»Í¬µÄÊý¾ÝÉú²úÀ´Ô´£¬·Ö¶øÖÎÖ®µÄ˼·±ÜÃâÏ໥¼ä»º´æµÄÓ°Ïì¡£
7CMQÔÚºì°üÖ§¸¶³¡¾°ÏµÄÓ¦ÓÃ[4]
 ºì°ü²Ù×÷µÄ±³ºóÁ÷³Ì¼ò»¯Îª£º´Ó A ÕʺÅÖаÑÓà¶î¶Á³öÀ´£¬È»ºó×ö¼õ·¨²Ù×÷£¬Ôٰѽá¹ûд»Ø A ÕʺÅÖУ»È»ºó²ðºì°ü¶Ô
B ÕʺÅ×ö¼Ó·¨²Ù×÷£¬°Ñ½á¹ûдµ½ B ÕʺÅÖС£
¶øÓÉÓÚÕËÎñϵͳÄܳÐÔØµÄѹÁ¦ÓÐÏÞ(ºÍÕËÎñÏà¹ØµÄϵͳһ°ã¶¼»áÓÉÓÚËø¡¢ÊÂÎñµÈÔÒòÓ°Ïì´¦ÀíЧÂÊ)£¬¿ÉÄܵ¼ÖÂÈëÕËʧ°Ü£¬Èç¹û°´ÊµÊ±ÒµÎñÂß¼£¬ÔòÐèÒª¶Ô²ðºì°ü½øÐÐʵʱ»Ø¹ö(»Ø¹öÐèÒª¶ÔAµÄÕË»§ÔÙ½øÐÐÒ»´Î¼Ó·¨)£¬¶øÒýÈëCMQºó£¬ÒµÎñÁ´Â·±ä³É½«Ê§°ÜµÄÇëÇóдÈëCMQ£¬ÓÉCMQµÄ¸ß¿ÉÓÃÀ´±£Ö¤Êý¾ÝÒ»Ö£¬Ö±µ½ÕËÎñϵͳ×îÖÕÈëÕ˳ɹ¦¡£¼ò»¯ÁËÕËÎñϵͳÓÉÓÚϵͳѹÁ¦¶øµ¼ÖµÄÈëÕËʧ°Ü¶øµ¼Öºì°üÕËÎñ»Ø¹ö´øÀ´µÄ¶îÍâϵͳ²Ù×÷¡£
Part3×ܽá
±¾Æª´ÓÏûÏ¢¶ÓÁеÄ×÷Óóö·¢£¬´Ó°¢ÀïË«11¡¢¿ìÊÖ¡¢ÃÀÍÅ¡¢Î¢Ðźì°üµÈ°¸Àý£¬¾ÍÏûÏ¢¶ÓÁб¾ÉíµÄÓÅ»¯·½°¸ºÍÒµÎñ¶ÔÏûÏ¢¶ÓÁеĸßЧÀûÓ㬲ûÊöÁËÏûÏ¢¶ÓÁÐÔڸ߲¢·¢µÄÓÅ»¯³¡¾°ÏµÄ×÷Óᣠ|