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

1Ôª 10Ôª 50Ôª





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



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

Ò»¡¢Kafka¼ò½é

KafkaÊÇÒ»ÖÖ¸ßÍÌÍÂÁ¿¡¢·Ö²¼Ê½¡¢»ùÓÚ·¢²¼/¶©ÔĵÄÏûϢϵͳ£¬×î³õÓÉLinkedIn¹«Ë¾¿ª·¢£¬Ê¹ÓÃScalaÓïÑÔ±àд£¬Ä¿Ç°ÊÇApacheµÄ¿ªÔ´ÏîÄ¿¡£

¸úRabbitMQ¡¢RocketMQµÈĿǰÁ÷ÐеĿªÔ´ÏûÏ¢Öмä¼þÏà±È£¬Kakfa¾ßÓиßÍÌÍ¡¢µÍÑÓ³ÙµÈÌØµã£¬ÔÚ´óÊý¾Ý¡¢ÈÕÖ¾ÊÕ¼¯µÈÓ¦Ó󡾰ϱ»¹ã·ºÊ¹Óá£

±¾ÎÄÖ÷Òª¼òµ¥½éÉÜKafkaµÄÉè¼ÆÔ­Àí¡£

¶þ¡¢Kafka¼Ü¹¹

»ù±¾¸ÅÄ

broker£ºKafka·þÎñÆ÷£¬¸ºÔðÏûÏ¢´æ´¢ºÍת·¢

topic£ºÏûÏ¢Àà±ð£¬Kafka°´ÕÕtopicÀ´·ÖÀàÏûÏ¢

partition£ºtopicµÄ·ÖÇø£¬Ò»¸ötopic¿ÉÒÔ°üº¬¶à¸öpartition£¬topicÏûÏ¢±£´æÔÚ¸÷¸öpartitionÉÏ

offset£ºÏûÏ¢ÔÚÈÕÖ¾ÖеÄλÖ㬿ÉÒÔÀí½âÊÇÏûÏ¢ÔÚpartitionÉÏµÄÆ«ÒÆÁ¿£¬Ò²ÊÇ´ú±í¸ÃÏûÏ¢µÄΨһÐòºÅ

Producer£ºÏûÏ¢Éú²úÕß

Consumer£ºÏûÏ¢Ïû·ÑÕß

Consumer Group£ºÏû·ÑÕß·Ö×飬ÿ¸öConsumer±ØÐëÊôÓÚÒ»¸ögroup

Zookeeper£º±£´æ×ż¯Èºbroker¡¢topic¡¢partitionµÈmetaÊý¾Ý£»ÁíÍ⣬»¹¸ºÔðbroker¹ÊÕÏ·¢ÏÖ£¬partition leaderÑ¡¾Ù£¬¸ºÔؾùºâµÈ¹¦ÄÜ

Èý¡¢KafkaÉè¼ÆÔ­Àí

3.1 Êý¾Ý´æ´¢Éè¼Æ

partitionÒÔÎļþÐÎʽ´æ´¢ÔÚÎļþϵͳ£¬Ä¿Â¼ÃüÃû¹æÔò£º<topic_name>-<partition_id>£¬ÀýÈ磬ÃûΪtestµÄtopic£¬ÆäÓÐ3¸öpartition£¬ÔòKafkaÊý¾ÝĿ¼ÖÐÓÐ3¸öĿ¼£ºtest-0, test-1, test-2£¬·Ö±ð´æ´¢ÏàÓ¦partitionµÄÊý¾Ý¡£

partitionµÄÊý¾ÝÎļþ

partitionÖеÄÿÌõMessage°üº¬ÁËÒÔÏÂÈý¸öÊôÐÔ£º

1.offset

2.MessageSize

3.data

ÆäÖÐoffset±íʾMessageÔÚÕâ¸öpartitionÖÐµÄÆ«ÒÆÁ¿£¬offset²»ÊǸÃMessageÔÚpartitionÊý¾ÝÎļþÖеÄʵ¼Ê´æ´¢Î»Ö㬶øÊÇÂß¼­ÉÏÒ»¸öÖµ£¬ËüΨһȷ¶¨ÁËpartitionÖеÄÒ»ÌõMessage£¬¿ÉÒÔÈÏΪoffsetÊÇpartitionÖÐMessageµÄid£»MessageSize±íʾÏûÏ¢ÄÚÈÝdataµÄ´óС£»dataΪMessageµÄ¾ßÌåÄÚÈÝ¡£

partitionµÄÊý¾ÝÎļþÓÉÒÔÉϸñʽµÄMessage×é³É£¬°´offsetÓÉСµ½´óÅÅÁÐÔÚÒ»Æð¡£

Èç¹ûÒ»¸öpartitionÖ»ÓÐÒ»¸öÊý¾ÝÎļþ£º

1.ÐÂÊý¾ÝÊÇÌí¼ÓÔÚÎļþĩ⣬²»ÂÛÎļþÊý¾ÝÎļþÓжà´ó£¬Õâ¸ö²Ù×÷ÓÀÔ¶¶¼ÊÇO(1)µÄ¡£

2.²éÕÒij¸öoffsetµÄMessageÊÇ˳Ðò²éÕҵġ£Òò´Ë£¬Èç¹ûÊý¾ÝÎļþºÜ´óµÄ»°£¬²éÕÒµÄЧÂʾ͵͡£

Kafkaͨ¹ý·Ö¶ÎºÍË÷ÒýÀ´Ìá¸ß²éÕÒЧÂÊ¡£

Êý¾ÝÎļþ·Ö¶Îsegment

