Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
KafkaÉè¼Æ½âÎö£¨Î壩- Kafka ConsumerÉè¼Æ½âÎö
 
À´Ô´£º¼¼ÊõÊÀ½ç ·¢²¼ÓÚ£º2017-9-22
  2806  次浏览      27
 

±¾ÎÄÊÇϵÁÐÎÄÕµĵÚ4ƪ£¬

µÚһƪ "KafkaÉè¼Æ½âÎö£¨Ò»£©- Kafka±³¾°¼°¼Ü¹¹½éÉÜ"

µÚ¶þƪ KafkaÉè¼Æ½âÎö£¨¶þ£©- Kafka High Availability £¨ÉÏ£©

µÚÈýƪ KafkaÉè¼Æ½âÎö£¨Èý£©- Kafka High Availability £¨ÖУ©

µÚËÄÆª KafkaÉè¼Æ½âÎö£¨ËÄ£©- Kafka High Availability £¨Ï£©

±¾ÎÄÖ÷Òª½éÉÜÁËKafka High Level Consumer£¬Consumer Group£¬Consumer Rebalance£¬Low Level ConsumerʵÏÖµÄÓïÒ壬ºÍÊÊÓó¡¾°¡£ÒÔ¼°Î´À´°æ±¾ÖжÔHigh Level ConsumerµÄÖØÐÂÉè¼Æ¡ª¡ªÊ¹ÓÃConsumer Coordinator½â¾öSplit BrainºÍHerdµÈÎÊÌâ¡£

High Level Consumer

ºÜ¶àʱºò£¬¿Í»§³ÌÐòÖ»ÊÇÏ£Íû´ÓKafka¶ÁÈ¡Êý¾Ý£¬²»Ì«¹ØÐÄÏûÏ¢offsetµÄ´¦Àí¡£Í¬Ê±Ò²Ï£ÍûÌṩһЩÓïÒ壬ÀýÈçͬһÌõÏûÏ¢Ö»±»Ä³Ò»¸öConsumerÏû·Ñ£¨µ¥²¥£©»ò±»ËùÓÐConsumerÏû·Ñ£¨¹ã²¥£©¡£Òò´Ë£¬Kafka Hight Level ConsumerÌṩÁËÒ»¸ö´ÓKafkaÏû·ÑÊý¾ÝµÄ¸ß²ã³éÏ󣬴ӶøÆÁ±ÎµôÆäÖеÄϸ½Ú²¢Ìṩ·á¸»µÄÓïÒå¡£ ¡¡¡¡

Consumer Group

High Level Consumer½«´Óij¸öPartition¶ÁÈ¡µÄ×îºóÒ»ÌõÏûÏ¢µÄoffset´æÓÚZookeeperÖÐ(Kafka´Ó0.8.2°æ±¾¿ªÊ¼Í¬Ê±Ö§³Ö½«offset´æÓÚZookeeperÖÐÓ뽫offset´æÓÚרÓõÄKafka TopicÖÐ)¡£Õâ¸öoffset»ùÓÚ¿Í»§³ÌÐòÌṩ¸øKafkaµÄÃû×ÖÀ´±£´æ£¬Õâ¸öÃû×Ö±»³ÆÎªConsumer Group¡£Consumer GroupÊÇÕû¸öKafka¼¯ÈºÈ«¾ÖµÄ£¬¶ø·Çij¸öTopicµÄ¡£Ã¿Ò»¸öHigh Level ConsumerʵÀý¶¼ÊôÓÚÒ»¸öConsumer Group£¬Èô²»Ö¸¶¨ÔòÊôÓÚĬÈϵÄGroup¡£ZookeeperÖÐConsumerÏà¹Ø½ÚµãÈçÏÂͼËùʾ

ºÜ¶à´«Í³µÄMessage Queue¶¼»áÔÚÏûÏ¢±»Ïû·ÑÍêºó½«ÏûϢɾ³ý£¬Ò»·½Ãæ±ÜÃâÖØ¸´Ïû·Ñ£¬ÁíÒ»·½Ãæ¿ÉÒÔ±£Ö¤QueueµÄ³¤¶È±È½Ï¶Ì£¬Ìá¸ßЧÂÊ¡£¶øÈçÉÏÎÄËùÊö£¬Kafka²¢²»É¾³ýÒÑÏû·ÑµÄÏûÏ¢£¬ÎªÁËʵÏÖ´«Í³Message QueueÏûÏ¢Ö»±»Ïû·ÑÒ»´ÎµÄÓïÒ壬Kafka±£Ö¤Ã¿ÌõÏûÏ¢ÔÚͬһ¸öConsumer GroupÀïÖ»»á±»Ä³Ò»¸öConsumerÏû·Ñ¡£Ó봫ͳMessage Queue²»Í¬µÄÊÇ£¬Kafka»¹ÔÊÐí²»Í¬Consumer GroupͬʱÏû·ÑͬһÌõÏûÏ¢£¬ÕâÒ»ÌØÐÔ¿ÉÒÔΪÏûÏ¢µÄ¶àÔª»¯´¦ÀíÌṩ֧³Ö¡£

