±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚÌÚÑ¶ÔÆ£¬Ö÷Òª½éÉÜÁËתתZZMQÔڼܹ¹¡¢´æ´¢ÏµÍ³¡¢±£Ö¤ÏûÏ¢¿É¿¿´æ´¢£¬¿É¿¿Ïû·Ñ£¬ÒÔ¼°nettyµÄʹÓõȡ£
|
|
±³¾°
»¥ÁªÍø¹«Ë¾Ê¹ÓÃ×îÆµ·±µÄ·þÎñµ÷ÓÃ×é¼þÊÇRPC¿ò¼Ü£¬RPCͬ²½µ÷ÓÃÓÐЩ³¡¾°²¢²»ÊǺÜÊÊÓ㬶øÕâЩ³¡¾°¸ÕºÃÊÇÒ»¸ö¿É¿¿MQµÄÊÊÓó¡¾°¡£
ÎÒÃÇ¿´¿´RPCµ÷Óõij¡¾°¡£·þÎñAµ÷ÓÃÈçͼËùʾ·þÎñ¡£ÔÚÕý³£Çé¿öÏ£¬Ò»°ã¶¼²»»áÓÐÎÊÌâ¡£µ«ÊÇÔÚÒÔÏÂÇé¿ö£¬·þÎñAµ÷ÓûáÓöµ½ÎÊÌâ¡£

ÎÊÌâÒ»£ºÈç¹ûÓÐÁ÷Á¿¸ß·å£¬·þÎñBÏìÓ¦³¬Ê±£¬»á·¢ÉúʲôÇé¿ö£¿
Õû¸öRPCµ÷ÓÃÁ´Â·¶¼»áÊܵ½Ó°Ï죬ÉõÖÁ·¢ÉúÑ©±À¡£
ÎÊÌâ¶þ£º·þÎñAÂß¼¸´ÔÓ£¬Âß¼ñîºÏÑÏÖØ£¬Ôõô×ö²ð·Ö£¿
°ÑһЩµ÷ÓÃÁ´Â·ÖпÉÒÔÒì²½µ÷ÓõÄÂß¼µ÷ÕûΪÏû·ÑMQÏûÏ¢¡£
ÎÊÌâÈý£ºRPCµ÷Óã¬jarÒÀÀµÎÊÌ⣿·þÎñBÉý¼¶£¬µ÷ÓÃBµÄÏà¹Ø·þÎñÊÇ·ñÐèÒªÉý¼¶£¿
RPC·þÎñÐèÒªÒÀÀµÉú³ÉµÄ½Ó¿ÚÃèÊöjar£¬·þÎñ½Ó¿ÚÉý¼¶Ò»°ãºÜÄÑ×öµ½Ïòǰ¼æÈÝ£¬ËùÒÔÏà¹Øµ÷Ó÷½Ò²ÐèÒªÉý¼¶¡£
MQÊÇÒÔÏûÏ¢ÎªÔØÌåµÄ¿É¿¿Òì²½µ÷ÓõĿò¼Ü£¬ÄܺܺõÄÓ¦¶ÔÉÏÃæÈý¸öÎÊÌâ¡£Á÷Á¿Ï÷·å£¬MQÊÇÌìȻ֧³ÖµÄ£¬ÒòΪMQÓпɿ¿´æ´¢£¬¿ÉÒÔÂ䵨¡£½âñîºÏ£¬½»¸øMQÒ²ºÜºÏÊÊ¡£ÒòΪMQµÄ½ÓÈë·½´¦ÀíµÄÊÇÏûÏ¢£¬×öµ½Ïòǰ¼æÈÝÒ²ÊDZȽÏÈÝÒ׵ġ£

