|
0¡¢ÒýÑÔ
KafkaÊÇLinkedIn¿ªÔ´³öÀ´µÄÒ»¿îÏûÏ¢·þÎñÆ÷£¬ÓÃscalaÓïÑÔʵÏÖ£»Õâ»õµÄÐÔÄÜÊǰÙÍò¼¶µÄQPS(¹À¼ÆÊǹÒÔØÁ˶à¿é´ÅÅÌ)£¬ÎÒËæ±ãд¸ö²âÊÔ³ÌÐò¾ÍÊÇÊ®Íò¼¶¡£
1¡¢Kafka»ù±¾¸ÅÄî

ÔÚKafkaÖÐÏûÏ¢Êǰ´ÕÕTopic½øÐзÖÀàµÄ£»Ã¿Ìõ·¢²¼µ½Kafka¼¯ÈºµÄÏûÏ¢¶¼ÓÐÒ»¸öÀà±ð£¬Õâ¸öÀà±ð±»³ÆÎªTopic¡££¨ÎïÀíÉϲ»Í¬TopicµÄÏûÏ¢·Ö¿ª´æ´¢£¬Âß¼ÉÏÒ»¸öTopicµÄÏûÏ¢ËäÈ»±£´æÓÚÒ»¸ö»ò¶à¸öbrokerÉϵ«Óû§Ö»ÐèÖ¸¶¨ÏûÏ¢µÄTopic¼´¿ÉÉú²ú»òÏû·ÑÊý¾Ý¶ø²»±Ø¹ØÐÄÊý¾Ý´æÓں䦣©¡£
ÿ¸öTopic°üº¬Ò»¸ö»ò¶à¸öParition;ParitionÊÇÎïÀí´æ´¢ÉϵĸÅÄ´´½¨Topicʱ¿ÉÖ¸¶¨ParitionÊýÁ¿¡£Ã¿¸öParition¶ÔÓ¦Ò»¸ö´æ´¢Îļþ¼Ð£¬Îļþ¼ÐÏ´洢¸ÃParitionËù³ÖÓеÄÏûÏ¢Êý¾ÝºÍË÷ÒýÎļþ¡£Topic½øÐзÖÇø»®·ÖµÄÖ÷ҪĿµÄÊdzöÓÚÐÔÄÜ·½ÃæµÄ¿¼ÂÇ£¬Kafka¾¡Á¿µÄʹËùÓзÖÇø¾ùÔȵķֲ¼µ½¼¯ÈºËùÓеĽڵãÉ϶ø²»ÊǼ¯ÖÐÔÚijЩ½ÚµãÉÏ£¬ÁíÍâÖ÷´Ó¹ØÏµÒ²¾¡Á¿¾ùºâ£¬ÕâÑùÿ¸ö½Úµã¶¼»áµ£ÈÎÒ»¶¨±ÈÀýµÄ·ÖÇøµÄLeader¡£Ã¿¸öParitionÊÇÒ»¸öÓÐÐòµÄ¶ÓÁУ¬Ã¿ÌõÏûÏ¢ÔÚParitionÖÐÓµÓÐÒ»¸öoffset¡£
ÏûÏ¢µÄ·¢²¼Õ߿ɽ«ÏûÏ¢·¢²¼µ½Ö¸¶¨µÄTopicÖÐ,ͬʱProducerÒ²Äܾö¶¨½«´ËÏûÏ¢·¢Ë͵½ÄĸöParition(Ò²¿ÉÒÔ²ÉÈ¡Ëæ»ú¡¢¹þÏ£¡¢ÂÖѵµÈ²ßÂÔ)¡£