ʵ¼ÊÉÏ£¬KafkaµÄÉè¼ÆÀíÄîÖ®Ò»¾ÍÊÇͬʱÌṩÀëÏß´¦ÀíºÍʵʱ´¦Àí¡£¸ù¾ÝÕâÒ»ÌØÐÔ£¬¿ÉÒÔʹÓÃStormÕâÖÖʵʱÁ÷´¦Àíϵͳ¶ÔÏûÏ¢½øÐÐʵʱÔÚÏß´¦Àí£¬Í¬Ê±Ê¹ÓÃHadoopÕâÖÖÅú´¦Àíϵͳ½øÐÐÀëÏß´¦Àí£¬»¹¿ÉÒÔͬʱ½«Êý¾Ýʵʱ±¸·Ýµ½ÁíÒ»¸öÊý¾ÝÖÐÐÄ£¬Ö»ÐèÒª±£Ö¤ÕâÈý¸ö²Ù×÷ËùʹÓõÄConsumerÔÚ²»Í¬µÄConsumer Group¼´¿É¡£ÏÂͼչʾÁËKafkaÔÚLinkedInµÄÒ»ÖÖ¼ò»¯²¿ÊðÄ£ÐÍ¡£

ΪÁ˸üÇåÎúչʾKafka Consumer GroupµÄÌØÐÔ£¬±ÊÕß½øÐÐÁËÒ»Ïî²âÊÔ¡£´´½¨Ò»¸öTopic (ÃûΪtopic1)£¬ÔÙ´´½¨Ò»¸öÊôÓÚgroup1µÄConsumerʵÀý£¬²¢´´½¨Èý¸öÊôÓÚgroup2µÄConsumerʵÀý£¬È»ºóͨ¹ýProducerÏòtopic1·¢ËÍKey·Ö±ðΪ1£¬2£¬3µÄÏûÏ¢¡£½á¹û·¢ÏÖÊôÓÚgroup1µÄConsumerÊÕµ½ÁËËùÓеÄÕâÈýÌõÏûÏ¢£¬Í¬Ê±group2ÖеÄ3¸öConsumer·Ö±ðÊÕµ½ÁËKeyΪ1£¬2£¬3µÄÏûÏ¢£¬ÈçÏÂͼËùʾ¡£

×¢£ºÉÏͼÖÐÿ¸öºÚÉ«ÇøÓò´ú±íÒ»¸öConsumerʵÀý£¬Ã¿¸öʵÀýÖ»´´½¨Ò»¸öMessageStream¡£Êµ¼ÊÉÏ£¬±¾ÊµÑ齫ConsumerÓ¦ÓóÌÐò´ò³Éjar°ü£¬²¢ÔÚ4¸ö²»Í¬µÄÃüÁîÐÐÖÕ¶ËÖд«È벻ͬµÄ²ÎÊýÔËÐС£

High Level Consumer Rebalance

£¨±¾½ÚËù½²ÊöRebalanceÏà¹ØÄÚÈݾù»ùÓÚKafka High Level Consumer£©

Kafka±£Ö¤Í¬Ò»Consumer GroupÖÐÖ»ÓÐÒ»¸öConsumer»áÏû·ÑijÌõÏûÏ¢£¬Êµ¼ÊÉÏ£¬Kafka±£Ö¤µÄÊÇÎȶ¨×´Ì¬ÏÂÿһ¸öConsumerʵÀýÖ»»áÏû·Ñijһ¸ö»ò¶à¸öÌØ¶¨PartitionµÄÊý¾Ý£¬¶øÄ³¸öPartitionµÄÊý¾ÝÖ»»á±»Ä³Ò»¸öÌØ¶¨µÄConsumerʵÀýËùÏû·Ñ¡£Ò²¾ÍÊÇ˵Kafka¶ÔÏûÏ¢µÄ·ÖÅäÊÇÒÔPartitionΪµ¥Î»·ÖÅäµÄ£¬¶ø·ÇÒÔÿһÌõÏûÏ¢×÷Ϊ·ÖÅäµ¥Ôª¡£ÕâÑùÉè¼ÆµÄÁÓÊÆÊÇÎÞ·¨±£Ö¤Í¬Ò»¸öConsumer GroupÀïµÄConsumer¾ùÔÈÏû·ÑÊý¾Ý£¬ÓÅÊÆÊÇÿ¸öConsumer²»Óö¼¸ú´óÁ¿µÄBrokerͨÐÅ£¬¼õÉÙͨÐÅ¿ªÏú£¬Í¬Ê±Ò²½µµÍÁË·ÖÅäÄѶȣ¬ÊµÏÖÒ²¸ü¼òµ¥¡£ÁíÍ⣬ÒòΪͬһ¸öPartitionÀïµÄÊý¾ÝÊÇÓÐÐòµÄ£¬ÕâÖÖÉè¼Æ¿ÉÒÔ±£Ö¤Ã¿¸öPartitionÀïµÄÊý¾Ý¿ÉÒÔ±»ÓÐÐòÏû·Ñ¡£

Èç¹ûijConsumer GroupÖÐConsumer£¨Ã¿¸öConsumerÖ»´´½¨1¸öMessageStream£©ÊýÁ¿ÉÙÓÚPartitionÊýÁ¿£¬ÔòÖÁÉÙÓÐÒ»¸öConsumer»áÏû·Ñ¶à¸öPartitionµÄÊý¾Ý£¬Èç¹ûConsumerµÄÊýÁ¿ÓëPartitionÊýÁ¿Ïàͬ£¬ÔòÕýºÃÒ»¸öConsumerÏû·ÑÒ»¸öPartitionµÄÊý¾Ý¡£¶øÈç¹ûConsumerµÄÊýÁ¿¶àÓÚPartitionµÄÊýÁ¿Ê±£¬»áÓв¿·ÖConsumerÎÞ·¨Ïû·Ñ¸ÃTopicÏÂÈκÎÒ»ÌõÏûÏ¢¡£

