| ±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚaliyun£¬ÎÄÕÂRocketMQµÄÌØµã¡¢ÍøÂ粿Ê𡢹ؼüÌØÐÔ£¬ÒÔ¼°Consumer×î¼Ñʵ¼ùµÈÏà¹ØÄÚÈÝ¡£ |
|
RocketMQÊÇÒ»¿î·Ö²¼Ê½¡¢¶ÓÁÐÄ£Ð͵ÄÏûÏ¢Öмä¼þ£¬¾ßÓÐÒÔÏÂÌØµã£º
Äܹ»±£Ö¤ÑϸñµÄÏûϢ˳Ðò
Ìṩ·á¸»µÄÏûÏ¢Àȡģʽ
¸ßЧµÄ¶©ÔÄÕßˮƽÀ©Õ¹ÄÜÁ¦
ʵʱµÄÏûÏ¢¶©ÔÄ»úÖÆ
ÒÚ¼¶ÏûÏ¢¶Ñ»ýÄÜÁ¦
RocketMQÍøÂ粿ÊðÌØ

£¨1£©NameServerÊÇÒ»¸ö¼¸ºõÎÞ״̬µÄ½Úµã£¬¿É¼¯Èº²¿Ê𣬽ڵãÖ®¼äÎÞÈκÎÐÅϢͬ²½
£¨2£©Broker²¿ÊðÏà¶Ô¸´ÔÓ£¬Broker·ÕΧMasterÓëSlave£¬Ò»¸öMaster¿ÉÒÔ¶ÔÓ¦¶à¸öSlaver£¬µ«ÊÇÒ»¸öSlaverÖ»ÄܶÔÓ¦Ò»¸öMaster£¬MasterÓëSlaverµÄ¶ÔÓ¦¹ØÏµÍ¨¹ýÖ¸¶¨ÏàͬµÄBrokerName£¬²»Í¬µÄBrokerIdÀ´¶¨Ò壬BrokerIdΪ0±íʾMaster£¬·Ç0±íʾSlaver¡£Master¿ÉÒÔ²¿Êð¶à¸ö¡£Ã¿¸öBrokerÓëNameServer¼¯ÈºÖеÄËùÓнڵ㽨Á¢³¤Á¬½Ó£¬¶¨Ê±×¢²áTopicÐÅÏ¢µ½ËùÓеÄNameServer
£¨3£©ProducerÓëNameServer¼¯ÈºÖÐµÄÆäÖÐÒ»¸ö½Úµã£¨Ëæ»úÑ¡Ôñ£©½¨Á¢³¤Á¬½Ó£¬¶¨ÆÚ´ÓNameServerÈ¡Topic·ÓÉÐÅÏ¢£¬²¢ÏòÌṩTopic·þÎñµÄMaster½¨Á¢³¤Á¬½Ó£¬ÇÒ¶¨Ê±ÏòMaster·¢ËÍÐÄÌø¡£ProduceÍêÈ«ÎÞ״̬£¬¿É¼¯Èº²¿Êð
£¨4£©ConsumerÓëNameServer¼¯ÈºÖÐµÄÆäÖÐÒ»¸ö½Úµã£¨Ëæ»úÑ¡Ôñ£©½¨Á¢³¤Á¬½Ó£¬¶¨ÆÚ´ÓNameServerÈ¡Topic·ÓÉÐÅÏ¢£¬²¢ÏòÌṩTopic·þÎñµÄMaster¡¢Slaver½¨Á¢³¤Á¬½Ó£¬ÇÒ¶¨Ê±ÏòMaster¡¢Slaver·¢ËÍÐÄÌø¡£Consumer¼´¿É´ÓMaster¶©ÔÄÏûÏ¢£¬Ò²¿ÉÒÔ´ÓSlave¶©ÔÄÏûÏ¢£¬¶©ÔĹæÔòÓÉBrokerÅäÖþö¶¨
RocketMQ´¢´æÌصã
£¨1£©Á㿽±´ÔÀí£ºConsumerÏû·ÑÏûÏ¢¹ý³Ì£¬Ê¹ÓÃÁËÁ㿽±´£¬Á㿽±´°üÀ¨Ò»ÏÂ2Öз½Ê½£¬RocketMQʹÓõÚÒ»ÖÖ·½Ê½£¬ÒòС¿éÊý¾Ý´«ÊäµÄÒªÇóЧ¹û±Èsendfile·½Ê½ºÃ
a )ʹÓÃmmap+write·½Ê½
Óŵ㣺¼´Ê¹Æµ·±µ÷Óã¬Ê¹ÓÃСÎļþ¿é´«Ê䣬ЧÂÊÒ²ºÜ¸ß
ȱµã£º²»ÄܺܺõÄÀûÓÃDMA·½Ê½£¬»á±Èsendfile¶àÏûºÄCPU×ÊÔ´£¬Äڴ氲ȫÐÔ¿ØÖƸ´ÔÓ£¬ÐèÒª±ÜÃâJVM
CrashÎÊÌâ
b£©Ê¹ÓÃsendfile·½Ê½
Óŵ㣺¿ÉÒÔÀûÓÃDMA·½Ê½£¬ÏûºÄCPU×ÊÔ´ÉÙ£¬´ó¿éÎļþ´«ÊäЧÂʸߣ¬ÎÞÄڴ氲ȫÐÂÎÊÌâ
ȱµã£ºÐ¡¿éÎļþЧÂʵÍÓÚmmap·½Ê½£¬Ö»ÄÜÊÇBIO·½Ê½´«Ê䣬²»ÄÜʹÓÃNIO
£¨2£©Êý¾Ý´æ´¢½á¹¹