ÏûÏ¢µÄÏû·ÑÕßÖ÷¶¯´ÓKafkaÖÐÀÈ¡ÏûÏ¢½øÐÐÏû·Ñ(pullģʽ)£¬ÔÚKafkaÖÐÒ»¸öParitionÖеÄÏûÏ¢¿ÉÒÔ±»ÎÞÏÞ¶à¸öÏû·ÑÕß½øÐÐÏû·Ñ£¬Ã¿¸öÏû·ÑÕßÖ®¼äÊÇÍêÈ«¶ÀÁ¢£¬Ã¿¸öConsumerÏû·ÑºóµÄÏûÏ¢Kafka²¢²»½øÐÐɾ³ý²Ù×÷£¬KafkaÖеÄÏûϢɾ³ýÊǶ¨ÆÚ½øÐеģ¬¿ÉÒÔÖ¸¶¨±£Áô¶à³¤Ê±¼äÏûÏ¢²»±»É¾³ý¡£Í¨¹ýÖ¸¶¨offset¾Í¿ÉÒÔÏû·ÑÈÎÒâλÖõÄÏûÏ¢£¬µ±È»Ç°ÌáÊÇÖ¸¶¨µÄoffsetÊÇ´æÔڵġ£´ÓÕâµãÉÏ¿´Kafka¸üÏñÊÇÒ»¸öÖ»ÄÜ×·¼Ó¡¢²»ÄÜÐ޸ġ¢Ö§³ÖËæ»ú¶ÁÈ¡µÄСÎļþ¹ÜÀíϵͳ¡£
ÉÏÃæÌᵽÿ¸öConsumerÊÇÍêÈ«¶ÀÁ¢£¬Èç¹û¶à¸öConsumeÏëÂÖÁ÷Ïû·Ñͬһ¸öTopicµÄͬһ¸öParition¾Í×ö²»µ½£»ºóÀ´Kafka·¢Ã÷ÁËÒ»¸öConsumer-groupµÄ¸ÅÄÿ¸öConsumer¿Í»§¶Ë±»´´½¨Ê±,»áÏòZookeeper×¢²á×Ô¼ºµÄÐÅÏ¢;Ò»¸ögroupÖеĶà¸öConsumer¿ÉÒÔ½»´íµÄÏû·ÑÒ»¸öTopicµÄËùÓÐParitions;¼ò¶øÑÔÖ®,±£Ö¤´ËTopicµÄËùÓÐParitions¶¼Äܱ»´ËgroupËùÏû·Ñ,ÇÒÏû·ÑʱΪÁËÐÔÄÜ¿¼ÂÇ,ÈÃParitionÏà¶Ô¾ùºâµÄ·ÖÉ¢µ½Ã¿¸öConsumerÉÏ£¬Consume-groupÖ®¼äÊÇÍêÈ«¶ÀÁ¢¡£Ö÷È˵ÄÏà·´ÊÇͦºÃµÄ£¬µ«ÊDZ¯¾çµÄÊǿͻ§¶Ë»ù±¾¶¼²»Ö§³Ö£¬Ã²ËÆÖ»ÓÐjavaµÄ¿Í»§¶ËÖ§³Ö±È½ÏºÃ¡£