ÈçÏÂÀýËùʾ£¬Èç¹ûtopic1ÓÐ0£¬1£¬2¹²Èý¸öPartition£¬µ±group1Ö»ÓÐÒ»¸öConsumer(ÃûΪconsumer1)ʱ£¬¸Ã Consumer¿ÉÏû·ÑÕâ3¸öPartitionµÄËùÓÐÊý¾Ý¡£

Ôö¼ÓÒ»¸öConsumer(consumer2)ºó£¬ÆäÖÐÒ»¸öConsumer£¨consumer1£©¿ÉÏû·Ñ2¸öPartitionµÄÊý¾Ý£¨Partition 0ºÍPartition 1£©£¬ÁíÍâÒ»¸öConsumer(consumer2)¿ÉÏû·ÑÁíÍâÒ»¸öPartition£¨Partition 2£©µÄÊý¾Ý¡£

ÔÙÔö¼ÓÒ»¸öConsumer(consumer3)ºó£¬Ã¿¸öConsumer¿ÉÏû·ÑÒ»¸öPartitionµÄÊý¾Ý¡£consumer1Ïû·Ñpartition0£¬consumer2Ïû·Ñpartition1£¬consumer3Ïû·Ñpartition2¡£

ÔÙÔö¼ÓÒ»¸öConsumer£¨consumer4£©ºó£¬ÆäÖÐ3¸öConsumer¿É·Ö±ðÏû·ÑÒ»¸öPartitionµÄÊý¾Ý£¬ÁíÍâÒ»¸öConsumer£¨consumer4£©²»ÄÜÏû·Ñtopic1µÄÈκÎÊý¾Ý¡£

´Ëʱ¹Ø±Õconsumer1£¬ÆäÓà3¸öConsumer¿É·Ö±ðÏû·ÑÒ»¸öPartitionµÄÊý¾Ý¡£

½Ó׏رÕconsumer2£¬consumer3¿ÉÏû·Ñ2¸öPartition£¬consumer4¿ÉÏû·Ñ1¸öPartition¡£

ÔٹرÕconsumer3£¬½ö´æµÄconsumer4¿ÉͬʱÏû·Ñtopic1µÄ3¸öPartition¡£

Consumer RebalanceËã·¨

*¡¡½«Ä¿±êTopicϵÄËùÓÐPartirtionÅÅÐò£¬´æÓÚPT

*¡¡¶ÔijConsumer GroupÏÂËùÓÐConsumerÅÅÐò£¬´æÓÚCG£¬µÚi

¸öConsumer¼ÇΪCi

*¡¡N=size(PT)/size(CG)£¬ÏòÉÏÈ¡Õû

*¡¡½â³ýCi¶ÔÔ­À´·ÖÅäµÄPartitionµÄÏû·ÑȨ£¨i´Ó0¿ªÊ¼£©

*¡¡½«µÚi*Nµ½(i+1)*N¸öPartition·ÖÅ䏸Ci

Consumer RebalanceÁ÷³Ì¡¡¡¡

Ŀǰ£¬×îа棨0.8.2.1£©KafkaµÄConsumer RebalanceµÄ¿ØÖƲßÂÔÊÇÓÉÿһ¸öConsumerͨ¹ýÔÚZookeeperÉÏ×¢²áWatchÍê³ÉµÄ¡£Ã¿¸öConsumer±»´´½¨Ê±»á´¥·¢Consumer GroupµÄRebalance£¬¾ßÌåÆô¶¯Á÷³ÌÈçÏ£º

*¡¡High Level ConsumerÆô¶¯Ê±½«ÆäID×¢²áµ½ÆäConsumer GroupÏ£¬ÔÚZookeeperÉϵÄ·¾¶Îª/consumers/[consumer group]/ids/[consumer id]

*¡¡ÔÚ/consumers/[consumer group]/idsÉÏ×¢²áWatch

*¡¡ÔÚ/brokers/idsÉÏ×¢²áWatch

*¡¡Èç¹ûConsumerͨ¹ýTopic Filter´´½¨ÏûÏ¢Á÷£¬ÔòËü»áͬʱÔÚ/brokers/topicsÉÏÒ²´´½¨Watch

*¡¡Ç¿ÖÆ×Ô¼ºÔÚÆäConsumer GroupÄÚÆô¶¯RebalanceÁ÷³Ì

ÔÚÕâÖÖ²ßÂÔÏ£¬Ã¿Ò»¸öConsumer»òÕßBrokerµÄÔö¼Ó»òÕß¼õÉÙ¶¼»á´¥·¢Consumer Rebalance¡£ÒòΪÿ¸öConsumerÖ»¸ºÔðµ÷Õû×Ô¼ºËùÏû·ÑµÄPartition£¬ÎªÁ˱£Ö¤Õû¸öConsumer GroupµÄÒ»ÖÂÐÔ£¬µ±Ò»¸öConsumer´¥·¢ÁËRebalanceʱ£¬¸ÃConsumer GroupÄ򵀮äËüËùÓÐÆäËüConsumerÒ²Ó¦¸Ãͬʱ´¥·¢Rebalance¡£¸Ã·½Ê½ÓÐÈçÏÂȱÏÝ£º

Herd effect