RocketMQ¹Ø¼üÌØÐÔ
1.µ¥»úÖ§³Ö1WÒÔÉϵij־û¯¶Ó

£¨1£©ËùÓÐÊý¾Ýµ¥¶À´¢´æµ½commit Log £¬Íêȫ˳Ðòд£¬Ëæ»ú¶Á
£¨2£©¶Ô×îÖÕÓû§Õ¹ÏֵĶÓÁÐʵ¼ÊÖ»´¢´æÏûÏ¢ÔÚCommit Log µÄλÖÃÐÅÏ¢£¬²¢ÇÒ´®Ðз½Ê½Ë¢ÅÌ
ÕâÑù×öµÄºÃ´¦£º
£¨1£©¶ÓÁÐÇáÁ¿»¯£¬µ¥¸ö¶ÓÁÐÊý¾ÝÁ¿·Ç³£ÉÙ
£¨2£©¶Ô´ÅÅ̵ķÃÎÊ´®Ðл°£¬±ÜÃâ´ÅÅ̾ºÕù£¬²»»áÒòΪ¶ÓÁÐÔö¼Óµ¼ÖÂIOWaitÔö¸ß
ÿ¸ö·½°¸¶¼ÓÐÓÅȱµã£¬ËûµÄȱµãÊÇ£º
£¨1£©Ð´ËäÈ»ÊÇ˳Ðòд£¬µ«ÊǶÁÈ´±ä³ÉÁËËæ»ú¶Á
£¨2£©¶ÁÒ»ÌõÏûÏ¢£¬»áÏȶÁConsume Queue£¬ÔÙ¶ÁCommit Log£¬Ôö¼ÓÁË¿ªÏú
£¨3£©Òª±£Ö¤Commit Log Óë Consume QueueÍêÈ«µÄÒ»Ö£¬Ôö¼ÓÁ˱à³ÌµÄ¸´ÔÓ¶È
ÒÔÉÏȱµãÈçºÎ¿Í·þ£º
£¨1£©Ëæ»ú¶Á£¬¾¡¿ÉÄÜÈöÁÃüÖÐpagecache£¬¼õÉÙIO²Ù×÷£¬ËùÒÔÄÚ´æÔ½´óÔ½ºÃ¡£Èç¹ûϵͳÖжѻýµÄÏûÏ¢¹ý¶à£¬¶ÁÊý¾ÝÒª·ÃÎÊÓ²Å̻᲻»áÓÉÓÚËæ»ú¶Áµ¼ÖÂϵͳÐÔÄܼ±¾çϽµ£¬´ð°¸ÊÇ·ñ¶¨µÄ¡£
a£©·ÃÎÊpagecacheʱ£¬¼´Ê¹Ö»·ÃÎÊ1KµÄÏûÏ¢£¬ÏµÍ³Ò²»áÌáǰԤ¶Á³ö¸ü¶àµÄÊý¾Ý£¬ÔÚÏ´ζÁʱ¾Í¿ÉÄÜÃüÖÐpagecache
b£©Ëæ»ú·ÃÎÊCommit Log ´ÅÅÌÊý¾Ý£¬ÏµÍ³IOµ÷¶ÈËã·¨ÉèÖÃΪNOOP·½Ê½£¬»áÔÚÒ»¶¨³Ì¶ÈÉϽ«ÍêÈ«µÄËæ»ú¶Á±ä³É˳ÐòÌøÔ¾·½Ê½£¬¶øË³ÐòÌøÔ¾·½Ê½¶Á½ÏÍêÈ«µÄËæ»ú¶ÁÐÔÄܸß5±¶
£¨2£©ÓÉÓÚConsume Queue´æ´¢ÊýÁ¿¼«ÉÙ£¬¶øÇÒ˳Ðò¶Á£¬ÔÚpagecacheµÄÓë¶ÁÈ¡Çé¿öÏ£¬Consume
QueueµÄ¶ÁÐÔÄÜÓëÄڴ漸ºõÒ»Ö±£¬¼´Ê¹¶Ñ»ýÇé¿öÏ¡£ËùÒÔ¿ÉÒÔÈÏΪConsume QueueÍêÈ«²»»á×è°¶ÁÐÔÄÜ
£¨3£©Commit LogÖд洢ÁËËùÓеÄÔªÐÅÏ¢£¬°üº¬ÏûÏ¢Ì壬ÀàËÆÓÚMySQl¡¢OracleµÄredolog£¬ËùÒÔÖ»ÒªÓÐCommit
Log´æÔÚ£¬ Consume Queue¼´Ê¹¶ªÊ§Êý¾Ý£¬ÈÔ¿ÉÒÔ»Ö¸´³öÀ´
2.Ë¢Å̲ßÂÔ
rocketmqÖеÄËùÓÐÏûÏ¢¶¼Êdz־û¯µÄ£¬ÏÈдÈëϵͳpagecache£¬È»ºóË¢ÅÌ£¬¿ÉÒÔ±£Ö¤ÄÚ´æÓë´ÅÅ̶¼ÓÐÒ»·ÝÊý¾Ý£¬·ÃÎÊʱ£¬¿ÉÒÔÖ±½Ó´ÓÄÚ´æ¶ÁÈ¡
2.1Ò첽ˢÅÌ
ÔÚÓÐ RAID ¿¨£¬ SAS 15000 ת´ÅÅ̲âÊÔ˳ÐòдÎļþ£¬ËÙ¶È¿ÉÒÔ´ïµ½ 300M ÿÃë×óÓÒ£¬¶øÏßÉϵÄÍø¿¨Ò»°ã¶¼ÎªÇ§Õ×Íø¿¨£¬Ð´´ÅÅÌËÙ¶ÈÃ÷ÏÔ¿ìÓÚÊý¾ÝÍøÂçÈë¿ÚËÙ¶È£¬ÄÇôÊÇ·ñ¿ÉÒÔ×öµ½Ð´Íê
ÄÚ´æ¾ÍÏòÓû§·µ»Ø£¬Óɺǫ́Ïß³ÌË¢ÅÌÄØ£¿
(1). ÓÉÓÚ´ÅÅÌËÙ¶È´óÓÚÍø¿¨ËÙ¶È£¬ÄÇôˢÅ̵Ľø¶È¿Ï¶¨¿ÉÒÔ¸úÉÏÏûÏ¢µÄдÈëËÙ¶È¡£
(2). ÍòÒ»ÓÉÓÚ´ËʱϵͳѹÁ¦¹ý´ó£¬¿ÉÄܶѻýÏûÏ¢£¬³ýÁËдÈë IO£¬»¹ÓжÁÈ¡ IO£¬ÍòÒ»³öÏÖ´ÅÅ̶ÁÈ¡ÂäºóÇé¿ö£¬»á²»»áµ¼ÖÂϵͳÄÚ´æÒç³ö£¬´ð°¸ÊÇ·ñ¶¨µÄ£¬ÔÒòÈçÏ£º
a) дÈëÏûÏ¢µ½ PAGECACHE ʱ£¬Èç¹ûÄÚ´æ²»×㣬Ôò³¢ÊÔ¶ªÆú¸É¾»µÄ PAGE£¬ÌÚ³öÄڴ湩ÐÂÏûϢʹÓ㬲ßÂÔÊÇ
LRU ·½Ê½¡£
b) Èç¹û¸É¾»Ò³²»×㣬´ËʱдÈë PAGECACHE »á±»×èÈû£¬ÏµÍ³³¢ÊÔË¢Å̲¿·ÖÊý¾Ý£¬´óԼÿ´Î³¢ÊÔ
32 ¸ö PAGE£¬À´ÕÒ³ö¸ü¶à¸É¾» PAGE¡£
×ÛÉÏ£¬ÄÚ´æÒç³öµÄÇé¿ö²»»á³öÏÖ
2.2ͬ²½Ë¢ÅÌ£º
ͬ²½Ë¢ÅÌÓëÒ첽ˢÅ̵ÄÎ¨Ò»Çø±ðÊÇÒ첽ˢÅÌдÍê PAGECACHE Ö±½Ó·µ»Ø£¬¶øÍ¬²½Ë¢ÅÌÐèÒªµÈ´ýË¢ÅÌÍê³É²Å·µ»Ø£¬Í¬²½Ë¢ÅÌÁ÷³ÌÈçÏ£º
£¨1£©Ð´Èë PAGECACHE ºó£¬Ï̵߳ȴý£¬Í¨ÖªË¢ÅÌÏß³ÌË¢ÅÌ¡£
£¨2£©Ë¢ÅÌÏß³ÌË¢Å̺󣬻½ÐÑǰ¶ËµÈ´ýỊ̈߳¬¿ÉÄÜÊÇÒ»ÅúÏ̡߳£
£¨3£©Ç°¶ËµÈ´ýÏß³ÌÏòÓû§·µ»Ø³É¹¦¡£