partitionÎïÀíÉÏÓɶà¸ösegmentÎļþ×é³É£¬Ã¿¸ösegment´óСÏàµÈ£¬Ë³Ðò¶Áд¡£Ã¿¸ösegmentÊý¾ÝÎļþÒԸöÎÖÐ×îСµÄoffsetÃüÃû£¬ÎļþÀ©Õ¹ÃûΪ.log¡£ÕâÑùÔÚ²éÕÒÖ¸¶¨offsetµÄMessageµÄʱºò£¬Óöþ·Ö²éÕҾͿÉÒÔ¶¨Î»µ½¸ÃMessageÔÚÄĸösegmentÊý¾ÝÎļþÖС£

Êý¾ÝÎļþË÷Òý

Êý¾ÝÎļþ·Ö¶ÎʹµÃ¿ÉÒÔÔÚÒ»¸ö½ÏСµÄÊý¾ÝÎļþÖвéÕÒ¶ÔÓ¦offsetµÄMessageÁË£¬µ«ÊÇÕâÒÀÈ»ÐèҪ˳ÐòɨÃè²ÅÄÜÕÒµ½¶ÔÓ¦offsetµÄMessage¡£ÎªÁ˽øÒ»²½Ìá¸ß²éÕÒµÄЧÂÊ£¬KafkaΪÿ¸ö·Ö¶ÎºóµÄÊý¾ÝÎļþ½¨Á¢ÁËË÷ÒýÎļþ£¬ÎļþÃûÓëÊý¾ÝÎļþµÄÃû×ÖÊÇÒ»ÑùµÄ£¬Ö»ÊÇÎļþÀ©Õ¹ÃûΪ.index¡£

Ë÷ÒýÎļþÖаüº¬Èô¸É¸öË÷ÒýÌõÄ¿£¬Ã¿¸öÌõÄ¿±íʾÊý¾ÝÎļþÖÐÒ»ÌõMessageµÄË÷Òý¡£Ë÷Òý°üº¬Á½¸ö²¿·Ö£¬·Ö±ðΪÏà¶ÔoffsetºÍposition¡£

Ïà¶Ôoffset£ºÒòΪÊý¾ÝÎļþ·Ö¶ÎÒÔºó£¬Ã¿¸öÊý¾ÝÎļþµÄÆðʼoffset²»Îª0£¬Ïà¶Ôoffset±íʾÕâÌõMessageÏà¶ÔÓÚÆäËùÊôÊý¾ÝÎļþÖÐ×îСµÄoffsetµÄ´óС¡£¾ÙÀý£¬·Ö¶ÎºóµÄÒ»¸öÊý¾ÝÎļþµÄoffsetÊÇ´Ó20¿ªÊ¼£¬ÄÇôoffsetΪ25µÄMessageÔÚindexÎļþÖеÄÏà¶Ôoffset¾ÍÊÇ25-20 = 5¡£´æ´¢Ïà¶Ôoffset¿ÉÒÔ¼õСË÷ÒýÎļþÕ¼ÓõĿռ䡣

position£¬±íʾ¸ÃÌõMessageÔÚÊý¾ÝÎļþÖеľø¶ÔλÖá£Ö»Òª´ò¿ªÎļþ²¢Òƶ¯ÎļþÖ¸Õëµ½Õâ¸öposition¾Í¿ÉÒÔ¶ÁÈ¡¶ÔÓ¦µÄMessageÁË¡£

indexÎļþÖв¢Ã»ÓÐΪÊý¾ÝÎļþÖеÄÿÌõMessage½¨Á¢Ë÷Òý£¬¶øÊDzÉÓÃÁËÏ¡Êè´æ´¢µÄ·½Ê½£¬Ã¿¸ôÒ»¶¨×Ö½ÚµÄÊý¾Ý½¨Á¢Ò»ÌõË÷Òý¡£ÕâÑù±ÜÃâÁËË÷ÒýÎļþÕ¼Óùý¶àµÄ¿Õ¼ä£¬´Ó¶ø¿ÉÒÔ½«Ë÷ÒýÎļþ±£ÁôÔÚÄÚ´æÖС£µ«È±µãÊÇûÓн¨Á¢Ë÷ÒýµÄMessageÒ²²»ÄÜÒ»´Î¶¨Î»µ½ÆäÔÚÊý¾ÝÎļþµÄλÖ㬴ӶøÐèÒª×öÒ»´Î˳ÐòɨÃ裬µ«ÊÇÕâ´Î˳ÐòɨÃèµÄ·¶Î§¾ÍºÜСÁË¡£

×ܽá

²éÕÒij¸öoffsetµÄÏûÏ¢£¬Ïȶþ·Ö·¨ÕÒ³öÏûÏ¢ËùÔÚµÄsegmentÎļþ£¨ÒòΪÿ¸ösegmentµÄÃüÃû¶¼ÊÇÒÔ¸ÃÎļþÖÐÏûÏ¢offset×îСµÄÖµÃüÃû£©£»È»ºó£¬¼ÓÔØ¶ÔÓ¦µÄ.indexË÷ÒýÎļþµ½Äڴ棬ͬÑù¶þ·Ö·¨ÕÒ³öСÓÚµÈÓÚ¸ø¶¨offsetµÄ×î´óµÄÄǸöoffset¼Ç¼£¨Ïà¶Ôoffset£¬position£©£»×îºó£¬¸ù¾Ýpositionµ½.logÎļþÖУ¬Ë³Ðò²éÕÒ³öoffsetµÈÓÚ¸ø¶¨offsetÖµµÄÏûÏ¢¡£