ÈκÎBroker»òÕßConsumerµÄÔö¼õ¶¼»á´¥·¢ËùÓеÄConsumerµÄRebalance

Split Brain

ÿ¸öConsumer·Ö±ðµ¥¶Àͨ¹ýZookeeperÅжÏÄÄЩBrokerºÍConsumer å´»úÁË£¬ÄÇô²»Í¬ConsumerÔÚͬһʱ¿Ì´ÓZookeeper¡°¿´¡±µ½µÄView¾Í¿ÉÄܲ»Ò»Ñù£¬ÕâÊÇÓÉZookeeperµÄÌØÐÔ¾ö¶¨µÄ£¬Õâ¾Í»áÔì³É²»ÕýÈ·µÄReblance³¢ÊÔ¡£

µ÷Õû½á¹û²»¿É¿Ø

ËùÓеÄConsumer¶¼²¢²»ÖªµÀÆäËüConsumerµÄRebalanceÊÇ·ñ³É¹¦£¬Õâ¿ÉÄܻᵼÖÂKafka¹¤×÷ÔÚÒ»¸ö²»ÕýÈ·µÄ״̬¡£

¸ù¾ÝKafkaÉçÇøwiki£¬Kafka×÷ÕßÕýÔÚ¿¼ÂÇÔÚ»¹Î´·¢²¼µÄ0.9.x°æ±¾ÖÐʹÓÃÖÐÐÄЭµ÷Æ÷(Coordinator)¡£´óÌå˼ÏëÊÇΪËùÓÐConsumer GroupµÄ×Ó¼¯Ñ¡¾Ù³öÒ»¸öBroker×÷ΪCoordinator£¬ÓÉËüWatch Zookeeper£¬´Ó¶øÅжÏÊÇ·ñÓÐPartition»òÕßConsumerµÄÔö¼õ£¬È»ºóÉú³ÉRebalanceÃüÁ²¢¼ì²éÊÇ·ñÕâЩRebalanceÔÚËùÓÐÏà¹ØµÄConsumerÖб»Ö´Ðгɹ¦£¬Èç¹û²»³É¹¦ÔòÖØÊÔ£¬Èô³É¹¦ÔòÈÏΪ´Ë´ÎRebalance³É¹¦£¨Õâ¸ö¹ý³Ì¸úReplication Controller·Ç³£ÀàËÆ£©¡£¾ßÌå·½°¸½«ÔÚºóÎÄÖÐÏêϸ²ûÊö¡£

Low Level Consumer

ʹÓÃLow Level Consumer£¨Simple Consumer£©µÄÖ÷ÒªÔ­ÒòÊÇ£¬Óû§Ï£Íû±ÈConsumer Group¸üºÃµÄ¿ØÖÆÊý¾ÝµÄÏû·Ñ¡£ÀýÈ磺

*¡¡Í¬Ò»ÌõÏûÏ¢¶Á¶à´Î

*¡¡Ö»¶Áȡij¸öTopicµÄ²¿·ÖPartition

*¡¡¹ÜÀíÊÂÎñ£¬´Ó¶øÈ·±£Ã¿ÌõÏûÏ¢±»´¦ÀíÒ»´Î£¬ÇÒ½ö±»´¦ÀíÒ»´Î

ÓëConsumer GroupÏà±È£¬Low Level ConsumerÒªÇóÓû§×ö´óÁ¿µÄ¶îÍ⹤×÷¡£

*¡¡±ØÐëÔÚÓ¦ÓóÌÐòÖиú×Ùoffset£¬´Ó¶øÈ·¶¨ÏÂÒ»ÌõÓ¦¸ÃÏû·ÑÄÄÌõÏûÏ¢

*¡¡Ó¦ÓóÌÐòÐèҪͨ¹ý³ÌÐò»ñ֪ÿ¸öPartitionµÄLeaderÊÇË­

*¡¡±ØÐë´¦ÀíLeaderµÄ±ä»¯

ʹÓÃLow Level ConsumerµÄÒ»°ãÁ÷³ÌÈçÏÂ

*¡¡²éÕÒµ½Ò»¸ö¡°»î×Å¡±µÄBroker£¬²¢ÇÒÕÒ³öÿ¸öPartitionµÄLeader

*¡¡ÕÒ³öÿ¸öPartitionµÄFollower

*¡¡¶¨ÒåºÃÇëÇ󣬸ÃÇëÇóÓ¦¸ÃÄÜÃèÊöÓ¦ÓóÌÐòÐèÒªÄÄЩÊý¾Ý

*¡¡FetchÊý¾Ý

*¡¡Ê¶±ðLeaderµÄ±ä»¯£¬²¢¶ÔÖ®×÷³ö±ØÒªµÄÏìÓ¦

Consumer ÖØÐÂÉè¼Æ

¸ù¾ÝÉçÇøÉçÇøwiki£¬KafkaÔÚ0.9.*°æ±¾ÖУ¬ÖØÐÂÉè¼ÆConsumer¿ÉÄÜÊÇ×îÖØÒªµÄFeatureÖ®Ò»¡£±¾½Ú»á¸ù¾ÝÉçÇøwiki½éÉÜKafka 0.9.*ÖжÔConsumer¿ÉÄܵÄÉè¼Æ·½Ïò¼°Ë¼Â·¡£

Éè¼Æ·½Ïò

¼ò»¯Ïû·ÑÕ߿ͻ§¶Ë