3.ÏûÏ¢²éѯ
3.1°´ÕÕMessageId²éѯÏûÏ¢

MsgId×ܹ²16¸ö×Ö½Ú£¬°üº¬ÏûÏ¢´¢´æÖ÷»úµØÖ·£¬ÏûÏ¢Commit Log Offset¡£´ÓMsgIdÖнâÎö³öBrokerµÄµØÖ·ºÍCommit
Log Æ«ÒÆµØÖ·£¬È»ºó°´ÕÕ´æ´¢¸ñʽËùÔÚλÖÃÏûÏ¢buffer½âÎö³ÉÒ»¸öÍêÕûÏûÏ¢
3.2°´ÕÕMessage Key²éѯÏûÏ¢

1.¸ù¾Ý²éѯµÄkeyµÄhashcode%slotNumµÃµ½¾ßÌåµÄ²ÛλÖà £¨slotNumÊÇÒ»¸öË÷ÒýÎļþÀïÃæ°üº¬µÄ×î´ó²ÛÄ¿ÊýÄ¿£¬ÀýÈçͼÖÐËùʾslotNum=500W£©
2.¸ù¾ÝslotValue£¨slot¶ÔӦλÖõÄÖµ£©²éÕÒµ½Ë÷ÒýÏîÁбíµÄ×îºóÒ»Ïµ¹ÐòÅÅÁУ¬slotValue×ÜÊÇÖ¸Ïò×îеÄÒ»¸öË÷ÒýÏ
3.±éÀúË÷ÒýÏîÁÐ±í·µ»Ø²éѯʱ¼ä·¶Î§ÄڵĽá¹û¼¯£¨Ä¬ÈÏÒ»´Î×î´ó·µ»ØµÄ32Ìõ¼Ç¼£©
4.Hash³åÍ»£¬Ñ°ÕÒkeyµÄslotλÖÃʱÏ൱ÓÚÖ´ÐÐÁËÁ½´ÎÉ¢Áк¯Êý£¬Ò»´ÎkeyµÄhash£¬Ò»´ÎkeyµÄhashȡֵ죬Òò´ËÕâÀï´æÔÚÁ½´Î³åÍ»µÄÇé¿ö£»µÚÒ»ÖÖ£¬keyµÄhashÖµ²»Í¬µ«Ä£ÊýÏàͬ£¬´Ëʱ²éѯµÄʱºò»áÔڱȽϵÚÒ»´ÎkeyµÄhashÖµ£¨Ã¿¸öË÷ÒýÏî±£´æÁËkeyµÄhashÖµ£©£¬¹ýÂ˵ôhashÖµ²»ÏëµÈµÄÇé¿ö¡£µÚ¶þÖÖ£¬hashÖµÏàµÈkey²»ÏëµÈ£¬³öÓÚÐÔÄܵĿ¼ÂdzåÍ»µÄ¼ì²â·Åµ½¿Í»§¶Ë´¦Àí£¨keyµÄÔʼֵÊÇ´æ´¢ÔÚÏûÏ¢ÎļþÖе쬱ÜÃâ¶ÔÊý¾ÝÎļþµÄ½âÎö£©£¬¿Í»§¶Ë±È½ÏÒ»´ÎÏûÏ¢ÌåµÄkeyÊÇ·ñÏàͬ
5.´æ´¢£¬ÎªÁ˽ÚÊ¡¿Õ¼äË÷ÒýÏîÖд洢µÄʱ¼äÊÇʱ¼ä²îÖµ£¨´æ´¢Ê±¼ä¡ª¡ª¿ªÊ¼Ê±¼ä£¬¿ªÊ¼Ê±¼ä´æ´¢ÔÚË÷ÒýÎļþÍ·ÖУ©£¬Õû¸öË÷ÒýÎļþÊǶ¨³¤µÄ£¬½á¹¹Ò²Êǹ̶¨µÄ
4.·þÎñÆ÷ÏûÏ¢¹ýÂË
RocketMQµÄÏûÏ¢¹ýÂË·½Ê½ÓбðÓÚÆäËûµÄÏûÏ¢Öмä¼þ£¬ÊÇÔÚ¶©ÔÄʱ£¬ÔÙ×ö¹ýÂË£¬ÏÈÀ´¿´ÏÂConsume
Queue´æ´¢½á¹¹