2¡¢ÏûϢ˳ÐòÐÔÓë¿É¿¿ÐÔÉè¼Æ
·¢²¼µ½KafkaµÄÏûÏ¢ÔÚÒ»¸öParitionÖÐÊÇ˳Ðò´æ´¢µÄ£¬·¢²¼Õß¿ÉÒÔͨ¹ýËæ»ú¡¢¹þÏ£¡¢ÂÖѵµÈ·½Ê½·¢²¼µ½¶à¸ö·ÖÇøÖУ¬Ïû·ÑÕßͨ¹ýÖ¸¶¨offset½øÐÐÏû·Ñ£»ËùÒÔKafkaµ±ÖÐÏûÏ¢µÄ˳ÐòÐÔ¸ü¶àµÄÈ¡¾öÓÚʹÓ÷½ÈçºÎʹÓá£
KafkaϵͳÖÐÏûÏ¢Ö§³ÖÈÝÔÖ±¸·Ý´æ´¢£¬Ã¿¸öParitionÓÐÖ÷·ÖÇø¡¢±¸Ó÷ÖÇøµÄ¸ÅÄһ¸öTopicÖеĶà¸öParitionµÄÖ÷·ÖÇø¿ÉÄÜÂäÔÚ²»Í¬µÄÎïÀí»úÆ÷ÉÏÃæ£¬KafkaÒ²ÊǾ¡Á¿ÈÃÆä·Ö²¼ÔÚ²»Í¬µÄ»úÆ÷ÉÏÒÔÌá¸ßϵͳÐÔÄÜ¡£ÏûÏ¢µÄ¶Áд¶¼ÊÇͨ¹ýÖ÷·ÖÇøÖ±½ÓÍê³É£¬¿Í»§¶ËÒªÖ±Á¬Ö÷·ÖÇøËùÔÚµÄÎïÀí»ú½øÐжÁд²Ù×÷¡£±¸Ó÷ÖÇø¾ÍÏñÒ»¸ö"Consumer"Ïû·ÑÖ÷·ÖÇøµÄÏûÏ¢²¢±£´æÔÚ±¾µØÈÕÖ¾ÖнøÐб¸·Ý;Ö÷·ÖÇø¸ºÔð¸ú×ÙËùÓеı¸Ó÷ÖÇøµÄ״̬,Èç¹û±¸Ó÷ÖÇø"Âäºó"Ì«¶à»òÕßʧЧ£¬Ö÷·ÖÇø½«»á°ÑËü´Óͬ²½ÁбíÖÐɾ³ý£»Ö÷±¸·ÖÇøµÄ¹ÜÀíÊÇͨ¹ýzookeeper½øÐеġ£
·¢²¼Ê±µÄ¿É¿¿ÐÔÈ¡¾öÓÚÁ½µã£º·¢ËͶ˵ÄÈ·ÈÏ»úÖÆ¡¢ÒÔ¼°KafkaϵͳÂ䵨µÄ²ßÂÔ¡£·¢ËͶËÖ§³ÖÎÞÈ·ÈÏ¡¢Ö÷·ÖÇøÈ·ÈÏ(Ö÷·ÖÇøÊÕµ½ÏûÏ¢ºó·¢ËÍÈ·ÈÏ»ØÖ´)¡¢ÒÔ¼°Ö÷±¸·ÖÇøÈ·ÈÏ(±¸Ó÷ÖÇøÏûϢͬ²½ºóÖ÷·ÖÇø²Å·¢ËÍÈ·ÈÏ»ØÖ´)ÈýÖÖ»úÖÆ£»KafkaϵͳÂ䵨µÄ²ßÂÔÓÐÁ½ÖÖË¢ÅÌ·½Ê½£ºÍ¨¹ýÅäÖÃÏûÏ¢Êý¡¢ÒÔ¼°ÅäÖÃË¢ÅÌʱ¼ä¼ä¸ô¡£
Ïû·ÑʱµÄ¿É¿¿ÐÔÈ¡¾öÓÚÏû·ÑÕߵĶÁÈ¡Âß¼£¬KafkaÊDz»±£´æÏûÏ¢µÄÈκÎ״̬µÄ¡£At most once¡¢At
least once ¡¢Exactly once ÈýÖÖģʽÐèÒª×Ô¼º°´ÕÕÒµÎñʵÏÖ£¬×îÈÝÒ×ʵÏÖ¾ÍÊÇAt least
once£¬Á½ÍâÁ½ÖÖÔÚ·Ö²¼Ê½ÏµÍ³Öж¼²»¿ÉÄÜ×öµ½ÍêÈ«µÄ¾ø¶ÔʵÏÖ£¬Ö»ÄÜÎÞÏÞ¿¿½ü£¬½µµÍ´íÎóÂÊ¡£
3¡¢ÏûÏ¢´æ´¢·½Ê½
ParitionÊÇÒÔÎļþµÄÐÎʽ´æ´¢ÔÚÎļþϵͳÖУ¬±ÈÈç´´½¨ÁËÒ»¸öÃûΪtipocTestµÄTopic£¬ÆäÓÐ4¸öParition£¬ÔÚKafkaµÄÊý¾ÝĿ¼ÏÂÃæ»áÓÐËĸöÎļþ¼Ð£¬°´ÕÕTopic-partnumÃüÃû¡£

ÿ¸öÎļþ¼ÐµÄÄÚÈÝ