²¿·ÖÓû§Ï£Íû¿ª·¢ºÍʹÓÃnon-javaµÄ¿Í»§¶Ë¡£ÏÖ½×¶ÎʹÓÃnon-java·¢SimpleConsumer±È½Ï·½±ã£¬µ«Ï뿪·¢High Level Consumer²¢²»ÈÝÒס£ÒòΪHigh Level ConsumerÐèҪʵÏÖһЩ¸´ÔÓµ«±Ø²»¿ÉÉÙµÄʧ°Ü̽²âºÍRebalance¡£Èç¹ûÄܽ«Ïû·ÑÕ߿ͻ§¶Ë¸ü¾«¼ò£¬Ê¹ÒÀÀµ×îС»¯£¬½«»á¼«´óµÄ·½±ãnon-javaÓû§ÊµÏÖ×Ô¼ºµÄConsumer¡£

ÖÐÐÄCoordinator

ÈçÉÏÎÄËùÊö£¬µ±Ç°°æ±¾µÄHigh Level Consumer´æÔÚHerd EffectºÍSplit BrainµÄÎÊÌâ¡£Èç¹û½«Ê§°Ü̽²âºÍRebalanceµÄÂß¼­·Åµ½Ò»¸ö¸ß¿ÉÓõÄÖÐÐÄCoordinator£¬ÄÇôÕâÁ½¸öÎÊÌâ¼´¿É½â¾ö¡£Í¬Ê±»¹¿É´ó´ó¼õÉÙZookeeperµÄ¸ºÔØ£¬ÓÐÀûÓÚKafka BrokerµÄScale Out¡£

ÔÊÐíÊÖ¹¤¹ÜÀíoffset

һЩϵͳϣÍûÒÔÌØ¶¨µÄʱ¼ä¼ä¸ôÔÚ×Ô¶¨ÒåµÄÊý¾Ý¿âÖйÜÀíOffset¡£Õâ¾ÍÒªÇóConsumerÄÜ»ñÈ¡µ½Ã¿ÌõÏûÏ¢µÄmetadata£¬ÀýÈçTopic£¬Partition£¬Offset£¬Í¬Ê±»¹ÐèÒªÔÚConsumerÆô¶¯Ê±µÃµ½Ã¿¸öPartitionµÄOffset¡£ÊµÏÖÕâЩ£¬ÐèÒªÌṩеÄConsumer API¡£Í¬Ê±ÓиöÎÊÌâ²»µÃ²»¿¼ÂÇ£¬¼´ÊÇ·ñÔÊÐíConsumerÊÖ¹¤¹ÜÀí²¿·ÖTopicµÄOffset£¬¶øÈÃKafka×Ô¶¯Í¨¹ýZookeeper¹ÜÀíÆäËüTopicµÄOffset¡£Ò»¸ö¿ÉÄܵÄÑ¡ÏîÊÇÈÃÿ¸öConsumerÖ»ÄÜѡȡ1ÖÖOffset¹ÜÀí»úÖÆ£¬Õâ¿É¼«´óµÄ¼ò»¯Consumer APIµÄÉè¼ÆºÍʵÏÖ¡£

Rebalanceºó´¥·¢Óû§Ö¸¶¨µÄ»Øµ÷

һЩӦÓÿÉÄÜ»áÔÚÄÚ´æÖÐΪÿ¸öPartitionά»¤Ò»Ð©×´Ì¬£¬Rebalanceʱ£¬ËüÃÇ¿ÉÄÜÐèÒª½«¸Ã״̬³Ö¾Ã»¯¡£Òò´Ë¸ÃÐèÇóÏ£ÍûÖ§³ÖÓû§ÊµÏÖ²¢Ö¸¶¨Ò»Ð©¿É²å°ÎµÄ²¢ÔÚRebalanceʱ´¥·¢µÄ»Øµ÷¡£Èç¹ûÓû§Ê¹ÓÃÊÖ¶¯µÄOffset¹ÜÀí£¬ÄǸÃÐèÇó¿É·½±ãµÃÓÉÓû§ÊµÏÖ£¬¶øÈç¹ûÓû§Ï£ÍûʹÓÃKafkaÌṩµÄ×Ô¶¯Offset¹ÜÀí£¬ÔòÐèÒªKafkaÌṩ¸Ã»Øµ÷»úÖÆ¡£

·Ç×èÈûʽConsumer API

¸ÃÐèÇóÔ´ÓÚÄÇЩʵÏָ߲ãÁ÷´¦Àí²Ù×÷£¬Èçfilter by£¬ group by£¬ joinµÈ£¬µÄϵͳ¡£Ïֽ׶εÄ×èÈûʽConsumer¼¸ºõ²»¿ÉÄÜʵÏÖJoin²Ù×÷¡£

ÈçºÎͨ¹ýÖÐÐÄCoordinatorʵÏÖRebalance

³É¹¦RebalanceµÄ½á¹ûÊÇ£¬±»¶©ÔĵÄËùÓÐTopicµÄÿһ¸öPartition½«»á±»Consumer GroupÄÚµÄÒ»¸ö£¨ÓÐÇÒ½öÓÐÒ»¸ö£©ConsumerÓµÓС£Ã¿Ò»¸öBroker½«±»Ñ¡¾ÙΪijЩConsumer GroupµÄCoordinator¡£Ä³¸öCosnumer GroupµÄCoordinator¸ºÔðÔÚ¸ÃConsumer GroupµÄ³ÉÔ±±ä»¯»òÕßËù¶©ÔĵÄTopicµÄPartititon±ä»¯Ê±Ð­µ÷Rebalance²Ù×÷¡£