1.ÔÚBroker¶Ë½øÐÐMessage Tag±È½Ï£¬ÏȱéÀúConsume Queue£¬Èç¹û´æ´¢µÄMessage
TagÓë¶©ÔĵÄMessage Tag²»·ûºÏ£¬ÔòÌø¹ý£¬¼ÌÐø±È¶ÔÏÂÒ»¸ö£¬·ûºÏÔò´«Ê䏸Consumer¡£×¢ÒâMessage
TagÊÇ×Ö·û´®ÐÎʽ£¬Consume QueueÖд洢µÄÊÇÆä¶ÔÓ¦µÄhashcode£¬±È¶ÔʱҲÊDZȶÔhashcode
2.ConsumerÊÕµ½¹ýÂËÏûÏ¢ºó£¬Í¬ÑùÒ²ÒªÖ´ÐÐÔÚbroker¶ËµÄ²Ù×÷£¬µ«ÊDZȶԵÄÊÇÕæÊµµÄMessage
Tag×Ö·û´®£¬¶ø²»ÊÇhashcode
Ϊʲô¹ýÂËÒªÕâô×ö£¿
1.Message Tag´æ´¢hashcode£¬ÊÇΪÁËÔÚConsume Queue¶¨³¤·½Ê½´æ´¢£¬½ÚÔ¼¿Õ¼ä
2.¹ýÂ˹ý³ÌÖв»»á·ÃÎÊCommit Log Êý¾Ý£¬¿ÉÒÔ±£Ö¤¶Ñ»ýÇé¿öÏÂÒ²ÄܸßЧ¹ýÂË
3.¼´Ê¹´æÔÚhash³åÍ»£¬Ò²¿ÉÒÔÔÚConsumer¶Ë½øÐÐÐÞÕý£¬±£Ö¤ÍòÎÞһʧ
5.µ¥¸öJVM½ø³ÌÒ²ÄÜÀûÓûúÆ÷³¬´óÄÚ´æ