ParitionÖеÄÿÌõMessageÓÉoffsetÀ´±íʾËüÔÚÕâ¸öParitionÖÐµÄÆ«ÒÆÁ¿£¬Õâ¸öoffset²»ÊǸÃMessageÔÚParitionÊý¾ÝÎļþÖеÄʵ¼Ê´æ´¢Î»Ö㬶øÊÇÂß¼ÉÏÒ»¸öÖµ£¬ËüΨһȷ¶¨ÁËParitionÖеÄÒ»ÌõMessage¡£Òò´Ë£¬¿ÉÒÔÈÏΪoffsetÊÇParitionÖÐMessageµÄid¡£ParitionÖеÄÿÌõMessage°üº¬ÁËÈý¸öÊôÐÔ£º
Offset ¡¢DataSize ¡¢Data£»ParitionµÄÊý¾ÝÎļþÔò°üº¬ÁËÈô¸ÉÌõÉÏÊö¸ñʽµÄMessage£¬°´offsetÓÉСµ½´óÅÅÁÐÔÚÒ»Æð£»KafkaÊÕµ½ÐµÄÏûÏ¢ºó×·¼Óµ½Îļþĩβ¼´¿É£¬ËùÒÔÏûÏ¢µÄ·¢²¼Ð§ÂÊÊǺܸߵġ£
ÏÂÃæÎÒÃÇÀ´Ë¼¿¼ÁíÒ»¸öÎÊÌ⣬Èç¹ûÒ»¸öParitionÖ»ÓÐÒ»¸öÊý¾ÝÎļþ»áÔõôÑù£¿ ÐÂÏûÏ¢ÊÇÌí¼ÓÔÚÎļþĩ⣬²»ÂÛÎļþÊý¾ÝÎļþÓжà´ó£¬Õâ¸ö²Ù×÷ÓÀÔ¶¶¼ÊÇO(1)¡£µ«ÊÇÔÚ¶ÁÈ¡µÄʱºò¸ù¾Ýoffset²éÕÒMessageÊÇ˳Ðò²éÕҵģ¬Òò´Ë£¬Èç¹ûÊý¾ÝÎļþºÜ´óµÄ»°£¬²éÕÒµÄЧÂʾ͵͡£ÄÇôKafkaÊÇÈçºÎ½â¾ö²éÕÒЧÂʵĵÄÎÊÌâÄØ£¿1)
·Ö¶Î¡¢2) Ë÷Òý¡£
4¡¢Êý¾ÝÎļþµÄ·Ö¶ÎÓëË÷Òý
Kafka½â¾ö²éѯЧÂʵÄÊÖ¶ÎÖ®Ò»Êǽ«Êý¾ÝÎļþ·Ö¶Î£¬¿ÉÒÔÅäÖÃÿ¸öÊý¾ÝÎļþµÄ×î´óÖµ£¬Ã¿¶Î·ÅÔÚÒ»¸öµ¥¶ÀµÄÊý¾ÝÎļþÀïÃæ£¬Êý¾ÝÎļþÒԸöÎÖÐ×îСµÄoffsetÃüÃû¡£ÕâÑùÔÚ²éÕÒÖ¸¶¨offsetµÄMessageµÄʱºò£¬Óöþ·Ö²éÕҾͿÉÒÔ¶¨Î»µ½¸ÃMessageÔÚÄĸö¶ÎÖС£
Êý¾ÝÎļþ·Ö¶ÎʹµÃ¿ÉÒÔÔÚÒ»¸ö½ÏСµÄÊý¾ÝÎļþÖвéÕÒ¶ÔÓ¦offsetµÄMessageÁË£¬µ«ÊÇÕâÒÀÈ»ÐèҪ˳ÐòɨÃè²ÅÄÜÕÒµ½¶ÔÓ¦offsetµÄMessage¡£ÎªÁ˽øÒ»²½Ìá¸ß²éÕÒµÄЧÂÊ£¬KafkaΪÿ¸ö·Ö¶ÎºóµÄÊý¾ÝÎļþ½¨Á¢ÁËË÷ÒýÎļþ£¬ÎļþÃûÓëÊý¾ÝÎļþµÄÃû×ÖÊÇÒ»ÑùµÄ£¬Ö»ÊÇÎļþÀ©Õ¹ÃûΪ.index¡£Ë÷ÒýÎļþÖаüº¬Èô¸É¸öË÷ÒýÌõÄ¿£¬Ã¿¸öÌõÄ¿±íʾÊý¾ÝÎļþÖÐÒ»ÌõMessageµÄË÷Òý¡ª¡ªOffsetÓëposition(MessageÔÚÊý¾ÝÎļþÖеľø¶ÔλÖÃ)µÄ¶ÔÓ¦¹ØÏµ£»indexÎļþÖв¢Ã»ÓÐΪÊý¾ÝÎļþÖеÄÿÌõMessage½¨Á¢Ë÷Òý£¬¶øÊDzÉÓÃÁËÏ¡Êè´æ´¢µÄ·½Ê½£¬Ã¿¸ôÒ»¶¨×Ö½ÚµÄÊý¾Ý½¨Á¢Ò»ÌõË÷Òý¡£ÕâÑù±ÜÃâÁËË÷ÒýÎļþÕ¼Óùý¶àµÄ¿Õ¼ä£¬´Ó¶ø¿ÉÒÔ½«Ë÷ÒýÎļþ±£ÁôÔÚÄÚ´æÖС£µ«È±µãÊÇûÓн¨Á¢Ë÷ÒýµÄMessageÒ²²»ÄÜÒ»´Î¶¨Î»µ½ÆäÔÚÊý¾ÝÎļþµÄλÖ㬴ӶøÐèÒª×öÒ»´Î˳ÐòɨÃ裬µ«ÊÇÕâ´Î˳ÐòɨÃèµÄ·¶Î§¾ÍºÜСÁË¡£
ÿ¸ö·Ö¶Î»¹ÓÐÒ»¸ö.timeindexË÷ÒýÎļþ£¬Õâ¸öÎļþµÄ¸ñʽÓë.indexÎļþ¸ñʽһÑù£¬Ëù¼Ç¼µÄ¶«Î÷ÊÇÏûÏ¢·¢²¼Ê±¼äÓëoffsetµÄÏ¡ÊèË÷Òý£¬ÓÃÓÚÏûÏ¢¶¨ÆÚɾ³ýʹÓá£
ÏÂͼÊÇÒ»¸ö·Ö¶ÎË÷ÒýµÄÀý×Ó