Consumer

1) ConsumerÆô¶¯Ê±£¬ÏÈÏòBrokerÁбíÖеÄÈÎÒâÒ»¸öBroker·¢ËÍConsumerMetadataRequest£¬²¢Í¨¹ýConsumerMetadataResponse»ñÈ¡ËüËùÔÚGroupµÄCoordinatorÐÅÏ¢¡£ConsumerMetadataRequestºÍConsumerMetadataResponseµÄ½á¹¹ÈçÏÂ

ConsumerMetadataRequest
{
GroupId => String}

ConsumerMetadataResponse
{
ErrorCode => int16
Coordinator => Broker
}

2£©ConsumerÁ¬½Óµ½Coordinator²¢·¢ËÍHeartbeatRequest£¬Èç¹û·µ»ØµÄHeartbeatResponseûÓÐÈκδíÎóÂ룬Consumer¼ÌÐøfetchÊý¾Ý¡£ÈôÆäÖаüº¬IllegalGeneration´íÎóÂ룬¼´ËµÃ÷CoordinatorÒѾ­·¢ÆðÁËRebalance²Ù×÷£¬´ËʱConsumerÍ£Ö¹fetchÊý¾Ý£¬commit offset£¬²¢·¢ËÍJoinGroupRequest¸øËüµÄCoordinator£¬²¢ÔÚJoinGroupResponseÖлñµÃËüÓ¦¸ÃÓµÓеÄËùÓÐPartitionÁбíºÍËüËùÊôµÄGroupµÄеÄGeneration ID¡£´ËʱRebalanceÍê³É£¬Consumer¿ªÊ¼fetchÊý¾Ý¡£ÏàÓ¦RequestºÍResponse½á¹¹ÈçÏÂ

HeartbeatRequest
{
GroupId => String
GroupGenerationId => int32
ConsumerId => String}

HeartbeatResponse
{
ErrorCode => int16
}

JoinGroupRequest
{
GroupId => String
SessionTimeout => int32
Topics => [String]
ConsumerId => String
PartitionAssignmentStrategy => String}

JoinGroupResponse
{
ErrorCode => int16
GroupGenerationId => int32
ConsumerId => String
PartitionsToOwn => [TopicName [Partition]]
}
TopicName => StringPartition => int32

Consumer״̬»ú

Down£ºConsumerÍ£Ö¹¹¤×÷

Start up & discover coordinator£ºConsumer¼ì²âÆäËùÔÚGroupµÄCoordinator¡£Ò»µ©Ëü¼ì²âµ½Coordinator£¬¼´ÏòÆä·¢ËÍJoinGroupRequest¡£

Part of a group£º¸Ã״̬Ï£¬ConsumerÒѾ­ÊǸÃGroupµÄ³ÉÔ±£¬²¢ÖÜÆÚÐÔ·¢ËÍHeartbeatRequest¡£ÈçHeartbeatResponse°üº¬IllegalGeneration´íÎóÂ룬Ôòת»»µ½Stopped Consumption״̬¡£ÈôÁ¬½Ó¶ªÊ§£¬HeartbeatResponse°üº¬NotCoordinatorForGroup´íÎóÂ룬Ôòת»»µ½Rediscover coordinator״̬¡£

Rediscover coordinator£º¸Ã״̬Ï£¬Consumer²»Í£Ö¹Ïû·Ñ¶øÊdz¢ÊÔͨ¹ý·¢ËÍConsumerMetadataRequestÀ´Ì½²âеÄCoordinator£¬²¢ÇҵȴýÖ±µ½»ñµÃÎÞ´íÎóÂëµÄÏìÓ¦¡£

Stopped consumption£º¸Ã״̬Ï£¬ConsumerÍ£Ö¹Ïû·Ñ²¢Ìá½»offset£¬Ö±µ½ËüÔٴμÓÈëGroup¡£

¹ÊÕϼì²â»úÖÆ

Consumer³É¹¦¼ÓÈëGroupºó£¬ConsumerºÍÏàÓ¦µÄCoordinatorͬʱ¿ªÊ¼¹ÊÕÏ̽²â³ÌÐò¡£ConsumerÏòCoordinator·¢ÆðÖÜÆÚÐÔµÄHeartbeat£¨HeartbeatRequest£©²¢µÈ´ýÏìÓ¦£¬¸ÃÖÜÆÚΪ session.timeout.ms/heartbeat.frequency¡£ÈôConsumerÔÚsession.timeout.msÄÚδÊÕµ½HeartbeatResponse£¬»òÕß·¢ÏÖÏàÓ¦µÄSocket channel¶Ï¿ª£¬Ëü¼´ÈÏΪCoordinatorÒÑå´»ú²¢Æô¶¯Coordinator̽²â³ÌÐò¡£ÈôCoordinatorÔÚsession.timeout.msÄÚûÓÐÊÕµ½Ò»´ÎHeartbeatRequest£¬ÔòËü½«¸ÃConsumer±ê¼ÇΪ崻ú״̬²¢ÎªÆäËùÔÚGroup´¥·¢Ò»´ÎRebalance²Ù×÷¡£