ʹÓÃMQÖ®ºó£¬·þÎñA,Bͨ¹ýMQ×öµ½ËÉñîºÏ£¬Ò²ÄܺܺõÄÓ¦¶ÔÁ÷Á¿¸ß·å¡£
MQºÜºÃºÜÇ¿´ó£¬ÊÇRPCµÄÓÐЧ²¹³ä£¬ÄÇÎÊÌâÀ´ÁËÔõôʵÏÖÒ»¸ö¿É¿¿MQ£¿±¾ÎĽáºÏ¶þÊÖ½»Òׯ½Ì¨µÄÌØµã£¬Ïêϸ½éÉÜתתZZMQ¼Ü¹¹Éè¼ÆÊµ¼ù¡£
תתÏûÏ¢¶ÓÁУ¨ZZMQ£©¼Ü¹¹Éè¼Æ
Éè¼ÆZZMQ£¬ÎÒÃÇ¿¼ÂǵÄÖØµãÊÇ£º¿É¿¿£¬¸ßÐÔÄÜ£¬ÔËάÓѺ㬽ÓÈë·½±ã£¬¿ÉÒÔÖ§³Ö´óÁ¿¶Ñ»ý£¬ÓÐЧ»º³åÒµÎñ¸ß·å£¬Õë¶ÔÕâЩÐèÇó£¬ÎÒÃÇ×öÁËһЩÉè¼ÆÉϵĿ¼ÂǺÍÈ¡Éᣬ×îÖÕÐγÉÁËÈçϵļܹ¹·½°¸¡£

RegisterCenter ×÷Ϊע²áÖÐÐÄ£¬¸ºÔð·ÓÉ·þÎñ£¬ÎÞ״̬£¬Ã¿¸öNameNode¶¼ÊǶԵȵģ¬NameNode
¿ÉÒÔÈÎÒâˮƽÀ©Õ¹¡£NameNode ÓëbrokerºÍClient¶¼½¨Á¢Á˳¤Á¬½Ó¡£Broker ÄÚÊÇÖ÷´ÓÁ½Ì¨»úÆ÷£¬slave´ÓmasterÀÈ¡ÏûÏ¢LogºÍÏû·ÑOffset£¬×öHA¡£BrokerÒ²¿ÉÒÔ·½±ãµØË®Æ½À©Õ¹£¬¼ÓÈëлúÆ÷£¬¸üÐÂtopicµÄ·ÓÉÐÅÏ¢£¬client»á¶¨Ê±¸üзÓÉÐÅÏ¢¡£Consumer
ºÍProducer ¶¼ÐèÒªµ½×¢²áÖÐÐÄ×¢²á£¬Í¬Ê±ÀÈ¡TopicµÄ·ÓÉÐÅÏ¢¡£Management Protal
ÊÇÓÃÀ´¹ÜÀí¼¯Èº£¬Î¬»¤TopicµÄÏà¹ØÁªÏµÈËÐÅÏ¢¡£
´æ´¢Éè¼Æ
Ò»¸ö¸ßÐÔÄÜZZMQµÄÆ¿¾±ºÍÄѵã¾ÍÊǴ洢ϵͳ£¬´æ´¢ÏµÍ³¹Øºõµ½ÐÔÄÜ£¬Êý¾Ý¿É¿¿´æ´¢ÊµÏÖÊÇ·ñ¼òµ¥£¬Êý¾Ý±¸·Ý¿ØÖÆ£¬ÏûϢ״̬µÄ±íʾ¡£
Ŀǰ×î³£¼ûµÄÊÇÒÔKafkaΪ´ú±íµÄLog-append-file£¬Îļþ˳Ðòд£¬×·ÇóÍÌÍÂÁ¿£¬ÏûÏ¢Ïû·Ñ״̬ͨ¹ýoffsetÀ´¿ØÖÆ£¬»¹ÓÐÒÔ¸÷ÖÖ´æ´¢ÒýÇæÊµÏֵ쬱ÈÈçleveldb£¨activemq£©£¬rocksdbµÈ¡£