ÓÉÓÚÏûÏ¢ÔÚpartitionµÄsegmentÊý¾ÝÎļþÖÐÊÇ˳Ðò¶ÁдµÄ£¬ÇÒÏûÏ¢Ïû·Ñºó²»»áɾ³ý£¨É¾³ý²ßÂÔÊÇÕë¶Ô¹ýÆÚµÄsegmentÎļþ£©£¬ÕâÖÖ˳Ðò´ÅÅÌIO´æ´¢Éè¼ÆÊÇKafka¸ßÐÔÄܺÜÖØÒªµÄÔ­Òò¡£

3.2 Éú²úÕßÉè¼Æ

¸ºÔؾùºâ£ºÓÉÓÚÏûÏ¢topicÓɶà¸öpartition×é³É£¬ÇÒpartition»á¾ùºâ·Ö²¼µ½²»Í¬brokerÉÏ£¬Òò´Ë£¬ÎªÁËÓÐЧÀûÓÃbroker¼¯ÈºµÄÐÔÄÜ£¬Ìá¸ßÏûÏ¢µÄÍÌÍÂÁ¿£¬producer¿ÉÒÔͨ¹ýËæ»ú»òÕßhashµÈ·½Ê½£¬½«ÏûϢƽ¾ù·¢Ë͵½¶à¸öpartitionÉÏ£¬ÒÔʵÏÖ¸ºÔؾùºâ¡£

ÅúÁ¿·¢ËÍ£ºÊÇÌá¸ßÏûÏ¢ÍÌÍÂÁ¿ÖØÒªµÄ·½Ê½£¬Producer¶Ë¿ÉÒÔÔÚÄÚ´æÖкϲ¢¶àÌõÏûÏ¢ºó£¬ÒÔÒ»´ÎÇëÇóµÄ·½Ê½·¢ËÍÁËÅúÁ¿µÄÏûÏ¢¸øbroker£¬´Ó¶ø´ó´ó¼õÉÙbroker´æ´¢ÏûÏ¢µÄIO²Ù×÷´ÎÊý¡£µ«Ò²Ò»¶¨³Ì¶ÈÉÏÓ°ÏìÁËÏûÏ¢µÄʵʱÐÔ£¬Ï൱ÓÚÒÔʱÑÓ´ú¼Û£¬»»È¡¸üºÃµÄÍÌÍÂÁ¿¡£

3.3 Ïû·ÑÕßÉè¼Æ

1.ÈκÎConsumer±ØÐëÊôÓÚÒ»¸öConsumer Group

2.ͬһConsumer GroupÖеĶà¸öConsumerʵÀý£¬²»Í¬Ê±Ïû·Ñͬһ¸öpartition£¬µÈЧÓÚ¶ÓÁÐģʽ¡£Èçͼ£¬Consumer Group 1µÄÈý¸öConsumerʵÀý·Ö±ðÏû·Ñ²»Í¬µÄpartitionµÄÏûÏ¢£¬¼´£¬TopicA-part0¡¢TopicA-part1¡¢TopicA-part2¡£

3.²»Í¬Consumer GroupµÄConsumerʵÀý¿ÉÒÔͬʱÏû·Ñͬһ¸öpartition£¬µÈЧÓÚ·¢²¼¶©ÔÄģʽ¡£Èçͼ£¬Consumer Group 1µÄConsumer1ºÍConsumer Group 2µÄConsumer4£¬Í¬Ê±Ïû·ÑTopicA-part0µÄÏûÏ¢¡£

4.partitionÄÚÏûÏ¢ÊÇÓÐÐòµÄ£¬Consumerͨ¹ýpull·½Ê½Ïû·ÑÏûÏ¢¡£

5.Kafka²»É¾³ýÒÑÏû·ÑµÄÏûÏ¢

¶ÓÁÐģʽ

¶ÓÁÐģʽ£¬Ö¸Ã¿ÌõÏûÏ¢Ö»»áÓÐÒ»¸öConsumerÏû·Ñµ½¡£Kafka±£Ö¤Í¬Ò»Consumer GroupÖÐÖ»ÓÐÒ»¸öConsumer»áÏû·ÑijÌõÏûÏ¢¡£

ÔÚConsumer GroupÎȶ¨×´Ì¬Ï£¬Ã¿Ò»¸öConsumerʵÀýÖ»»áÏû·Ñijһ¸ö»ò¶à¸öÌØ¶¨partitionµÄÊý¾Ý£¬¶øÄ³¸öpartitionµÄÊý¾ÝÖ»»á±»Ä³Ò»¸öÌØ¶¨µÄConsumerʵÀýËùÏû·Ñ£¬Ò²¾ÍÊÇ˵Kafka¶ÔÏûÏ¢µÄ·ÖÅäÊÇÒÔpartitionΪµ¥Î»·ÖÅäµÄ£¬¶ø·ÇÒÔÿһÌõÏûÏ¢×÷Ϊ·ÖÅäµ¥Ôª£»

ͬһConsumer GroupÖУ¬Èç¹ûConsumerʵÀýÊýÁ¿ÉÙÓÚpartitionÊýÁ¿£¬ÔòÖÁÉÙÓÐÒ»¸öConsumer»áÏû·Ñ¶à¸öpartitionµÄÊý¾Ý£»Èç¹ûConsumerµÄÊýÁ¿ÓëpartitionÊýÁ¿Ïàͬ£¬ÔòÕýºÃÒ»¸öConsumerÏû·ÑÒ»¸öpartitionµÄÊý¾Ý£»¶øÈç¹ûConsumerµÄÊýÁ¿¶àÓÚpartitionµÄÊýÁ¿Ê±£¬»áÓв¿·ÖConsumerÎÞ·¨Ïû·Ñ¸ÃTopicÏÂÈκÎÒ»ÌõÏûÏ¢£»