1.Producer·¢ËÍÏûÏ¢£¬ÏûÏ¢´Ósocket½øÈëjava ¶Ñ
2.Producer·¢ËÍÏûÏ¢£¬ÏûÏ¢´Ójava¶Ñ½øÈëpagecache£¬ÎïÀíÄÚ´æ
3.Producer·¢ËÍÏûÏ¢£¬ÓÉÒì²½Ïß³ÌË¢ÅÌ£¬ÏûÏ¢´ÓpagecacheË¢Èë´ÅÅÌ
4.ConsumerÀÏûÏ¢£¨Õý³£Ïû·Ñ£©£¬ÏûÏ¢Ö±½Ó´Ópagecache£¨Êý¾ÝÔÚÎïÀíÄڴ棩תÈësocket£¬µ½´ïConsumer£¬²»¾¹ýjava¶Ñ¡£ÕâÖÖÏû·Ñ³¡¾°×î¶à£¬ÏßÉÏ96GÎïÀíÄڴ棬°´ÕÕ1KÏûÏ¢Ë㣬¿ÉÒÔÎïÀí»º´æ1ÒÚÌõÏûÏ¢
5.ConsumerÀÏûÏ¢£¨Òì³£Ïû·Ñ£©£¬ÏûÏ¢Ö±½Ó´ÓpagecacheתÈësocket
6.ConsumerÀÏûÏ¢£¨Òì³£Ïû·Ñ£©£¬ÓÉÓÚsocket·ÃÎÊÁËÐéÄâÄڴ棬²úÉúȱҳÖжϣ¬´Ëʱ»á²úÉú´ÅÅÌIO£¬´Ó´ÅÅÌLoadÏûÏ¢µ½pagecache£¬È»ºóÖ±½Ó´Ósocket·¢³öÈ¥
7.ͬ5
8.ͬ6
6.ÏûÏ¢¶Ñ»ýÎÊÌâ½â¾ö°ì·¨
1 ÏûÏ¢µÄ¶Ñ»ýÈÝÁ¿¡¢ÒÀÀµ´ÅÅÌ´óС
2 ·¢ÏûÏ¢µÄÍÌÍÂÁ¿´óСÊÜÓ°Ïì³Ì¶È¡¢ÎÞSlaveÇé¿ö£¬»áÊÜÒ»¶¨Ó°Ïì¡¢ÓÐSlaveÇé¿ö£¬²»ÊÜÓ°Ïì
3 Õý³£Ïû·ÑµÄConsumerÊÇ·ñ»áÊÜÓ°Ïì¡¢ÎÞSlaveÇé¿ö£¬»áÊÜÒ»¶¨Ó°Ïì¡¢ÓÐSlaveÇé¿ö£¬²»ÊÜÓ°Ïì
4 ·ÃÎʶѻýÔÚ´ÅÅ̵ÄÏûϢʱ£¬ÍÌÍÂÁ¿Óжà´ó¡¢Óë·ÃÎʵIJ¢·¢Óйأ¬×îÖջήµ½5000×óÓÒ
ÔÚÓÐSlaveÇé¿öÏ£¬MasterÒ»µ©·¢ÏÖConsumer·ÃÎʶѻýÔÚ´ÅÅ̵ÄÊý¾Ýʱ£¬»ØÏëConsumerÏ´ïÒ»¸öÖØ¶¨ÏòÖ¸ÁÁîConsumer´ÓSlaveÀÈ¡Êý¾Ý£¬ÕâÑùÕý³£µÄ·¢ÏûÏ¢ÓëÕý³£µÄÏû·Ñ²»»áÒòΪ¶Ñ»ýÊÜÓ°Ï죬ÒòΪϵͳ½«¶Ñ»ý³¡¾°Óë·Ç¶Ñ»ý³¡¾°·Ö¸îÔÚÁËÁ½¸ö²»Í¬µÄ½Úµã´¦Àí¡£ÕâÀï»á²úÉúÒ»¸öÎÊÌ⣬Slave»á²»»áдÐÔÄÜϽµ£¬´ð°¸ÊÇ·ñ¶¨µÄ¡£ÒòΪSlaveµÄÏûϢдÈëÖ»×·ÇóÍÌÍÂÁ¿£¬²»×·ÇóʵʱÐÔ£¬Ö»ÒªÕûÌåµÄÍÌÍÂÁ¿¸ß¾ÍÐÐÁË£¬¶øSlaveÿ´Î¶¼ÊÇ´ÓMasterÀȡһÅúÊý¾Ý£¬Èç1M£¬ÕâÖÖÅúÁ¿Ë³ÐòдÈ뷽ʽʹ¶Ñ»ýÇé¿ö£¬ÕûÌåÍÌÍÂÁ¿Ó°ÏìÏà¶Ô½ÏС£¬Ö»ÊÇдÈëRT»á±ä³¤¡£
·þÎñ¶Ë°²×°²¿Êð
ÎÒÊÇÔÚÐéÄâ»úÖеÄCentOS6.5ÖнøÐв¿Êð¡£
1.ÏÂÔØ³ÌÐò
2.tar -xvf alibaba-rocketmq-3.0.7.tar.gz ½âѹµ½Êʵ±µÄĿ¼Èç/opt/Ŀ¼
3.Æô¶¯RocketMQ£º½øÈërocketmq/bin Ŀ¼ Ö´ÐÐ

4.Æô¶¯Broker£¬ÉèÖöÔÓ¦µÄNameServer

±àд¿Í»§¶Ë
¿ÉÒԲ鿴samepleÖеÄquickstartÔ´Âë 1.Consumer ÏûÏ¢Ïû·ÑÕß

2.ProducerÏûÏ¢Éú²úÕß

3.Ê×ÏÈÔËÐÐConsumer³ÌÐò£¬Ò»Ö±ÔÚÔËÐÐ״̬½ÓÊÕ·þÎñÆ÷¶ËÍÆË͹ýÀ´µÄÏûÏ¢

4.ÔÙ´ÎÔËÐÐProducer³ÌÐò£¬Éú³ÉÏûÏ¢²¢·¢Ë͵½Broker£¬ProducerµÄÈÕÖ¾³åûÁË£¬µ«ÊÇ¿ÉÒÔ¿´µ½BrokerÍÆË͵½ConsumerµÄÒ»ÌõÏûÏ¢