Coordinator Failover¹ý³ÌÖУ¬Consumer¿ÉÄÜ»áÔÚеÄCoordinatorÍê³ÉFailover¹ý³Ì֮ǰ»òÖ®ºó·¢ÏÖеÄCoordinator²¢ÏòÆä·¢ËÍHeatbeatRequest¡£¶ÔÓÚºóÕߣ¬ÐµÄCooodinator¿ÉÄܾܾø¸ÃÇëÇó£¬ÖÂʹ¸ÃConsumerÖØÐÂ̽²âCoordinator²¢·¢ÆðеÄÁ¬½ÓÇëÇó¡£Èç¹û¸ÃConsumerÏòеÄCoordinator·¢ËÍÁ¬½ÓÇëÇóÌ«Íí£¬ÐµÄCoordinator¿ÉÄÜÒѾ­ÔÚ´Ë֮ǰ½«Æä±ê¼ÇΪ崻ú״̬¶ø½«Ö®ÊÓΪмÓÈëµÄConsumer²¢´¥·¢Ò»´ÎRebalance²Ù×÷¡£

Coordinator

1£©Îȶ¨×´Ì¬Ï£¬Coordinatorͨ¹ýÉÏÊö¹ÊÕÏ̽²â»úÖÆ¸ú×ÙÆäËù¹ÜÀíµÄÿ¸öGroupϵÄÿ¸öConsumerµÄ½¡¿µ×´Ì¬¡£

2£©¸ÕÆô¶¯Ê±»òÑ¡¾ÙÍê³Éºó£¬Coordinator´ÓZookeeper¶ÁÈ¡ËüËù¹ÜÀíµÄGroupÁÐ±í¼°ÕâЩGroupµÄ³ÉÔ±ÁÐ±í¡£Èç¹ûûÓлñÈ¡µ½Group³ÉÔ±ÐÅÏ¢£¬Ëü²»»á×öÈκÎÊÂÇéÖ±µ½Ä³¸öGroupÖÐÓгÉÔ±×¢²á½øÀ´¡£

3£©ÔÚCoordinatorÍê³É¼ÓÔØÆä¹ÜÀíµÄGroupÁÐ±í¼°ÆäÏàÓ¦µÄ³ÉÔ±ÐÅϢ֮ǰ£¬Ëü½«ÎªHeartbeatRequest£¬OffsetCommitRequestºÍJoinGroupRequests·µ»ØCoordinatorStartupNotComplete´íÎóÂë¡£´Ëʱ£¬Consumer»áÖØÐ·¢ËÍÇëÇó¡£

4£©Coordinator»á¸ú×Ù±»ÆäËù¹ÜÀíµÄÈκÎConsumer Group×¢²áµÄTopicµÄPartitionµÄ±ä»¯£¬²¢Îª¸Ã±ä»¯´¥·¢Rebalance²Ù×÷¡£´´½¨ÐµÄTopicÒ²¿ÉÄÜ´¥·¢Rebalance£¬ÒòΪConsumer¿ÉÒÔÔÚTopic±»´´½¨Ö®Ç°¾ÍÒѾ­¶©ÔÄËüÁË¡£

Coordinator·¢ÆðRebalance²Ù×÷Á÷³ÌÈçÏÂËùʾ¡£

Coordinator״̬»ú

Down£ºCoordinator²»ÔÙµ£ÈÎ֮ǰ¸ºÔðµÄConsumer GroupµÄCoordinator

Catch up£º¸Ã״̬Ï£¬Coordinator¾ºÑ¡³É¹¦£¬µ«»¹Î´ÄÜ×öºÃ·þÎñÏàÓ¦ÇëÇóµÄ×¼±¸¡£

Ready£º¸Ã״̬Ï£¬Ð¾ºÑ¡³öÀ´µÄCoordinatorÒѾ­Íê³É´ÓZookeeperÖмÓÔØËüËù¸ºÔð¹ÜÀíµÄËùÓÐGroupµÄmetadata£¬²¢¿É¿ªÊ¼½ÓÊÕÏàÓ¦µÄÇëÇó¡£

Prepare for rebalance£º¸Ã״̬Ï£¬CoordinatorÔÚËùÓÐHeartbeatResponseÖзµ»ØIllegalGeneration´íÎóÂ룬²¢µÈ´ýËùÓÐConsumerÏòÆä·¢ËÍJoinGroupRequestºóתµ½Rebalancing״̬¡£

Rebalancing£º¸Ã״̬Ï£¬CoordinatorÒѾ­ÊÕµ½ÁËJoinGroupRequestÇëÇ󣬲¢Ôö¼ÓÆäGroup Generation ID£¬·ÖÅäConsumer ID£¬·ÖÅäPartition¡£Rebalance³É¹¦ºó£¬Ëü»áµÈ´ý½ÓÊÕ°üº¬ÐµÄConsumer Generation IDµÄHeartbeatRequest£¬²¢×ªÖÁReady״̬¡£

Coordinator Failover

ÈçǰÎÄËùÊö£¬Rebalance²Ù×÷ÐèÒª¾­ÀúÈçϼ¸¸ö½×¶Î

1£©Topic/PartitionµÄ¸Ä±ä»òÕßÐÂConsumerµÄ¼ÓÈë»òÕßÒÑÓÐConsumerÍ£Ö¹£¬´¥·¢Coordinator×¢²áÔÚZookeeperÉϵÄwatch£¬CoordinatorÊÕµ½Í¨Öª×¼±¸·¢ÆðRebalance²Ù×÷¡£

2£©Coordinatorͨ¹ýÔÚHeartbeatResponseÖзµ»ØIllegalGeneration´íÎóÂë·¢ÆðRebalance²Ù×÷¡£