Éè¼ÆµÄÓÅÊÆÊÇ£ºÃ¿¸öConsumer²»Óö¼¸ú´óÁ¿µÄbrokerͨÐÅ£¬¼õÉÙͨÐÅ¿ªÏú£¬Í¬Ê±Ò²½µµÍÁË·ÖÅäÄѶȣ¬ÊµÏÖÒ²¸ü¼òµ¥£»¿ÉÒÔ±£Ö¤Ã¿¸öpartitionÀïµÄÊý¾Ý¿ÉÒÔ±»ConsumerÓÐÐòÏû·Ñ¡£

Éè¼ÆµÄÁÓÊÆÊÇ£ºÎÞ·¨±£Ö¤Í¬Ò»¸öConsumer GroupÀïµÄConsumer¾ùÔÈÏû·ÑÊý¾Ý£¬ÇÒÔÚConsumerʵÀý¶àÓÚpartition¸öÊýʱµ¼ÖÂÓÐЩConsumer»á¶öËÀ¡£

Èç¹ûÓÐpartition»òÕßConsumerµÄÔö¼õ£¬ÎªÁ˱£Ö¤¾ùºâÏû·Ñ£¬ÐèҪʵÏÖConsumer Rebalance£¬·ÖÅäËã·¨ÈçÏ£º

 

broker¶ÔConsumerÉè¼ÆÔ­Àí£º

1.¶ÔÓÚÿ¸öConsumer Group£¬Ñ¡¾Ù³öÒ»¸öBroker×÷ΪCoordinator£¨0.9°æ±¾ÒÔÉÏ£©£¬ÓÉËüWatch Zookeeper£¬´Ó¶ø¼à¿ØÅжÏÊÇ·ñÓÐpartition»òÕßConsumerµÄÔö¼õ£¬È»ºóÉú³ÉRebalanceÃüÁ°´ÕÕÒÔÉÏËã·¨ÖØÐ·ÖÅä¡£

2.µ±Consumer GroupµÚÒ»´Î±»³õʼ»¯Ê±£¬Consumerͨ³£»á¶Áȡÿ¸öpartitionµÄ×îÔç»ò×î½üµÄoffset£¨Zookeeper¼Ç¼£©£¬È»ºó˳ÐòµØ¶Áȡÿ¸öpartition logµÄÏûÏ¢£¬ÔÚConsumer¶ÁÈ¡¹ý³ÌÖУ¬Ëü»áÌá½»ÒѾ­³É¹¦´¦ÀíµÄÏûÏ¢µÄoffsets£¨ÓÉZookeeper¼Ç¼£©¡£

3.µ±Ò»¸öpartition±»ÖØÐ·ÖÅ䏸Consumer GroupÖÐµÄÆäËûConsumer£¬ÐµÄConsumerÏû·ÑµÄ³õʼλÖûáÉèÖÃΪ(Ô­À´Consumer)×î½üÌá½»µÄoffset¡£

Èçͼ£¬Last Commited OffsetÖ¸Consumer×î½üÒ»´ÎÌá½»µÄÏû·Ñ¼Ç¼offset£¬Current PositionÊǵ±Ç°Ïû·ÑµÄλÖã¬High WatermarkÊdzɹ¦¿½±´µ½logµÄËùÓи±±¾½Úµã£¨partitionµÄËùÓÐISR½Úµã£¬ÏÂÎĽéÉÜ£©µÄ×î½üÏûÏ¢µÄoffset£¬Log End OffsetÊÇдÈëlogÖÐ×îºóÒ»ÌõÏûÏ¢µÄoffset+1¡£

´ÓConsumerµÄ½Ç¶ÈÀ´¿´£¬×î¶àÖ»ÄܶÁÈ¡µ½High watermarkµÄλÖ㬺óÃæµÄÏûÏ¢¶ÔÏû·ÑÕß²»¿É¼û£¬ÒòΪδÍêÈ«¸´ÖƵÄÊý¾Ý»¹Ã»¿É¿¿´æ´¢£¬ÓжªÊ§¿ÉÄÜ¡£

·¢²¼¶©ÔÄģʽ

·¢²¼¶©ÔÄģʽ£¬ÓÖÖ¸¹ã²¥Ä£Ê½£¬Kafka±£Ö¤topicµÄÿÌõÏûÏ¢»á±»ËùÓÐConsumer GroupÏû·Ñµ½£¬¶ø¶ÔÓÚͬһ¸öConsumer Group£¬»¹ÊDZ£Ö¤Ö»ÓÐÒ»¸öConsumerʵÀýÏû·Ñµ½ÕâÌõÏûÏ¢¡£

3.4 ReplicationÉè¼Æ

×÷ΪÏûÏ¢Öмä¼þ£¬Êý¾ÝµÄ¿É¿¿ÐÔÒÔ¼°ÏµÍ³µÄ¿ÉÓÃÐÔ£¬±ØÈ»ÒÀÀµÊý¾Ý¸±±¾µÄÉè¼Æ¡£

KafkaµÄreplica¸±±¾µ¥ÔªÊÇtopicµÄpartition£¬Ò»¸öpartitionµÄreplicaÊýÁ¿²»Äܳ¬¹ýbrokerµÄÊýÁ¿£¬ÒòΪһ¸öbroker×î¶àÖ»»á´æ´¢Õâ¸öpartitionµÄÒ»¸ö¸±±¾¡£ËùÓÐÏûÏ¢Éú²ú¡¢Ïû·ÑÇëÇó¶¼ÊÇÓÉpartitionµÄleader replicaÀ´´¦Àí£¬ÆäËûfollower replica¸ºÔð´Óleader¸´ÖÆÊý¾Ý½øÐб¸·Ý¡£