Consumer×î¼Ñʵ¼ù
1.Ïû·Ñ¹ý³ÌÒª×öµ½Ãݵȣ¨¼´Ïû·Ñ¶ËÈ¥ÖØ£©
RocketMQÎÞ·¨×öµ½ÏûÏ¢ÖØ¸´£¬ËùÒÔÈç¹ûÒµÎñ¶ÔÏûÏ¢ÖØ¸´·Ç³£Ãô¸Ð£¬Îñ±ØÒªÔÚÒµÎñ²ãÃæÈ¥ÖØ£¬ÓÐÒÔÏÂһЩ·½Ê½£º
£¨1£©.½«ÏûÏ¢µÄΨһ¼ü£¬¿ÉÒÔÊÇMsgId£¬Ò²¿ÉÒÔÊÇÏûÏ¢ÄÚÈÝÖеÄΨһ±êʶ×ֶΣ¬ÀýÈç¶©µ¥ID£¬Ïû·Ñ֮ǰÅжÏÊÇ·ñÔÚDB»òTair£¨È«¾ÖKV´æ´¢£©ÖдæÔÚ£¬Èç¹û²»´æÔÚÔò²åÈ룬²¢Ïû·Ñ£¬·ñÔòÌø¹ý¡££¨Êµ¼ù¹ý³ÌÒª¿¼ÂÇÔ×ÓÐÔÎÊÌ⣬ÅжÏÊÇ·ñ´æÔÚ¿ÉÒÔ³¢ÊÔ²åÈ룬Èç¹û±¨Ö÷¼ü³åÍ»£¬Ôò²åÈëʧ°Ü£¬Ö±½ÓÌø¹ý£©
msgidÒ»¶¨ÊÇÈ«¾ÖΨһµÄ±êʶ·û£¬µ«ÊÇ¿ÉÄÜ»á´æÔÚͬÑùµÄÏûÏ¢ÓÐÁ½¸ö²»Í¬µÄmsgidµÄÇé¿ö£¨ÓжàÖÖÔÒò£©£¬ÕâÖÖÇé¿ö¿ÉÄÜ»áʹҵÎñÉÏÖØ¸´£¬½¨Òé×îºÃʹÓÃÏûÏ¢ÌåÖеÄΨһ±êʶ×Ö¶ÎÈ¥ÖØ
£¨2£©.ʹҵÎñ²ãÃæµÄ״̬»úÈ¥ÖØ
2.ÅúÁ¿·½Ê½Ïû·Ñ
Èç¹ûÒµÎñÁ÷³ÌÖ§³ÖÅúÁ¿·½Ê½Ïû·Ñ£¬Ôò¿ÉÒԺܴó³Ì¶ÈÉϵÄÌá¸ßÍÌÍÂÁ¿£¬¿ÉÒÔͨ¹ýÉèÖÃConsumerµÄconsumerMessageBatchMaxSize²ÎÊý£¬Ä¬ÈÏÊÇ1£¬¼´Ò»´ÎÏû·ÑÒ»Ìõ²ÎÊý
3.Ìø¹ý·ÇÖØÒªµÄÏûÏ¢
·¢ÉúÏûÏ¢¶Ñ»ýʱ£¬Èç¹ûÏû·ÑËÙ¶ÈÒ»Ö±¸ú²»ÉÏ·¢ËÍËÙ¶È£¬¿ÉÒÔÑ¡Ôñ¶ªÆú²»ÖØÒªµÄÏûÏ¢