ÕâÌ×»úÖÆÊǽ¨Á¢ÔÚoffsetÊÇÓÐÐòµÄ£»Ë÷ÒýÎļþ±»Ó³Éäµ½ÄÚ´æÖУ¬ËùÒÔ²éÕÒµÄËÙ¶È»¹ÊǺܿìµÄ¡£Ò»¾ä»°£¬KafkaµÄMessage´æ´¢²ÉÓÃÁË·ÖÇø(Parition)¡¢·Ö¶Î(segment)ºÍÏ¡ÊèË÷ÒýÕ⼸¸öÊÖ¶ÎÀ´´ïµ½¸ßЧ·¢²¼ºÍËæ»ú¶ÁÈ¡¡£
5¡¢Ïû·Ñ¶ËÉè¼Æ
³öÓÚÐÔÄÜ¡¢ÈÝÔÖ·½ÃæµÄ¿¼ÂÇ£¬Êµ¼ÊÐèÇóÊÇÓжàConsumerÏû·ÑÒ»¸öTopicµÄÇé¿ö£»ÓÉÓÚ¶à¸öConsumerÖ®¼äÊÇÏ໥¶ÀÁ¢µÄ£¬¿ÉÒÔ²ÉÓþºÕùParitionÉϸڵķ½Ê½½øÐÐÏû·Ñ£¬Í¬Ò»¸öʱ¿ÌÖ»ÓÐÒ»¸öConsumerÔÚÏû·ÑÒ»¸öParition£¬¶à¸öConsumerÖ®¼ä¶¨ÆÚͬ²½offset״̬£»Èç¹ûÊÇÐèÒª¶àͨµÀÏû·Ñ£¬¿ÉÒÔ¾ºÕù²»Í¬µÄParition¶ÔÓ¦×ÊÔ´ÉϸÚÏû·Ñ¡£
ÓÉÓÚKafkaÊǰ´ÕÕoffset½øÐжÁÈ¡µÄ£¬Ò»°ãµÄclient¶¼·â×°³É£º¸ø¶¨Ò»¸öÆðʼoffsetºóÐø²»Í£µÄget¾Í¿ÉÒÔ˳Ðò¶ÁÈ¡ÁË£¬Ã»ÓÐÏû·ÑÈ·ÈϵĸÅÄKafkaÒ²²»»áά»¤Ã¿¸öÏûÏ¢¡¢Ã¿¸öConsumerµÄ״̬¡£ÆäʵʵÏÖÒ»Ì×Ïû·ÑÈ·ÈÏ»úÖÆÒ²²»ÄÑ£¬ÕâÐèÒªÎÒÃÇʵÏÖÒ»¸öproxy²ã£¬ÔÚproxy²ã±£ÁôÒ»¸öÑ»·»º³åÇø£¬ÒµÎñ¶ËÏû·ÑÈ·ÈϺ󷽿ɴӻº³åÇøÀïÃæÒÆ³ý£¬Èç¹ûÒ»¶Îʱ¼äûÓÐÈ·ÈÏ£¬Ï´ÎÀ´È¡µÄʱºòÖØ¸´Ï·¢ÏÂÈ¥£¬ÀàËÆÓÚtcp»¬¶¯´°¿ÚµÄ¸ÅÄî¡£
|