Replica¾ùÔÈ·Ö²¼µ½Õû¸ö¼¯Èº£¬ReplicaµÄËã·¨ÈçÏ£º

1.½«ËùÓÐBroker£¨¼ÙÉè¹²n¸öBroker£©ºÍ´ý·ÖÅäµÄPartitionÅÅÐò

2.½«µÚi¸öPartition·ÖÅäµ½µÚ£¨i mod n£©¸öBrokerÉÏ

3.½«µÚi¸öPartitionµÄµÚj¸öReplica·ÖÅäµ½µÚ£¨(i + j) mode n£©¸öBrokerÉÏ

Èçͼ£¬TopicAÓÐÈý¸öpartition£ºpart0¡¢part1¡¢part2£¬Ã¿¸öpartitionµÄreplicaÊýµÈÓÚ2£¨Ò»¸öÊÇleader£¬ÁíÒ»¸öÊÇfollower£©£¬°´ÕÕÒÔÉÏËã·¨»á¾ùÔÈÂäµ½Èý¸öbrokerÉÏ¡£

broker¶Ôreplica¹ÜÀí£º

Ñ¡¾Ù³öÒ»¸öbroker×÷Ϊcontroller£¬ÓÉËüWatch Zookeeper£¬¸ºÔðpartitionµÄreplicaµÄ¼¯Èº·ÖÅ䣬ÒÔ¼°leaderÇл»Ñ¡¾ÙµÈÁ÷³Ì¡£

In-Sync-Replica(ISR)

·Ö²¼Ê½ÏµÍ³ÔÚ´¦Àí½Úµã¹ÊÕÏʱ£¬ÐèÒªÔ¤ÏÈÃ÷È·½ÚµãµÄ¡±failure¡±ºÍ¡±alive¡±µÄ¶¨Òå¡£¶ÔÓÚKafka½Úµã£¬ÅжÏÊÇ¡±alive¡±ÓÐÒÔÏÂÁ½¸öÌõ¼þ£º

1.½Úµã±ØÐëºÍZookeeper±£³ÖÐÄÌøÁ¬½Ó

2.Èç¹û½ÚµãÊÇfollower£¬±ØÐë´Óleader½ÚµãÉϸ´ÖÆÊý¾ÝÀ´±¸·Ý£¬¶øÇÒ±¸·ÝµÄÊý¾ÝÏà±Èleader¶øÑÔ£¬²»ÄÜÂäºóÌ«¶à¡£

Kafka½«Âú×ãÒÔÉÏÌõ¼þµÄreplica½ÚµãÈÏΪÊÇ¡±in sync¡±£¨Í¬²½ÖУ©£¬³ÆÎªIn-Sync-Replica(ISR)¡£

KafkaµÄZookeeperά»¤ÁËÿ¸öpartitionµÄISRÐÅÏ¢£¬ÀíÏëÇé¿öÏ£¬ISR°üº¬ÁËpartitionµÄËùÓÐreplicaËùÔÚµÄbroker½ÚµãÐÅÏ¢£¬¶øµ±Ä³Ð©½Úµã²»Âú×ãÒÔÉÏÌõ¼þʱ£¬ISR¿ÉÄÜÖ»°üº¬²¿·Öreplica¡£ÀýÈ磬ÉÏͼÖеÄTopicA-part0µÄISRÁбí¿ÉÄÜÊÇ[broker1,broker2,broker3]£¬Ò²¿ÉÄÜÊÇ[broker1,broker3]ºÍ[broker1]¡£

Êý¾Ý¿É¿¿ÐÔ

KafkaÈçºÎ±£Ö¤Êý¾Ý¿É¿¿ÐÔ£¿Ê×ÏÈ¿´Ï£¬ProducerÉú²úÒ»ÌõÏûÏ¢£¬¸ÃÏûÏ¢±»ÈÏΪÊÇ¡±committed¡±£¨¼´brokerÈÏΪÏûÏ¢ÒѾ­¿É¿¿´æ´¢£©µÄ¹ý³Ì£º

1.ÏûÏ¢ËùÔÚpartitionµÄISR replicas»á¶¨Ê±Òì²½´ÓleaderÉÏÅúÁ¿¸´ÖÆÊý¾Ýlog

2.µ±ËùÓÐISR replica¶¼·µ»Øack£¬¸æËßleader¸ÃÏûÏ¢ÒѾ­Ð´log³É¹¦ºó£¬leaderÈÏΪ¸ÃÏûÏ¢committed£¬²¢¸æËßProducerÉú²ú³É¹¦¡£ÕâÀïºÍÒÔÉÏ¡±alive¡±Ìõ¼þµÄµÚ¶þµãÊDz»Ã¬¶ÜµÄ£¬ÒòΪleaderÓг¬Ê±»úÖÆ£¬leaderµÈISRµÄfollower¸´ÖÆÊý¾Ý£¬Èç¹ûÒ»¶¨Ê±¼ä²»·µ»Øack£¨¿ÉÄÜÊý¾Ý¸´Öƽø¶ÈÂäºóÌ«¶à£©£¬Ôòleader½«¸Ãfollower replica´ÓISRÖÐÌÞ³ý¡£

3.ÏûÏ¢committedÖ®ºó£¬Consumer²ÅÄÜÏû·Ñµ½¡£