´ÓÕâÕÅͼ£¨http://queue.acm.org/detail.cfm?id=1563874£©£¬ÎÒÃÇÄÜ¿´µ½´ÅÅÌ˳Ðò¶ÁдµÄÐÔÄÜÉõÖÁ³¬¹ýÁËÄÚ´æËæ»ú·ÃÎʵÄÐÔÄÜ£¬ÄÜ´ïµ½50¶àM/s¡£²¢ÇÒ£¬Ïà¶ÔÀ´Ëµ£¬Log-append-file¼òµ¥Ò»Ð©¡£×îºóÑ¡ÔñÁËÀàËÆkafkaµÄlog-append-file¡£
Kafkatopic·Ö³Épartition£¬Ë³Ðò¶Áд£¬partitionÓÐÒ»¸öСµÄÎÊÌ⣬µ¥»ú²»ÄÜÖ§³Å´óÁ¿µÄtopic£¬µ¥»úÄÜÖ§³Ö¼¸°Ù·ÖÇø£¬Ëæ×Å·ÖÇøÊýÁ¿µÄÔö¼Ó£¬ÐÔÄÜÓÐËùϽµ¡£¶øÎÒÃǵij¡¾°µÄÊÇ£ºÒµÎñ´ó²¿·ÖtopicµÄqps²¢²»Ïñkafka´¦ÀíµÄÈÕÖ¾ÎļþÄÇô¸ß£¬Ï£ÍûÄܵ¥»úÖ§³Å¸ü¶àµÄtopicÊýÁ¿¡£
Õë¶ÔÕâÒ»µã£¬ÎÒÃÇ×öÁËһЩµ÷Õû£¬topicÏûÏ¢±¾Éí²»ÔÙ·ÖÇø£¬Í³Ò»´æ´¢£¬Ê¹Óøü¼ÓÇáÁ¿µÄConsumer
QueueʵÏÖpartitionµÄ¹¦ÄÜ¡£Consumer Queue´æ´¢µÄÖ»ÊÇλÖÃÐÅÏ¢£¬¸ü¼ÓÇáÁ¿£¬ÄÜ×öµ½Ö§³Ö¸ü¶àµÄtopic¡£
ÏûϢдÈëpageCache£¬ÔÙDispatchµ½¶ÔÓ¦µÄConsumer
QueueÖÐÈ¥£¬Consumer QueueÖ»ÓÐÏûÏ¢LogµÄoffsetÐÅÏ¢£¬ÒÔ¼°´óСºÍÆäËûµÄһЩԪÊý¾Ý£¬Õ¼ÓúÜСµÄ¿Õ¼ä¡£ÕâÑùÉè¼Æ£¬¾¹ýÑéÖ¤£¬µ¥»úÄܹ»Ö§³Ö¼¸Ç§¶ÓÁС£


ÕâÑùµÄÉè¼ÆÒ²´øÀ´ÁËÒ»¸ö¸±×÷Óã¬ÒòΪÏûÏ¢±¾ÉíÊÇͳһ´æ´¢£¬topicÊýÁ¿¶àµÄʱºò£¬ÏûÏ¢µÄ¶ÁÈ¡ÊÇËæ»ú¶Á£¬ÐÔÄÜÓÐЩÐíϽµ£¬Ä¿Ç°£¬ÎÒÃÇͨ¹ýÓÅ»¯linuxpageCacheºÍIOµ÷¶È£¬¿ªÆôϵͳԤ¶Á£¬ÐÔÄÜÏà¶Ô˳Ðò¶ÁûÓÐÌ«´óϽµ¡£
ZZMQÏûÏ¢¶©ÔÄÄ£ÐÍ