3£©Consumer·¢ËÍJoinGroupRequest

4£©CoordinatorÔÚZookeeperÖÐÔö¼ÓGroupµÄGeneration ID²¢½«ÐµÄPartition·ÖÅäÇé¿öдÈëZookeeper

5£©Coordinator·¢ËÍJoinGroupResponse

ÔÚÕâ¸ö¹ý³ÌÖеÄÿ¸ö½×¶Î£¬Coordinator¶¼¿ÉÄܳöÏÖ¹ÊÕÏ¡£ÏÂÃæ¸ø³öRebalance²»Í¬½×¶ÎÖÐCoordinatorµÄFailover´¦Àí·½Ê½¡£

1£©Èç¹ûCoordinatorµÄ¹ÊÕÏ·¢ÉúÔÚµÚÒ»½×¶Î£¬¼´ËüÊÕµ½Notification²¢Î´À´µÃ¼°×÷³öÏìÓ¦£¬ÔòеÄCoordinator½«´ÓZookeeper¶ÁÈ¡GroupµÄmetadata£¬°üº¬ÕâЩGroup¶©ÔĵÄTopicÁбíºÍ֮ǰµÄPartition·ÖÅä¡£Èç¹ûij¸öGroupËù¶©ÔĵÄTopicÊý»òÕßij¸öTopicµÄPartitionÊýÓë֮ǰµÄPartition·ÖÅä²»Ò»Ö£¬Òà»òÕßij¸öGroupÁ¬½Óµ½ÐµÄCoordinatorµÄConsumerÊýÓë֮ǰPartition·ÖÅäÖеIJ»Ò»Ö£¬ÐµÄCoordinator»á·¢ÆðRebalance²Ù×÷¡£

2£©Èç¹ûʧ°Ü·¢ÉúÔÚ½×¶Î2£¬Ëü¿ÉÄܶԲ¿·Ö¶ø·ÇÈ«²¿Consumer·¢³ö´ø´íÎóÂëµÄHeartbeatResponse¡£ÓëµÚÉÏÃæµÚÒ»ÖÖÇé¿öÒ»Ñù£¬ÐµÄCoordinator»á¼ì²âµ½RebalanceµÄ±ØÒªÐÔ²¢·¢ÆðÒ»´ÎRebalance²Ù×÷¡£Èç¹ûRebalanceÊÇÓÉConsumerµÄʧ°ÜËù´¥·¢²¢ÇÒCosnumerÔÚCoordinatorµÄFailoverÍê³Éǰ»Ö¸´£¬ÐµÄCoordinator²»»áΪ´Ë·¢ÆðеÄRebalance²Ù×÷¡£

3£©Èç¹ûFailure·¢ÉúÔÚ½×¶Î3£¬ÐµÄCoordinator¿ÉÄÜÖ»ÊÕµ½²¿·Ö¶ø·ÇÈ«²¿ConsumerµÄJoinGroupRequest¡£FailoverÍê³Éºó£¬Ëü¿ÉÄÜÊÕµ½²¿·ÖConsumerµÄHeartRequest¼°ÁíÍⲿ·ÖConsumerµÄJoinGroupRequest¡£ÓëµÚ1ÖÖÇé¿öÀàËÆ£¬Ëü½«·¢ÆðÐÂÒ»ÂÖµÄRebalance²Ù×÷¡£

4£©Èç¹ûFailure·¢ÉúÔÚ½×¶Î4£¬¼´Ëü½«ÐµÄGroup Generation IDºÍGroup³ÉÔ±ÐÅϢдÈëZookeeperºó¡£ÐµÄGeneration IDºÍGroup³ÉÔ±ÐÅÏ¢ÒÔÒ»¸öÔ­×Ó²Ù×÷Ò»´ÎÐÔдÈëZookeeper¡£FailoverÍê³Éºó£¬Consumer»á·¢ËÍHeartbeatRequest¸øÐµÄCoordinator£¬²¢°üº¬¾ÉµÄGeneration ID¡£´ËʱеÄCoordinatorͨ¹ýÔÚHeartbeatResponseÖзµ»ØIllegalGeneration´íÎóÂë·¢ÆðеÄÒ»ÂÖRebalance¡£ÕâÒ²½âÊÍÁËΪʲôÿ´ÎHeartbeatRequestÖж¼ÐèÒª°üº¬Generation IDºÍConsumer ID¡£

5£©Èç¹ûFailure·¢ÉúÔÚ½×¶Î5£¬¾ÉµÄCoordinator¿ÉÄÜÖ»ÏòGroupÖеIJ¿·ÖConsumer·¢ËÍÁËJoinGroupResponse¡£ÊÕµ½JoinGroupResponseµÄConsumerÔÚÏ´ÎÏòÒѾ­Ê§Ð§µÄCoordinator·¢ËÍHeartbeatRequest»òÕßÌá½»Offsetʱ»á¼ì²âµ½ËüÒѾ­Ê§°Ü¡£´Ëʱ£¬Ëü½«¼ì²âеÄCoordinator²¢ÏòÆä·¢ËÍ´øÓÐеÄGeneration ID µÄHeartbeatRequest¡£¶øÎ´ÊÕµ½JoinGroupResponseµÄConsumer½«¼ì²âеÄCoordinator²¢ÏòÆä·¢ËÍJoinGroupRequest£¬Õ⽫´ÙʹеÄCoordinator·¢ÆðÐÂÒ»ÂÖµÄRebalance¡£

   
2806 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