ISR»úÖÆÏµÄÊý¾Ý¸´ÖÆ£¬¼È²»ÊÇÍêÈ«µÄͬ²½¸´ÖÆ£¬Ò²²»Êǵ¥´¿µÄÒì²½¸´ÖÆ£¬ÕâÊÇKafka¸ßÍÌͺÜÖØÒªµÄ»úÖÆ¡£Í¬²½¸´ÖÆÒªÇóËùÓÐÄܹ¤×÷µÄfollower¶¼¸´ÖÆÍ꣬ÕâÌõÏûÏ¢²Å»á±»ÈÏΪcommitted£¬ÕâÖÖ¸´ÖÆ·½Ê½¼«´óµÄÓ°ÏìÁËÍÌÍÂÁ¿¡£¶øÒì²½¸´ÖÆ·½Ê½Ï£¬followerÒì²½µÄ´Óleader¸´ÖÆÊý¾Ý£¬Êý¾ÝÖ»Òª±»leaderдÈëlog¾Í±»ÈÏΪÒѾ­committed£¬ÕâÖÖÇé¿öÏÂÈç¹ûfollower¶¼¸´ÖÆÍê¶¼ÂäºóÓÚleader£¬¶øÈç¹ûleaderͻȻ崻ú£¬Ôò»á¶ªÊ§Êý¾Ý¡£¶øKafkaµÄÕâÖÖʹÓÃISRµÄ·½Ê½ÔòºÜºÃµÄ¾ùºâÁËÈ·±£Êý¾Ý²»¶ªÊ§ÒÔ¼°ÍÌÍÂÁ¿£¬follower¿ÉÒÔÅúÁ¿µÄ´Óleader¸´ÖÆÊý¾Ý£¬Êý¾Ý¸´ÖƵ½ÄÚ´æ¼´·µ»Øack£¬ÕâÑù¼«´óµÄÌá¸ß¸´ÖÆÐÔÄÜ£¬µ±È»Êý¾ÝÈÔÈ»ÊÇÓжªÊ§·çÏյġ£

Kafka±¾Éí¶¨Î»ÓÚ¸ßÐÔÄܵÄMQ£¬¸ü¶à×¢ÖØÏûÏ¢ÍÌÍÂÁ¿£¬ÔÚ´Ë»ù´¡ÉϽáºÏISRµÄ»úÖÆÈ¥¾¡Á¿±£Ö¤ÏûÏ¢µÄ¿É¿¿ÐÔ£¬µ«²»ÊǾø¶Ô¿É¿¿µÄ¡£

·þÎñ¿ÉÓÃÐÔ

KafkaËùÓÐÊÕ·¢ÏûÏ¢ÇëÇó¶¼ÓÉleader½Úµã´¦Àí£¬ÓÉÒÔÉÏÊý¾Ý¿É¿¿ÐÔÉè¼Æ¿ÉÖª£¬µ±ISRµÄfollower replica¹ÊÕϺó£¬leader»á¼°Ê±µØ´ÓISRÁбíÖаÑËüÌÞ³ýµô£¬²¢²»Ó°Ïì·þÎñ¿ÉÓÃÐÔ£¬ÄÇôµ±leader¹ÊÕϺó»áÔõÑùÄØ£¿ÈçºÎÑ¡¾ÙеÄleader£¿

leaderÑ¡¾Ù

1.KafkaÔÚZookeeper´æ´¢partitionµÄISRÐÅÏ¢£¬²¢ÇÒÄܶ¯Ì¬µ÷ÕûISRÁбíµÄ³ÉÔ±£¬Ö»ÓÐISRÀïµÄ³ÉÔ±replica²Å»á±»Ñ¡Îªleader£¬²¢ÇÒISRËùÓеÄreplica¶¼ÓпÉÄܳÉΪleader£»

2.leader½Úµãå´»úºó£¬ZookeeperÄÜ¼à¿Ø·¢ÏÖ£¬²¢ÓÉbrokerµÄcontroller½Úµã´ÓISRÖÐÑ¡¾Ù³öеÄleader£¬²¢Í¨ÖªISRÄÚµÄËùÓÐbroker½Úµã¡£

Òò´Ë£¬¿ÉÒÔ¿´³ö£¬Ö»ÒªISRÖÐÖÁÉÙÓÐÒ»¸öreplica£¬Kafka¾ÍÄܱ£Ö¤·þÎñµÄ¿ÉÓÃÐÔ£¨µ«²»±£Ö¤ÍøÂç·ÖÇøÏµĿÉÓÃÐÔ£©¡£

ÈÝÔÖºÍÊý¾ÝÒ»ÖÂÐÔ

·Ö²¼Ê½ÏµÍ³µÄÈÝÔÖÄÜÁ¦£¬¸úÆä±¾ÉíÕë¶ÔÊý¾ÝÒ»ÖÂÐÔ¿¼ÂÇËùÑ¡ÔñµÄËã·¨Óйأ¬ÀýÈ磬ZookeeperµÄZabËã·¨£¬raftËã·¨µÈ¡£KafkaµÄISR»úÖÆºÍÕâЩMajority VoteËã·¨¶Ô±ÈÈçÏ£º

1.ISR»úÖÆÄÜÈÝÈ̸ü¶àµÄ½Úµãʧ°Ü¡£¼ÙÈçreplica½ÚµãÓÐ2f+1¸ö£¬Ã¿¸öpartition×î¶àÄÜÈÝÈÌ2f¸öʧ°Ü£¬ÇÒ²»¶ªÊ§ÏûÏ¢Êý¾Ý£»µ«Ïà¶ÔMajority VoteÑ¡¾ÙËã·¨£¬Ö»ÄÜ×î¶àÈÝÈÌf¸öʧ°Ü¡£