Consumergroup A ÓÐÁ½¸öÏû·ÑÕßʵÀý£¬BÒ²ÓÐÁ½¸öÏû·ÑÕßʵÀý£¬Í¬Ê±¶©ÔÄÁËTopic-A£¬ËûÃÇÖ®¼äµÄÏû·Ñ½ø¶ÈÊǶÀÁ¢µÄ¡£Group´¦ÀíÏàͬtopic£¬Ïû·ÑÂß¼Ò»ÖµÄÒ»¸öÕûÌ壬°üº¬²»Í¬µÄÏû·ÑʵÀý¡£
ConsumerGroup»ù±¾ÉÏÊǸúkafkaµÄGroupÒ»Ö£¬Óɲ»Í¬µÄConsumerGroupÀ´Çø·Ö²»Í¬µÄÏû·Ñ×飬ά»¤Group¶ÔÓ¦µÄÏû·Ñ״̬£¬Äܷܺ½±ãµÄʵÏÖ¡£
ÍøÂç
»ùÓÚnettyʵÏÖÁËÍøÂç²ãµÄÐÒé¡£Netty¶Ônio£¬ºÍreactor×öÁ˺ܺõķâ×°£¬netty4.x
¶Ôdirect bufferµÄÀûÓã¬ÒÔ¼°¸ßЧµÄbuffer·ÖÅäºÍ»ØÊÕËã·¨£¬nettyÒ²½â¾öÁËTCPÐÒéµÄ°ë°üÎÊÌ⣬ʹÓ÷½²»ÐèÒª×Ô¼º×éTCP°ü¡£ÓÃnettyʵÏÖÍøÂç²ãÐÒé£¬ÍøÂç²ãµÄ¿É¿¿ÓÉnettyÀ´×ö£¬¼õÉÙÁ˸´ÔÓ¶È¡£
Push »¹ÊÇPull
Õâ¸öÉè¼ÆµÄ¿¼ÂÇÖ÷ÒªÊÇÁ½¸ö·½Ã棺ÂýÏû·Ñ£¬ÒÔ¼°Ïû·ÑÑÓ³Ù¡£Ö÷¶¯PushÄÜ×öµ½µÍµÄÏû·ÑÑÓ³Ù£¬µ«ÊǶÔÓÚÂýÏû·Ñ£¬²»ÄܺܺõÄÓ¦¶Ô£¬Ö÷¶¯PushÐèÒª¸ÐÖªÏû·ÑÕßµÄËÙÂÊ£¬²»ÖÁÓÚpush
Ì«¿ì£¬°ÑÏû·ÑÕßѹ¿åÁË¡£Pullģʽ£¬ÓÉÏû·ÑÕß¿ØÖÆÀÈ¡µÄËÙ¶È£¬ÄܺܺõÄÓ¦¶ÔÂýÏû·ÑµÄÎÊÌ⣬µ«ÊÇ£¬Pullģʽ¶ÔÏû·ÑÑÓ³Ù²»Ãô¸Ð£¬ÀÈ¡µÄƵÂʲ»ºÃ¿ØÖÆ£¬´¦Àí²»ºÃÓпÉÄÜÔì³ÉCPUʹÓÃÂÊìÉý¡£²ÎÕÕkafkaµÄpull£¬ÊµÏÖÁËlongpull¡£Consumer
ÓëBroker½¨Á¢³¤Á¬½Ó£¬Consumer·¢ÆðÀÈ¡ÇëÇó£¬Èç¹ûÓÐÏûÏ¢£¬Broker ·µ»ØÏûÏ¢£¬Èç¹ûûÓÐÏûÏ¢£¬broker
holdסÕâ¸öÇëÇóÒ»¶Îʱ¼ä£¬µÈÓÐÏûÏ¢ÔÙnotifyÕâ¸öÇëÇ󣬷µ»Ø¸ø¿Í»§¶Ë¡£»ùÓÚlong pull£¬Ïû·ÑÑÓ³ÙÄܽµµ½¸úpush²î²»¶à£¬Í¬Ê±ÓÖÄÜÓÉConsumer
¿ØÖÆÀÈ¡ËÙ¶È¡£
ÖØ¸´ÏûÏ¢ºÍ˳ÐòÏûÏ¢
ÏûÏ¢ÖØ¸´ÔÚÒ»¸ö¸´ÔÓÍøÂçÌõ¼þϺÜÄѱÜÃâµÄ£¬Èç¹ûÓÉMQ±¾ÉíÀ´×öÈ¥ÖØ£¬´ú¼ÛÌ«´ó£¬ËùÒÔÎÒÃÇÒªÇó½ÓÈëMQµÄÂß¼×öºÃÃݵȣ¨×´Ì¬»ú»òÕß°æ±¾ºÅµÄһЩ»úÖÆ£©¡£Ë³ÐòÏûÏ¢£¬¸úkafkaÒ»Ñù£¬Consumer
queue¸úpartitionÀàËÆ£¬Ò»¸öQueueÄÚ²¿£¬Ïû·ÑÊÇÓÐÐòµÄ¡£Èç¹ûÒª×öµ½ÍêÈ«ÓÐÐò£¬Ö»ÄÜÒ»¸öProducer£¬Ò»¸öConsumer¡£
¸ß¿ÉÓÃ
Broker×éÓÉÖ÷´ÓÁ½Ì¨»úÆ÷¹¹³É£¬¿ÉÒÔÅäÖõIJßÂÔÓÐͬ²½Ë«Ð´ºÍÒì²½¸´ÖÆ¡£Ä¬ÈÏÇé¿ö£¬²ÉÓõÄÒì²½¸´ÖÆ£¬ÓÉslaveÈ¥ÀÈ¡masterÉÏÃæµÄÏûÏ¢LogºÍoffset¡£Broker
½ÓÈëÁËÄÚ²¿µÄ¼à¿ØÏµÍ³£¬Ã¿·ÖÖÓÉϱ¨topicµÄÏû·ÑÇé¿öºÍbroker״̬£¬ÄÜ×öµ½·ÖÖÓ¼¶±ð·¢ÏÖÒì³£Ïû·Ñ¡£ÏûϢдÈëPageCacheÖ®ºó£¬Ä¬ÈÏÊÇÒ첽ˢÅÌ¡£Ò²¿ÉÒÔÅäÖÃΪͬ²½Ë¢ÅÌ£¬Ö»ÓÐË¢Å̳ɹ¦²Å»á·µ»Ø¡£

