±¾ÎÄÊÇϵÁÐÎÄÕµĵÚ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¡£ |