ÈçÒÔÉÏ´úÂëËùʾ£¬µ±Ä³¸ö¶ÓÁеÄÏûÏ¢Êý¶Ñ»ýµ½ 100000 ÌõÒÔÉÏ£¬Ôò³¢ÊÔ¶ªÆú²¿·Ö»òÈ«²¿ÏûÏ¢£¬ÕâÑù¾Í¿ÉÒÔ¿ìËÙ×·ÉÏ·¢ËÍÏûÏ¢µÄËÙ¶È
4.ÓÅ»¯Ã»ÌõÏûÏ¢Ïû·Ñ¹ý³Ì
¾ÙÀýÈçÏ£¬Ä³ÌõÏûÏ¢µÄÏû·Ñ¹ý³ÌÈçÏÂ
1¡¢¸ù¾ÝÏûÏ¢´Ó DB ²éѯÊý¾Ý 1
2¡¢¸ù¾ÝÏûÏ¢´Ó DB ²éѯÊý¾Ý2
3¡¢¸´ÔÓµÄÒµÎñ¼ÆËã
4¡¢Ïò DB ²åÈëÊý¾Ý3
5¡¢Ïò DB ²åÈëÊý¾Ý 4
ÕâÌõÏûÏ¢µÄÏû·Ñ¹ý³ÌÓë DB ½»»¥ÁË 4 ´Î£¬Èç¹û°´ÕÕÿ´Î 5ms ¼ÆË㣬ÄÇô×ܹ²ºÄʱ 20ms£¬¼ÙÉèÒµÎñ¼ÆËãºÄʱ
5ms£¬ÄÇô×ܹýºÄʱ 25ms£¬Èç¹ûÄÜ°Ñ 4 ´Î DB ½»»¥ÓÅ»¯Îª 2 ´Î£¬ÄÇô×ܺÄʱ¾Í¿ÉÒÔÓÅ»¯µ½
15ms£¬Ò²¾ÍÊÇ˵×ÜÌåÐÔÄÜÌá¸ßÁË 40%¡£
¶ÔÓÚ Mysql µÈ DB£¬Èç¹û²¿ÊðÔÚ´ÅÅÌ£¬ÄÇôÓë DB ½øÐн»»¥£¬Èç¹ûÊý¾ÝûÓÐÃüÖÐ cache£¬Ã¿´Î½»»¥µÄ
RT »áÖ±ÏßÉÏÉý£¬ Èç¹û²ÉÓà SSD£¬Ôò RT ÉÏÉýÇ÷ÊÆÒªÃ÷ÏÔºÃÓÚ´ÅÅÌ¡£
¸ö±ðÓ¦ÓÿÉÄÜ»áÓöµ½ÕâÖÖÇé¿ö£ºÔÚÏßÏÂѹ²âÏû·Ñ¹ý³ÌÖУ¬db ±íÏַdz£ºÃ£¬Ã¿´Î RT ¶¼ºÜ¶Ì£¬µ«ÊÇÉÏÏßÔËÐÐÒ»¶Îʱ¼ä£¬RT
¾Í»á±ä³¤£¬Ïû·ÑÍÌÍÂÁ¿Ö±ÏßϽµ
Ö÷ÒªÔÒòÊÇÏßÏÂѹ²âʱ¼ä¹ý¶Ì£¬ÏßÉÏÔËÐÐÒ»¶Îʱ¼äºó£¬cache ÃüÖÐÂÊϽµ£¬ÄÇô RT ¾Í»áÔö¼Ó¡£½¨ÒéÔÚÏßÏÂѹ²âʱ£¬Òª²âÊÔ×ã¹»³¤Ê±¼ä£¬¾¡¿ÉÄÜÄ£ÄâÏßÉÏ»·¾³£¬Ñ¹²â¹ý³ÌÖУ¬Êý¾ÝµÄ·Ö²¼Ò²ºÜÖØÒª£¬Êý¾Ý²»Í¬£¬¿ÉÄÜ
cache µÄÃüÖÐÂÊÒ²»áÍêÈ«²»Í¬
Producer×î¼Ñʵ¼ù
1.·¢ËÍÏûÏ¢×¢ÒâÊÂÏî
£¨1£© Ò»¸öÓ¦Óþ¡¿ÉÄÜÓÃÒ»¸ö Topic£¬ÏûÏ¢×ÓÀàÐÍÓà tags À´±êʶ£¬tags ¿ÉÒÔÓÉÓ¦ÓÃ×ÔÓÉÉèÖá£Ö»Óз¢ËÍÏûÏ¢ÉèÖÃÁËtags£¬Ïû·Ñ·½ÔÚ¶©ÔÄÏûϢʱ£¬²Å¿ÉÒÔÀûÓÃ
tags ÔÚ broker ×öÏûÏ¢¹ýÂË¡£
£¨2£©Ã¿¸öÏûÏ¢ÔÚÒµÎñ²ãÃæµÄΨһ±êʶÂ룬ҪÉèÖõ½ keys ×ֶΣ¬·½±ã½«À´¶¨Î»ÏûÏ¢¶ªÊ§ÎÊÌâ¡£·þÎñÆ÷»áΪÿ¸öÏûÏ¢´´½¨Ë÷Òý£¨¹þÏ£Ë÷Òý£©£¬Ó¦ÓÿÉÒÔͨ¹ý
topic£¬key À´²éѯÕâÌõÏûÏ¢ÄÚÈÝ£¬ÒÔ¼°ÏûÏ¢±»ËÏû·Ñ¡£ÓÉÓÚÊǹþÏ£Ë÷Òý£¬ÇëÎñ±Ø±£Ö¤ key ¾¡¿ÉÄÜΨһ£¬ÕâÑù¿ÉÒÔ±ÜÃâDZÔڵĹþÏ£³åÍ»¡£
£¨3£©ÏûÏ¢·¢Ëͳɹ¦»òÕßʧ°Ü£¬Òª´òÓ¡ÏûÏ¢ÈÕÖ¾£¬Îñ±ØÒª´òÓ¡ sendresult ºÍ key ×Ö¶Î
£¨4£©send ÏûÏ¢·½·¨£¬Ö»Òª²»Å×Òì³££¬¾Í´ú±í·¢Ëͳɹ¦¡£µ«ÊÇ·¢Ëͳɹ¦»áÓжà¸ö״̬£¬ÔÚ sendResult
ÀﶨÒå
SEND_OK£ºÏûÏ¢·¢Ëͳɹ¦
FLUSH_DISK_TIMEOUT£ºÏûÏ¢·¢Ëͳɹ¦£¬µ«ÊÇ·þÎñÆ÷Ë¢Å̳¬Ê±£¬ÏûÏ¢ÒѾ½øÈë·þÎñÆ÷¶ÓÁУ¬Ö»ÓдËʱ·þÎñÆ÷å´»ú£¬ÏûÏ¢²Å»á¶ªÊ§
FLUSH_SLAVE_TIMEOUT£ºÏûÏ¢·¢Ëͳɹ¦£¬µ«ÊÇ·þÎñÆ÷ͬ²½µ½ Slave ʱ³¬Ê±£¬ÏûÏ¢ÒѾ½øÈë·þÎñÆ÷¶ÓÁУ¬Ö»ÓдËʱ·þÎñÆ÷å´»ú£¬ÏûÏ¢²Å»á¶ªÊ§
SLAVE_NOT_AVAILABLE£ºÏûÏ¢·¢Ëͳɹ¦£¬µ«ÊÇ´Ëʱ slave ²»¿ÉÓã¬ÏûÏ¢ÒѾ½øÈë·þÎñÆ÷¶ÓÁУ¬Ö»ÓдËʱ·þÎñÆ÷å´»ú£¬ÏûÏ¢²Å»á¶ªÊ§¡£¶ÔÓÚ¾«È··¢ËÍ˳ÐòÏûÏ¢µÄÓ¦Óã¬ÓÉÓÚ˳ÐòÏûÏ¢µÄ¾ÖÏÞÐÔ£¬¿ÉÄÜ»áÉæ¼°µ½Ö÷±¸×Ô¶¯Çл»ÎÊÌ⣬ËùÒÔÈç¹ûsendresult
ÖÐµÄ status ×ֶβ»µÈÓÚ SEND_OK£¬¾ÍÓ¦¸Ã³¢ÊÔÖØÊÔ¡£¶ÔÓÚÆäËûÓ¦Óã¬ÔòûÓбØÒªÕâÑù
£¨5£©¶ÔÓÚÏûÏ¢²»¿É¶ªÊ§Ó¦Óã¬Îñ±ØÒªÓÐÏûÏ¢ÖØ·¢»úÖÆ
2.ÏûÏ¢·¢ËÍʧ°Ü´¦Àí
Producer µÄ send ·½·¨±¾ÉíÖ§³ÖÄÚ²¿ÖØÊÔ£¬ÖØÊÔÂß¼ÈçÏ£º
£¨1£© ÖÁ¶àÖØÊÔ 3 ´Î
£¨2£© Èç¹û·¢ËÍʧ°Ü£¬ÔòÂÖתµ½ÏÂÒ»¸ö Broker
£¨3£© Õâ¸ö·½·¨µÄ×ܺÄʱʱ¼ä²»³¬¹ý sendMsgTimeout ÉèÖõÄÖµ£¬Ä¬ÈÏ 10sËùÒÔ£¬Èç¹û±¾ÉíÏò
broker ·¢ËÍÏûÏ¢²úÉú³¬Ê±Òì³££¬¾Í²»»áÔÙ×öÖØÊÔ
È磺
Èç¹ûµ÷Óà send ͬ²½·½·¨·¢ËÍʧ°Ü£¬Ôò³¢ÊÔ½«ÏûÏ¢´æ´¢µ½ db£¬Óɺǫ́Ï̶߳¨Ê±ÖØÊÔ£¬±£Ö¤ÏûÏ¢Ò»¶¨µ½´ï
Broker¡£
ÉÏÊö db ÖØÊÔ·½Ê½ÎªÊ²Ã´Ã»Óм¯³Éµ½ MQ ¿Í»§¶ËÄÚ²¿×ö£¬¶øÊÇÒªÇóÓ¦ÓÃ×Ô¼ºÈ¥Íê³É£¬»ùÓÚÒÔϼ¸µã¿¼ÂÇ£º
£¨1£©MQ µÄ¿Í»§¶ËÉè¼ÆÎªÎÞ״̬ģʽ£¬·½±ãÈÎÒâµÄˮƽÀ©Õ¹£¬ÇÒ¶Ô»úÆ÷×ÊÔ´µÄÏûºÄ½ö½öÊÇ cpu¡¢ÄÚ´æ¡¢ÍøÂç
£¨2£©Èç¹û MQ ¿Í»§¶ËÄÚ²¿¼¯³ÉÒ»¸ö KV ´æ´¢Ä£¿é£¬ÄÇôÊý¾ÝÖ»ÓÐͬ²½ÂäÅ̲ÅÄܽϿɿ¿£¬¶øÍ¬²½ÂäÅ̱¾ÉíÐÔÄÜ¿ªÏú½Ï´ó£¬ËùÒÔͨ³£»á²ÉÓÃÒì²½ÂäÅÌ£¬ÓÖÓÉÓÚÓ¦Óùرչý³Ì²»ÊÜ
MQ ÔËάÈËÔ±¿ØÖÆ£¬¿ÉÄܾ³£»á·¢Éú kill -9 ÕâÑù±©Á¦·½Ê½¹Ø±Õ£¬Ôì³ÉÊý¾ÝûÓм°Ê±ÂäÅ̶ø¶ªÊ§
£¨3£©Producer ËùÔÚ»úÆ÷µÄ¿É¿¿ÐԽϵͣ¬Ò»°ãΪÐéÄâ»ú£¬²»ÊÊºÏ´æ´¢ÖØÒªÊý¾Ý¡£ ×ÛÉÏ£¬½¨ÒéÖØÊÔ¹ý³Ì½»ÓÉÓ¦ÓÃÀ´¿ØÖÆ¡£
3.Ñ¡Ôñ oneway ÐÎʽ·¢ËÍ
Ò»¸ö RPC µ÷Óã¬Í¨³£ÊÇÕâÑùÒ»¸ö¹ý³Ì
£¨1£©¿Í»§¶Ë·¢ËÍÇëÇóµ½·þÎñÆ÷
£¨2£©·þÎñÆ÷´¦Àí¸ÃÇëÇó
£¨3£©·þÎñÆ÷Ïò¿Í»§¶Ë·µ»ØÓ¦´ð
ËùÒÔÒ»¸ö RPC µÄºÄʱʱ¼äÊÇÉÏÊöÈý¸ö²½ÖèµÄ×ܺͣ¬¶øÄ³Ð©³¡¾°ÒªÇóºÄʱ·Ç³£¶Ì£¬µ«ÊǶԿɿ¿ÐÔÒªÇó²¢²»¸ß£¬ÀýÈçÈÕÖ¾ÊÕ¼¯ÀàÓ¦Ó㬴ËÀàÓ¦ÓÿÉÒÔ²ÉÓÃ
oneway ÐÎʽµ÷Óã¬oneway ÐÎʽֻ·¢ËÍÇëÇ󲻵ȴýÓ¦´ð£¬¶ø·¢ËÍÇëÇóÔÚ¿Í»§¶ËʵÏÖ²ãÃæ½ö½öÊÇÒ»¸ö
os ϵͳµ÷ÓõĿªÏú£¬¼´½«Êý¾ÝдÈë¿Í»§¶ËµÄ socket »º³åÇø£¬´Ë¹ý³ÌºÄʱͨ³£ÔÚ΢Ãë¼¶¡£
RocketMQ²»Ö¹¿ÉÒÔÖ±½ÓÍÆËÍÏûÏ¢£¬ÔÚÏû·Ñ¶Ë×¢²á¼àÌýÆ÷½øÐмàÌý£¬»¹¿ÉÒÔÓÉÏû·Ñ¶Ë¾ö¶¨×Ô¼ºÈ¥ÀÈ¡Êý¾Ý


¸Õ¿ªÊ¼µÄûÓÐϸ¿´PullResult¶ÔÏó£¬ÒÔΪÀÈ¡µ½µÄ½á¹ûûÓÐMessageExt¶ÔÏó»¹Åܵ½ÈºÀïÃæÎʱðÈË£¬·¸2ÁË
ÌØ±ðҪעÒâ ¾²Ì¬±äÁ¿offsetTableµÄ×÷Óã¬ÀÈ¡µÄÊǰ´ÕÕ´Óoffset£¨Àí½âΪϱ꣩λÖÿªÊ¼ÀÈ¡£¬ÀÈ¡NÌõ£¬offsetTable¼Ç¼Ï´ÎÀÈ¡µÄoffsetλÖá£
|