2.ÔÚÏûÏ¢committed³Ö¾Ã»¯ÉÏ£¬ISRÐèÒªµÈ2f¸ö½Úµã·µ»Øack£¬µ«Majority VoteÖ»ÐèµÈf+1¸ö½Úµã·µ»Øack£¬ÇÒ²»ÒÀÀµ´¦Àí×îÂýµÄfollower½Úµã£¬Òò´ËMajority VoteÓÐÓÅÊÆ

3.ISR»úÖÆÄܽÚÊ¡¸ü¶àreplica½ÚµãÊý¡£ÀýÈ磬Ҫ±£Ö¤f¸ö½Úµã¿ÉÓã¬ISR·½Ê½ÖÁÉÙÒªf¸ö½Úµã£¬¶øMajority VoteÖÁÉÙÐèÒª2f+1¸ö½Úµã¡£

Èç¹ûËùÓÐreplica¶¼å´»úÁË£¬ÓÐÁ½ÖÖ·½Ê½»Ö¸´·þÎñ£º

1.µÈISRÈÎÒ»½Úµã»Ö¸´£¬²¢Ñ¡¾ÙΪleader£»

2.Ñ¡ÔñµÚÒ»¸ö»Ö¸´µÄ½Úµã£¨²»Ò»¶¨ÊÇISRÖеĽڵ㣩Ϊleader

µÚÒ»ÖÖ·½Ê½ÏûÏ¢²»»á¶ªÊ§£¨Ö»ÄÜ˵ÕâÖÖ·½Ê½×îÓпÉÄܲ»¶ª¶øÒÑ£©£¬µÚ¶þÖÖ·½Ê½¿ÉÄܻᶪÏûÏ¢£¬µ«Äܾ¡¿ì»Ö¸´·þÎñ¿ÉÓá£ÕâÊÇ¿ÉÓÃÐÔºÍÒ»ÖÂÐÔ³¡¾°µÄÁ½ÖÖ¿¼ÂÇ£¬KafkaĬÈÏÑ¡ÔñµÚ¶þÖÖ£¬Óû§Ò²¿ÉÒÔ×ÔÖ÷ÅäÖá£

´ó²¿·Ö¿¼ÂÇCPµÄ·Ö²¼Ê½ÏµÍ³£¨¼ÙÉè2f+1¸ö½Úµã£©£¬ÎªÁ˱£Ö¤Êý¾ÝÒ»ÖÂÐÔ£¬×î¶àÖ»ÄÜÈÝÈÌf¸ö½ÚµãµÄʧ°Ü£¬¶øKafkaΪÁ˼æ¹Ë¿ÉÓÃÐÔ£¬ÔÊÐí×î¶à2f¸ö½Úµãʧ°Ü£¬Òò´ËÊÇÎÞ·¨±£Ö¤Êý¾ÝǿһÖµġ£

ÈçͼËùʾ£¬Ò»¿ªÊ¼ISRÊýÁ¿µÈÓÚ3£¬Õý³£Í¬²½Êý¾Ý£¬ºìÉ«²¿·Ö¿ªÊ¼£¬leader·¢ÏÖÆäËûÁ½¸öfollower¸´Öƽø¶ÈÌ«Âý»òÕ߯äËûÔ­Òò£¨ÍøÂç·ÖÇø¡¢½Úµã¹ÊÕϵȣ©£¬½«Æä´ÓISRÌÞ³ýºó£¬leaderµ¥½Úµã´æ´¢Êý¾Ý£»È»ºó£¬leaderå´»ú£¬´¥·¢ÖØÐÂÑ¡¾ÙµÚ¶þ½ÚµãΪleader£¬ÖØÐ¿ªÊ¼Í¬²½Êý¾Ý£¬µ«ºìÉ«²¿·ÖµÄÊý¾ÝÔÚÐÂleaderÉÏÊÇûÓеģ»×îºóÔ­leader½Úµã»Ö¸´·þÎñºó£¬ÖØÐ´ÓÐÂleaderÉϸ´ÖÆÊý¾Ý£¬¶øºìÉ«²¿·ÖµÄÊý¾ÝÒѾ­Ïû·Ñ²»µ½ÁË¡£

Òò´Ë£¬ÎªÁ˼õÉÙÊý¾Ý¶ªÊ§µÄ¸ÅÂÊ£¬¿ÉÒÔÉèÖÃKafkaµÄISR×îСreplicaÊý£¬µÍÓÚ¸ÃÖµºóÖ±½Ó·µ»Ø²»¿ÉÓ㬵±È»ÊÇÒÔÎþÉüÒ»¶¨¿ÉÓÃÐÔºÍÍÌÍÂÁ¿ÎªÇ°ÌáÁË¡£

ÖØ¸´ÏûÏ¢

ÏûÏ¢´«ÊäÓÐÈýÖÖ·½Ê½£º

1.At most once£ºÏûÏ¢¿ÉÄܻᶪʧ£¬µ«²»»áÖØ¸´´«Êä

2.At least once£ºÏûÏ¢²»»á¶ªÊ§£¬µ«¿ÉÄÜÖØ¸´´«Êä

3.Exactly once£ºÏûÏ¢±£Ö¤»á±»´«ÊäÒ»´ÎÇÒ½ö´«ÊäÒ»´Î

KafkaʵÏÖÁ˵ڶþÖÖ·½Ê½£¬¼´£¬¿ÉÄÜ´æÔÚÖØ¸´ÏûÏ¢£¬ÐèÒªÒµÎñ×Ô¼º±£Ö¤ÏûÏ¢ÃݵÈÐÔ´¦Àí¡£

