Ò»¡¢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¶¼å´»úÁË£¬¾ÍÎÞ·¨±£Ö¤Êý¾Ý²»¶ªÊ§ÁË£¬ÓÐÁ½ÖÖ»Ö¸´·½°¸£¬ÉÏÎÄÒѽéÉܹý¡£
|