BrokerµÄĬÈÏÅäÖÃÒ첽ˢÅÌ£¬Master-SlaveÒì²½¸´ÖÆ¡£ClientÏû·ÑÏû·ÑÏûÏ¢µÄ¿É¿¿ÊÇͨ¹ýConsume
queueµÄoffsetÀ´±£Ö¤µÄ£¬Client»á¶¨Ê±Éϱ¨ÒѾÏû·Ñ³É¹¦µÄOffsetÐÅÏ¢¡£Èç¹ûClient±»Òì³£killµô£¬Ã»ÓÐÈ·ÈϵÄÏûÏ¢»á±»Client
ÖØÐÂÀÈ¡£¬Ïû·Ñ¡£
Ò»ÌõÏûÏ¢µÄÉúÃü¹ý³Ì
Proudcerͨ¹ýÓëNameNodeµÄ·ÓÉÕÒµ½topicµÄbrokerµØÖ·£¬producer·¢ÏûÏ¢£¬nettyÐòÁл¯£¬Í¨¹ýTCP´«Êäµ½¶ÔÓ¦µÄbroker£¬brokerдlogµÄpageCache£¬·µ»Ø¡£Broker
DispatchÏûÏ¢µ½¶ÔÓ¦µÄConsumer queue£¬broker»½ÐÑË¢ÅÌỊ̈߳¬broker»½ÐÑslaveͬ²½Ị̈߳¬slaveÀÈ¡ÏûÏ¢¡£
NotifyConsumer ÀÈ¡ÇëÇ󣬾¹ýnettyÐòÁл¯£¬Í¨¹ýtcpµ½´ïConsumer£¬ConsumerÏû·Ñ³É¹¦£¬ClientÉϱ¨Ïû·Ñ³É¹¦offset¡£
Broker³Ö¾Ã»¯Offset£¬slaveͬ²½offset¡£ÈýÌìÖ®ºó£¬brokerɾ³ýÏûÏ¢¡£
×ܽá
±¾ÎÄÖ÷Òª½éÉÜÁËתתZZMQÔڼܹ¹¡¢´æ´¢ÏµÍ³¡¢±£Ö¤ÏûÏ¢¿É¿¿´æ´¢£¬¿É¿¿Ïû·Ñ£¬ÒÔ¼°nettyµÄʹÓõȾÑé |