3.5 ¸ßÍÌÍÂÉè¼Æ

1.¶ÔÓÚpartition£¬Ë³Ðò¶Áд´ÅÅÌÊý¾Ý£¬ÒÔʱ¼ä¸´ÔÓ¶ÈO(1)·½Ê½ÌṩÏûÏ¢³Ö¾Ã»¯ÄÜÁ¦¡£

2.ProducerÅúÁ¿ÏòbrokerдÊý¾Ý

3.ConsumerÅúÁ¿´ÓbrokerÀ­Êý¾Ý

4.ÈÕ־ѹËõ

5.Topic·Ö¶à¸öpartition£¬Ìá¸ß²¢·¢

6.brokerÁ㿽±´£¨Zero Copy£©£¬Ê¹ÓÃsendfileϵͳµ÷Ó㬽«Êý¾ÝÖ±½Ó´Ópage cache·¢Ë͵½socketÉÏ

7.Producer¿ÉÅäÖÃÊÇ·ñµÈ´ýÏûÏ¢committed¡£Èç¹ûProducerÉú²úÏûÏ¢£¬Ã¿´Î¶¼±ØÐëµÈISR´æ´¢ºó²Å·µ»Ø£¬Ê±ÑÓ»áºÜ¸ß£¬½ø¶øÓ°ÏìÕûÌåÏûÏ¢µÄÍÌÍÂÁ¿¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬һ·½ÃæProducer¿ÉÒÔÅäÖüõÉÙpartitionµÄ¸±±¾Êý£¬ÀýÈ磬ISR´óСΪ1£»ÁíÒ»·½Ã棬ÔÚ²»Ì«¹Ø×¢ÏûÏ¢¿É¿¿´æ´¢µÄ³¡¾°Ï£¬Producer¿ÉÒÔͨ¹ýÅäÖÃÑ¡ÔñÊÇ·ñµÈ´ýÏûÏ¢committed£¬ÈçÏ£º

 

Acks ³Ö¾ÃÐԵȼ¶ ·µ»ØÏìӦʱ»ú дÑÓʱ

all ¸ß È«²¿ISR³ÉÔ±·µ»ØACK ¸ß

1 ÖÐ ISRÖÐÈÎÒ»³ÉÔ±·µ»ØACK ÖÐ

0 µÍ ²»µÈ´ýISR³ÉÔ±·µ»ØACK µÍ

ÕâÊÇÓû§ÔÚÏûÏ¢ÍÌÍÂÁ¿ºÍ³Ö¾Ã»¯Ö®¼ä×öµÄȨºâÑ¡Ôñ£¬³Ö¾Ã»¯µÈ¼¶Ô½¸ß£¬Éú²úÏûÏ¢ÍÌÍÂÁ¿Ô½Ð¡£¬·´Ö®£¬³Ö¾Ã»¯µÈ¼¶Ô½µÍ£¬ÍÌÍÂÁ¿Ô½¸ß¡£

3.6 HA»ù±¾Ô­Àí

broker HA

broker¼¯ÈºÐÅÏ¢ÓÉZookeeperά»¤£¬²¢Ñ¡¾Ù³öÒ»¸öcontroller¡£ËùÓÐpartitionµÄleaderÑ¡¾Ù¶¼ÓÉcontroller¾ö¶¨£¬½«leaderµÄ±ä¸üÖ±½Óͨ¹ýrpc·½Ê½Í¨ÖªÐèҪΪ´Ë×ö³öÏìÓ¦µÄbrokers£»controllerÒ²¸ºÔðÔöɾtopicÒÔ¼°partition replicaµÄÖØÐ·ÖÅä¡£

controllerÔÚZookeeperÉÏ×¢²áwatch£¬Ò»µ©ÓÐbrokerå´»ú£¬Æä¶ÔÓ¦ÔÚZookeeperµÄÁÙʱ½Úµã×Ô¶¯±»É¾³ý£¬controller¶Ôå´»úbrokerÉϵÄËùÓÐpartitionÖØÐ·ÖÅäÐÂleader£»Èç¹ûcontrollerå´»ú£¬ÆäËûbrokerͨ¹ýZookeeperÑ¡¾Ù³öеÄcontroller£¬È»ºóͬÑù¶Ôå´»úbrokerÉϵÄËùÓÐpartitionÖØÐ·ÖÅäÐÂleader¡£

partition HA

partition leaderËùÔÚµÄbrokerå´»ú£¬ÈçÉÏËùÊö£¬broker controller¸ù¾Ý¶¯Ì¬Î¬»¤µÄISR£¬»áÖØÐÂÔÚʣϵÄbroker»úÆ÷ÖÐÑ¡³öISRÀïÃæµÄÒ»¸ö³ÉÔ±³ÉΪеÄleader¡£Èç¹ûISRÖÐÖÁÉÙÓÐÒ»¸öfollower£¬Ôò¿ÉÒÔÈ·±£ÒѾ­committedµÄÊý¾Ý²»¶ªÊ§£»·ñÔòÑ¡ÔñÈÎÒâÒ»¸öreplica×÷Ϊleader£¬¸Ã³¡¾°¿ÉÄÜ»áÓÐDZÔÚµÄÊý¾Ý¶ªÊ§£»Èç¹ûpartitionËùÓеÄreplica¶¼å´»úÁË£¬¾ÍÎÞ·¨±£Ö¤Êý¾Ý²»¶ªÊ§ÁË£¬ÓÐÁ½ÖÖ»Ö¸´·½°¸£¬ÉÏÎÄÒѽéÉܹý¡£

 

 

 

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

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

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

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