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

1Ôª 10Ôª 50Ôª





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



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

±¾ÎÄÊÇϵÁÐÎÄÕµĵڶþƪ£¬µÚһƪ "KafkaÉè¼Æ½âÎö£¨Ò»£©- Kafka±³¾°¼°¼Ü¹¹½éÉÜ"¡£

ÕªÒª

KafkaÔÚ0.8ÒÔǰµÄ°æ±¾ÖУ¬²¢²»ÌṩHigh Availablity»úÖÆ£¬Ò»µ©Ò»¸ö»ò¶à¸öBrokerå´»ú£¬Ôòå´»úÆÚ¼äÆäÉÏËùÓÐPartition¶¼ÎÞ·¨¼ÌÐøÌṩ·þÎñ¡£Èô¸ÃBrokerÓÀÔ¶²»ÄÜÔÙ»Ö¸´£¬Òà»ò´ÅÅ̹ÊÕÏ£¬ÔòÆäÉÏÊý¾Ý½«¶ªÊ§¡£¶øKafkaµÄÉè¼ÆÄ¿±êÖ®Ò»¼´ÊÇÌṩÊý¾Ý³Ö¾Ã»¯£¬Í¬Ê±¶ÔÓÚ·Ö²¼Ê½ÏµÍ³À´Ëµ£¬ÓÈÆäµ±¼¯Èº¹æÄ£ÉÏÉýµ½Ò»¶¨³Ì¶Èºó£¬Ò»Ì¨»òÕß¶ą̀»úÆ÷å´»úµÄ¿ÉÄÜÐÔ´ó´óÌá¸ß£¬¶ÔÓÚFailover»úÖÆµÄÐèÇó·Ç³£¸ß¡£Òò´Ë£¬Kafka´Ó0.8¿ªÊ¼ÌṩHigh Availability»úÖÆ¡£±¾ÎÄ´ÓData ReplicationºÍLeader ElectionÁ½·½Ãæ½éÉÜÁËKafkaµÄHA»úÖÆ¡£

ΪºÎÐèÒªReplication

ÔÚKafkaÔÚ0.8ÒÔǰµÄ°æ±¾ÖУ¬ÊÇûÓÐReplicationµÄ£¬Ò»µ©Ä³Ò»¸öBrokerå´»ú£¬ÔòÆäÉÏËùÓеÄPartitionÊý¾Ý¶¼²»¿É±»Ïû·Ñ£¬ÕâÓëKafkaÊý¾Ý³Ö¾ÃÐÔ¼°Delivery GuaranteeµÄÉè¼ÆÄ¿±êÏà㣡£Í¬Ê±Producer¶¼²»ÄÜÔÙ½«Êý¾Ý´æÓÚÕâЩPartitionÖС£

Èç¹ûProducerʹÓÃͬ²½Ä£Ê½ÔòProducer»áÔÚ³¢ÊÔÖØÐ·¢ËÍmessage.send.max.retries£¨Ä¬ÈÏֵΪ3£©´ÎºóÅ׳öException£¬Óû§¿ÉÒÔÑ¡ÔñÍ£Ö¹·¢ËͺóÐøÊý¾ÝÒ²¿ÉÑ¡Ôñ¼ÌÐøÑ¡Ôñ·¢ËÍ¡£¶øÇ°Õß»áÔì³ÉÊý¾ÝµÄ×èÈû£¬ºóÕß»áÔì³É±¾Ó¦·¢Íù¸ÃBrokerµÄÊý¾ÝµÄ¶ªÊ§¡£

Èç¹ûProducerʹÓÃÒ첽ģʽ£¬ÔòProducer»á³¢ÊÔÖØÐ·¢ËÍmessage.send.max.retries£¨Ä¬ÈÏֵΪ3£©´Îºó¼Ç¼¸ÃÒì³£²¢¼ÌÐø·¢ËͺóÐøÊý¾Ý£¬Õâ»áÔì³ÉÊý¾Ý¶ªÊ§²¢ÇÒÓû§Ö»ÄÜͨ¹ýÈÕÖ¾·¢ÏÖ¸ÃÎÊÌâ¡£

Óɴ˿ɼû£¬ÔÚûÓÐReplicationµÄÇé¿öÏ£¬Ò»µ©Ä³»úÆ÷å´»ú»òÕßij¸öBrokerÍ£Ö¹¹¤×÷Ôò»áÔì³ÉÕû¸öϵͳµÄ¿ÉÓÃÐÔ½µµÍ¡£Ëæ×ż¯Èº¹æÄ£µÄÔö¼Ó£¬Õû¸ö¼¯ÈºÖгöÏÖ¸ÃÀàÒì³£µÄ¼¸ÂÊ´ó´óÔö¼Ó£¬Òò´Ë¶ÔÓÚÉú²úϵͳ¶øÑÔReplication»úÖÆµÄÒýÈë·Ç³£ÖØÒª¡£

ΪºÎÐèÒªLeader Election

£¨±¾ÎÄËùÊöLeader ElectionÖ÷ÒªÖ¸ReplicaÖ®¼äµÄ£¨Leader Election£©

ÒýÈëReplicationÖ®ºó£¬Í¬Ò»¸öPartition¿ÉÄÜ»áÓжà¸öReplica£¬¶øÕâʱÐèÒªÔÚÕâЩReplicationÖ®¼äÑ¡³öÒ»¸öLeader£¬ProducerºÍConsumerÖ»ÓëÕâ¸öLeader½»»¥£¬ÆäËüReplica×÷ΪFollower´ÓLeaderÖи´ÖÆÊý¾Ý¡£

ÒòΪÐèÒª±£Ö¤Í¬Ò»¸öPartitionµÄ¶à¸öReplicaÖ®¼äµÄÊý¾ÝÒ»ÖÂÐÔ£¨ÆäÖÐÒ»¸öå´»úºóÆäËüReplica±ØÐëÒªÄܼÌÐø·þÎñ²¢ÇÒ¼´²»ÄÜÔì³ÉÊý¾ÝÖØ¸´Ò²²»ÄÜÔì³ÉÊý¾Ý¶ªÊ§£©¡£Èç¹ûûÓÐÒ»¸öLeader£¬ËùÓÐReplica¶¼¿Éͬʱ¶Á/дÊý¾Ý£¬ÄǾÍÐèÒª±£Ö¤¶à¸öReplicaÖ®¼ä»¥ÏࣨN¡ÁNÌõͨ·£©Í¬²½Êý¾Ý£¬Êý¾ÝµÄÒ»ÖÂÐÔºÍÓÐÐòÐԷdz£Äѱ£Ö¤£¬´ó´óÔö¼ÓÁËReplicationʵÏֵĸ´ÔÓÐÔ£¬Í¬Ê±Ò²Ôö¼ÓÁ˳öÏÖÒì³£µÄ¼¸ÂÊ¡£¶øÒýÈëLeaderºó£¬Ö»ÓÐLeader¸ºÔðÊý¾Ý¶Áд£¬FollowerÖ»ÏòLeader˳ÐòFetchÊý¾Ý£¨NÌõͨ·£©£¬ÏµÍ³¸ü¼Ó¼òµ¥ÇÒ¸ßЧ¡£

ÈçºÎ½«Replica¾ùÔÈ·Ö²¼µ½Õû¸ö¼¯Èº

ΪÁ˸üºÃµÄ×ö¸ºÔؾùºâ£¬Kafka¾¡Á¿½«ËùÓеÄPartition¾ùÔÈ·ÖÅäµ½Õû¸ö¼¯ÈºÉÏ¡£Ò»¸öµäÐ͵IJ¿Êð·½Ê½ÊÇÒ»¸öTopicµÄPartitionÊýÁ¿´óÓÚBrokerµÄÊýÁ¿¡£Í¬Ê±ÎªÁËÌá¸ßKafkaµÄÈÝ´íÄÜÁ¦£¬Ò²ÐèÒª½«Í¬Ò»¸öPartitionµÄReplica¾¡Á¿·ÖÉ¢µ½²»Í¬µÄ»úÆ÷¡£Êµ¼ÊÉÏ£¬Èç¹ûËùÓеÄReplica¶¼ÔÚͬһ¸öBrokerÉÏ£¬ÄÇÒ»µ©¸ÃBrokerå´»ú£¬¸ÃPartitionµÄËùÓÐReplica¶¼ÎÞ·¨¹¤×÷£¬Ò²¾Í´ï²»µ½HAµÄЧ¹û¡£Í¬Ê±£¬Èç¹ûij¸öBrokerå´»úÁË£¬ÐèÒª±£Ö¤ËüÉÏÃæµÄ¸ºÔØ¿ÉÒÔ±»¾ùÔȵķÖÅäµ½ÆäËüÐÒ´æµÄËùÓÐBrokerÉÏ¡£

Kafka·ÖÅäReplicaµÄËã·¨ÈçÏ£º

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

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

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

Data Replication

KafkaµÄData ReplicationÐèÒª½â¾öÈçÏÂÎÊÌ⣺

ÔõÑùPropagateÏûÏ¢

ÔÚÏòProducer·¢ËÍACKǰÐèÒª±£Ö¤ÓжàÉÙ¸öReplicaÒѾ­ÊÕµ½¸ÃÏûÏ¢

ÔõÑù´¦Àíij¸öReplica²»¹¤×÷µÄÇé¿ö

ÔõÑù´¦ÀíFailed Replica»Ö¸´»ØÀ´µÄÇé¿ö

PropagateÏûÏ¢

ProducerÔÚ·¢²¼ÏûÏ¢µ½Ä³¸öPartitionʱ£¬ÏÈͨ¹ýZookeeperÕÒµ½¸ÃPartitionµÄLeader£¬È»ºóÎÞÂÛ¸ÃTopicµÄReplication FactorΪ¶àÉÙ£¨Ò²¼´¸ÃPartitionÓжàÉÙ¸öReplica£©£¬ProducerÖ»½«¸ÃÏûÏ¢·¢Ë͵½¸ÃPartitionµÄLeader¡£Leader»á½«¸ÃÏûϢдÈëÆä±¾µØLog¡£Ã¿¸öFollower¶¼´ÓLeader pullÊý¾Ý¡£ÕâÖÖ·½Ê½ÉÏ£¬Follower´æ´¢µÄÊý¾Ý˳ÐòÓëLeader±£³ÖÒ»Ö¡£FollowerÔÚÊÕµ½¸ÃÏûÏ¢²¢Ð´ÈëÆäLogºó£¬ÏòLeader·¢ËÍACK¡£Ò»µ©LeaderÊÕµ½ÁËISRÖеÄËùÓÐReplicaµÄACK£¬¸ÃÏûÏ¢¾Í±»ÈÏΪÒѾ­commitÁË£¬Leader½«Ôö¼ÓHW²¢ÇÒÏòProducer·¢ËÍACK¡£

ΪÁËÌá¸ßÐÔÄÜ£¬Ã¿¸öFollowerÔÚ½ÓÊÕµ½Êý¾Ýºó¾ÍÁ¢ÂíÏòLeader·¢ËÍACK£¬¶ø·ÇµÈµ½Êý¾ÝдÈëLogÖС£Òò´Ë£¬¶ÔÓÚÒѾ­commitµÄÏûÏ¢£¬KafkaÖ»Äܱ£Ö¤Ëü±»´æÓÚ¶à¸öReplicaµÄÄÚ´æÖУ¬¶ø²»Äܱ£Ö¤ËüÃDZ»³Ö¾Ã»¯µ½´ÅÅÌÖУ¬Ò²¾Í²»ÄÜÍêÈ«±£Ö¤Òì³£·¢Éúºó¸ÃÌõÏûÏ¢Ò»¶¨Äܱ»ConsumerÏû·Ñ¡£µ«¿¼Âǵ½ÕâÖÖ³¡¾°·Ç³£ÉÙ¼û£¬¿ÉÒÔÈÏΪÕâÖÖ·½Ê½ÔÚÐÔÄܺÍÊý¾Ý³Ö¾Ã»¯ÉÏ×öÁËÒ»¸ö±È½ÏºÃµÄƽºâ¡£ÔÚ½«À´µÄ°æ±¾ÖУ¬Kafka»á¿¼ÂÇÌṩ¸ü¸ßµÄ³Ö¾ÃÐÔ¡£

Consumer¶ÁÏûÏ¢Ò²ÊÇ´ÓLeader¶ÁÈ¡£¬Ö»Óб»commit¹ýµÄÏûÏ¢£¨offsetµÍÓÚHWµÄÏûÏ¢£©²Å»á±©Â¶¸øConsumer¡£Kafka ReplicationµÄÊý¾ÝÁ÷ÈçÏÂͼËùʾ

ACKǰÐèÒª±£Ö¤ÓжàÉÙ¸ö±¸·Ý

ºÍ´ó²¿·Ö·Ö²¼Ê½ÏµÍ³Ò»Ñù£¬Kafka´¦Àíʧ°ÜÐèÒªÃ÷È·¶¨ÒåÒ»¸öBrokerÊÇ·ñ¡°»î×Å¡±¡£¶ÔÓÚKafka¶øÑÔ£¬Kafka´æ»î°üº¬Á½¸öÌõ¼þ£¬Ò»ÊÇËü±ØÐëά»¤ÓëZookeeperµÄsession(Õâ¸öͨ¹ýZookeeperµÄHeartbeat»úÖÆÀ´ÊµÏÖ)¡£¶þÊÇFollower±ØÐëÄܹ»¼°Ê±½«LeaderµÄÏûÏ¢¸´ÖƹýÀ´£¬²»ÄÜ¡°ÂäºóÌ«¶à¡±¡£

Leader»á¸ú×ÙÓëÆä±£³Öͬ²½µÄReplicaÁÐ±í£¬¸ÃÁÐ±í³ÆÎªISR£¨¼´in-sync Replica£©¡£Èç¹ûÒ»¸öFollowerå´»ú£¬»òÕßÂäºóÌ«¶à£¬Leader½«°ÑËü´ÓISRÖÐÒÆ³ý¡£ÕâÀïËùÃèÊöµÄ¡°ÂäºóÌ«¶à¡±Ö¸Follower¸´ÖƵÄÏûÏ¢ÂäºóÓÚLeaderºóµÄÌõÊý³¬¹ýÔ¤¶¨Öµ£¨¸ÃÖµ¿ÉÔÚ$KAFKA_HOME/config/server.propertiesÖÐͨ¹ýreplica.lag.max.messagesÅäÖã¬ÆäĬÈÏÖµÊÇ4000£©»òÕßFollower³¬¹ýÒ»¶¨Ê±¼ä£¨¸ÃÖµ¿ÉÔÚ$KAFKA_HOME/config/server.propertiesÖÐͨ¹ýreplica.lag.time.max.msÀ´ÅäÖã¬ÆäĬÈÏÖµÊÇ10000£©Î´ÏòLeader·¢ËÍfetchÇëÇ󡣡£

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

ÐèҪ˵Ã÷µÄÊÇ£¬KafkaÖ»½â¾öfail/recover£¬²»´¦Àí¡°Byzantine¡±£¨¡°°Ýռͥ¡±£©ÎÊÌâ¡£Ò»ÌõÏûÏ¢Ö»Óб»ISRÀïµÄËùÓÐFollower¶¼´ÓLeader¸´ÖƹýÈ¥²Å»á±»ÈÏΪÒÑÌá½»¡£ÕâÑù¾Í±ÜÃâÁ˲¿·ÖÊý¾Ý±»Ð´½øÁËLeader£¬»¹Ã»À´µÃ¼°±»ÈκÎFollower¸´ÖƾÍå´»úÁË£¬¶øÔì³ÉÊý¾Ý¶ªÊ§£¨ConsumerÎÞ·¨Ïû·ÑÕâЩÊý¾Ý£©¡£¶ø¶ÔÓÚProducer¶øÑÔ£¬Ëü¿ÉÒÔÑ¡ÔñÊÇ·ñµÈ´ýÏûÏ¢commit£¬Õâ¿ÉÒÔͨ¹ýrequest.required.acksÀ´ÉèÖá£ÕâÖÖ»úÖÆÈ·±£ÁËÖ»ÒªISRÓÐÒ»¸ö»òÒÔÉϵÄFollower£¬Ò»Ìõ±»commitµÄÏûÏ¢¾Í²»»á¶ªÊ§¡£ ¡¡¡¡

Leader ElectionËã·¨

ÉÏÎÄ˵Ã÷ÁËKafkaÊÇÈçºÎ×öReplicationµÄ£¬ÁíÍâÒ»¸öºÜÖØÒªµÄÎÊÌâÊǵ±Leaderå´»úÁË£¬ÔõÑùÔÚFollowerÖÐÑ¡¾Ù³öеÄLeader¡£ÒòΪFollower¿ÉÄÜÂäºóÐí¶à»òÕßcrashÁË£¬ËùÒÔ±ØÐëÈ·±£Ñ¡Ôñ¡°×îС±µÄFollower×÷ΪеÄLeader¡£Ò»¸ö»ù±¾µÄÔ­Ôò¾ÍÊÇ£¬Èç¹ûLeader²»ÔÚÁË£¬ÐµÄLeader±ØÐëÓµÓÐÔ­À´µÄLeader commit¹ýµÄËùÓÐÏûÏ¢¡£Õâ¾ÍÐèÒª×÷Ò»¸öÕÛÖÔ£¬Èç¹ûLeaderÔÚ±êÃ÷Ò»ÌõÏûÏ¢±»commitǰµÈ´ý¸ü¶àµÄFollowerÈ·ÈÏ£¬ÄÇÔÚËüå´»úÖ®ºó¾ÍÓиü¶àµÄFollower¿ÉÒÔ×÷ΪеÄLeader£¬µ«ÕâÒ²»áÔì³ÉÍÌÍÂÂʵÄϽµ¡£

Ò»Öַdz£³£ÓõÄLeader ElectionµÄ·½Ê½ÊÇ¡°Majority Vote¡±£¨¡°ÉÙÊý·þ´Ó¶àÊý¡±£©£¬µ«Kafka²¢Î´²ÉÓÃÕâÖÖ·½Ê½¡£ÕâÖÖģʽÏ£¬Èç¹ûÎÒÃÇÓÐ2f+1¸öReplica£¨°üº¬LeaderºÍFollower£©£¬ÄÇÔÚcommit֮ǰ±ØÐë±£Ö¤ÓÐf+1¸öReplica¸´ÖÆÍêÏûÏ¢£¬ÎªÁ˱£Ö¤ÕýÈ·Ñ¡³öеÄLeader£¬failµÄReplica²»Äܳ¬¹ýf¸ö¡£ÒòΪÔÚʣϵÄÈÎÒâf+1¸öReplicaÀÖÁÉÙÓÐÒ»¸öReplica°üº¬ÓÐ×îеÄËùÓÐÏûÏ¢¡£ÕâÖÖ·½Ê½ÓиöºÜ´óµÄÓÅÊÆ£¬ÏµÍ³µÄlatencyֻȡ¾öÓÚ×î¿ìµÄ¼¸¸öBroker£¬¶ø·Ç×îÂýÄǸö¡£Majority VoteÒ²ÓÐһЩÁÓÊÆ£¬ÎªÁ˱£Ö¤Leader ElectionµÄÕý³£½øÐУ¬ËüËùÄÜÈÝÈ̵ÄfailµÄfollower¸öÊý±È½ÏÉÙ¡£Èç¹ûÒªÈÝÈÌ1¸öfollower¹Òµô£¬±ØÐëÒªÓÐ3¸öÒÔÉϵÄReplica£¬Èç¹ûÒªÈÝÈÌ2¸öFollower¹Òµô£¬±ØÐëÒªÓÐ5¸öÒÔÉϵÄReplica¡£Ò²¾ÍÊÇ˵£¬ÔÚÉú²ú»·¾³ÏÂΪÁ˱£Ö¤½Ï¸ßµÄÈÝ´í³Ì¶È£¬±ØÐëÒªÓдóÁ¿µÄReplica£¬¶ø´óÁ¿µÄReplicaÓÖ»áÔÚ´óÊý¾ÝÁ¿Ïµ¼ÖÂÐÔÄܵļ±¾çϽµ¡£Õâ¾ÍÊÇÕâÖÖËã·¨¸ü¶àÓÃÔÚZookeeperÕâÖÖ¹²Ïí¼¯ÈºÅäÖõÄϵͳÖжøºÜÉÙÔÚÐèÒª´æ´¢´óÁ¿Êý¾ÝµÄϵͳÖÐʹÓõÄÔ­Òò¡£ÀýÈçHDFSµÄHA FeatureÊÇ»ùÓÚmajority-vote-based journal£¬µ«ÊÇËüµÄÊý¾Ý´æ´¢²¢Ã»ÓÐʹÓÃÕâÖÖ·½Ê½¡£

ʵ¼ÊÉÏ£¬Leader ElectionËã·¨·Ç³£¶à£¬±ÈÈçZookeeperµÄZab, RaftºÍViewstamped Replication¡£¶øKafkaËùʹÓõÄLeader ElectionËã·¨¸üÏñ΢ÈíµÄPacificAËã·¨¡£

KafkaÔÚZookeeperÖж¯Ì¬Î¬»¤ÁËÒ»¸öISR£¨in-sync replicas£©£¬Õâ¸öISRÀïµÄËùÓÐReplica¶¼¸úÉÏÁËleader£¬Ö»ÓÐISRÀïµÄ³ÉÔ±²ÅÓб»Ñ¡ÎªLeaderµÄ¿ÉÄÜ¡£ÔÚÕâÖÖģʽÏ£¬¶ÔÓÚf+1¸öReplica£¬Ò»¸öPartitionÄÜÔÚ±£Ö¤²»¶ªÊ§ÒѾ­commitµÄÏûÏ¢µÄǰÌáÏÂÈÝÈÌf¸öReplicaµÄʧ°Ü¡£ÔÚ´ó¶àÊýʹÓó¡¾°ÖУ¬ÕâÖÖģʽÊǷdz£ÓÐÀûµÄ¡£ÊÂʵÉÏ£¬ÎªÁËÈÝÈÌf¸öReplicaµÄʧ°Ü£¬Majority VoteºÍISRÔÚcommitǰÐèÒªµÈ´ýµÄReplicaÊýÁ¿ÊÇÒ»ÑùµÄ£¬µ«ÊÇISRÐèÒªµÄ×ܵÄReplicaµÄ¸öÊý¼¸ºõÊÇMajority VoteµÄÒ»°ë¡£

ËäÈ»Majority VoteÓëISRÏà±ÈÓв»ÐèµÈ´ý×îÂýµÄBrokerÕâÒ»ÓÅÊÆ£¬µ«ÊÇKafka×÷ÕßÈÏΪKafka¿ÉÒÔͨ¹ýProducerÑ¡ÔñÊÇ·ñ±»commit×èÈûÀ´¸ÄÉÆÕâÒ»ÎÊÌ⣬²¢ÇÒ½ÚÊ¡ÏÂÀ´µÄReplicaºÍ´ÅÅÌʹµÃISRģʽÈÔȻֵµÃ¡£ ¡¡

ÈçºÎ´¦ÀíËùÓÐReplica¶¼²»¹¤×÷

ÉÏÎÄÌáµ½£¬ÔÚISRÖÐÖÁÉÙÓÐÒ»¸öfollowerʱ£¬Kafka¿ÉÒÔÈ·±£ÒѾ­commitµÄÊý¾Ý²»¶ªÊ§£¬µ«Èç¹ûij¸öPartitionµÄËùÓÐReplica¶¼å´»úÁË£¬¾ÍÎÞ·¨±£Ö¤Êý¾Ý²»¶ªÊ§ÁË¡£ÕâÖÖÇé¿öÏÂÓÐÁ½ÖÖ¿ÉÐеķ½°¸£º

µÈ´ýISRÖеÄÈÎÒ»¸öReplica¡°»î¡±¹ýÀ´£¬²¢ÇÒÑ¡Ëü×÷ΪLeader

Ñ¡ÔñµÚÒ»¸ö¡°»î¡±¹ýÀ´µÄReplica£¨²»Ò»¶¨ÊÇISRÖеģ©×÷ΪLeader

Õâ¾ÍÐèÒªÔÚ¿ÉÓÃÐÔºÍÒ»ÖÂÐÔµ±ÖÐ×÷³öÒ»¸ö¼òµ¥µÄÕÛÖÔ¡£Èç¹ûÒ»¶¨ÒªµÈ´ýISRÖеÄReplica¡°»î¡±¹ýÀ´£¬ÄDz»¿ÉÓõÄʱ¼ä¾Í¿ÉÄÜ»áÏà¶Ô½Ï³¤¡£¶øÇÒÈç¹ûISRÖеÄËùÓÐReplica¶¼ÎÞ·¨¡°»î¡±¹ýÀ´ÁË£¬»òÕßÊý¾Ý¶¼¶ªÊ§ÁË£¬Õâ¸öPartition½«ÓÀÔ¶²»¿ÉÓá£Ñ¡ÔñµÚÒ»¸ö¡°»î¡±¹ýÀ´µÄReplica×÷ΪLeader£¬¶øÕâ¸öReplica²»ÊÇISRÖеÄReplica£¬ÄǼ´Ê¹Ëü²¢²»±£Ö¤ÒѾ­°üº¬ÁËËùÓÐÒÑcommitµÄÏûÏ¢£¬ËüÒ²»á³ÉΪLeader¶ø×÷ΪconsumerµÄÊý¾ÝÔ´£¨Ç°ÎÄÓÐ˵Ã÷£¬ËùÓжÁд¶¼ÓÉLeaderÍê³É£©¡£Kafka0.8.*ʹÓÃÁ˵ڶþÖÖ·½Ê½¡£¸ù¾ÝKafkaµÄÎĵµ£¬ÔÚÒÔºóµÄ°æ±¾ÖУ¬KafkaÖ§³ÖÓû§Í¨¹ýÅäÖÃÑ¡ÔñÕâÁ½ÖÖ·½Ê½ÖеÄÒ»ÖÖ£¬´Ó¶ø¸ù¾Ý²»Í¬µÄʹÓó¡¾°Ñ¡Ôñ¸ß¿ÉÓÃÐÔ»¹ÊÇǿһÖÂÐÔ¡£ ¡¡¡¡

ÈçºÎÑ¡¾ÙLeader

×î¼òµ¥×îÖ±¹ÛµÄ·½°¸ÊÇ£¬ËùÓÐFollower¶¼ÔÚZookeeperÉÏÉèÖÃÒ»¸öWatch£¬Ò»µ©Leaderå´»ú£¬Æä¶ÔÓ¦µÄephemeral znode»á×Ô¶¯É¾³ý£¬´ËʱËùÓÐFollower¶¼³¢ÊÔ´´½¨¸Ã½Úµã£¬¶ø´´½¨³É¹¦Õߣ¨Zookeeper±£Ö¤Ö»ÓÐÒ»¸öÄÜ´´½¨³É¹¦£©¼´ÊÇеÄLeader£¬ÆäËüReplica¼´ÎªFollower¡£

µ«ÊǸ÷½·¨»áÓÐ3¸öÎÊÌ⣺ ¡¡¡¡

split-brain ÕâÊÇÓÉZookeeperµÄÌØÐÔÒýÆðµÄ£¬ËäÈ»ZookeeperÄܱ£Ö¤ËùÓÐWatch°´Ë³Ðò´¥·¢£¬µ«²¢²»Äܱ£Ö¤Í¬Ò»Ê±¿ÌËùÓÐReplica¡°¿´¡±µ½µÄ״̬ÊÇÒ»ÑùµÄ£¬Õâ¾Í¿ÉÄÜÔì³É²»Í¬ReplicaµÄÏìÓ¦²»Ò»ÖÂ

herd effect Èç¹ûå´»úµÄÄǸöBrokerÉϵÄPartition±È½Ï¶à£¬»áÔì³É¶à¸öWatch±»´¥·¢£¬Ôì³É¼¯ÈºÄÚ´óÁ¿µÄµ÷Õû

Zookeeper¸ºÔعýÖØ ÿ¸öReplica¶¼ÒªÎª´ËÔÚZookeeperÉÏ×¢²áÒ»¸öWatch£¬µ±¼¯Èº¹æÄ£Ôö¼Óµ½¼¸Ç§¸öPartitionʱZookeeper¸ºÔØ»á¹ýÖØ¡£

Kafka 0.8.*µÄLeader Election·½°¸½â¾öÁËÉÏÊöÎÊÌ⣬ËüÔÚËùÓÐbrokerÖÐÑ¡³öÒ»¸öcontroller£¬ËùÓÐPartitionµÄLeaderÑ¡¾Ù¶¼ÓÉcontroller¾ö¶¨¡£controller»á½«LeaderµÄ¸Ä±äÖ±½Óͨ¹ýRPCµÄ·½Ê½£¨±ÈZookeeper QueueµÄ·½Ê½¸ü¸ßЧ£©Í¨ÖªÐèΪ´Ë×÷³öÏìÓ¦µÄBroker¡£Í¬Ê±controllerÒ²¸ºÔðÔöɾTopicÒÔ¼°ReplicaµÄÖØÐ·ÖÅä¡£

HAÏà¹ØZookeeper½á¹¹

£¨±¾½ÚËùʾZookeeper½á¹¹ÖУ¬ÊµÏß¿ò´ú±í·¾¶ÃûÊǹ̶¨µÄ£¬¶øÐéÏß¿ò´ú±í·¾¶ÃûÓëÒµÎñÏà¹Ø£©

admin £¨¸ÃĿ¼ÏÂznodeÖ»ÓÐÔÚÓÐÏà¹Ø²Ù×÷ʱ²Å»á´æÔÚ£¬²Ù×÷½áÊøÊ±»á½«Æäɾ³ý£©

/admin/preferred_replica_election Êý¾Ý½á¹¹

/admin/reassign_partitionsÓÃÓÚ½«Ò»Ð©Partition·ÖÅäµ½²»Í¬µÄbroker¼¯ºÏÉÏ¡£¶ÔÓÚÿ¸ö´ýÖØÐ·ÖÅäµÄPartition£¬Kafka»áÔÚ¸ÃznodeÉÏ´æ´¢ÆäËùÓеÄReplicaºÍÏàÓ¦µÄBroker id¡£¸ÃznodeÓɹÜÀí½ø³Ì´´½¨²¢ÇÒÒ»µ©ÖØÐ·ÖÅä³É¹¦Ëü½«»á±»×Ô¶¯ÒƳý¡£ÆäÊý¾Ý½á¹¹ÈçÏÂ

/admin/delete_topicsÊý¾Ý½á¹¹

brokers

broker£¨¼´/brokers/ids/[brokerId]£©´æ´¢¡°»î×Å¡±µÄBrokerÐÅÏ¢¡£Êý¾Ý½á¹¹ÈçÏÂ

topic×¢²áÐÅÏ¢£¨/brokers/topics/[topic]£©£¬´æ´¢¸ÃTopicµÄËùÓÐPartitionµÄËùÓÐReplicaËùÔÚµÄBroker id£¬µÚÒ»¸öReplica¼´ÎªPreferred Replica£¬¶ÔÒ»¸ö¸ø¶¨µÄPartition£¬ËüÔÚͬһ¸öBrokerÉÏ×î¶àÖ»ÓÐÒ»¸öReplica,Òò´ËBroker id¿É×÷ΪReplica id¡£Êý¾Ý½á¹¹ÈçÏÂ

partition state £¨/brokers/topics/[topic] /partitions/ [partitionId]/state£© ½á¹¹ÈçÏÂ

controller

/controller -> int (broker id of the controller)´æ´¢µ±Ç°controllerµÄÐÅÏ¢

/controller_epoch -> int (epoch)Ö±½ÓÒÔÕûÊýÐÎʽ´æ´¢controller epoch£¬¶ø·ÇÏñÆäËüznodeÒ»ÑùÒÔJSON×Ö·û´®ÐÎʽ´æ´¢¡£ ¡¡¡¡

Broker failover¹ý³Ì¼ò½é

1.ControllerÔÚZookeeper×¢²áWatch£¬Ò»µ©ÓÐBrokerå´»ú£¨ÕâÊÇÓÃå´»ú´ú±íÈκÎÈÃϵͳÈÏΪÆädieµÄÇé¾°£¬°üÀ¨µ«²»ÏÞÓÚ»úÆ÷¶Ïµç£¬ÍøÂç²»¿ÉÓã¬GCµ¼ÖµÄStop The World£¬½ø³ÌcrashµÈ£©£¬ÆäÔÚZookeeper¶ÔÓ¦µÄznode»á×Ô¶¯±»É¾³ý£¬Zookeeper»áfire Controller×¢²áµÄwatch£¬Controller¶ÁÈ¡×îеÄÐÒ´æµÄBroker

2.Controller¾ö¶¨set_p£¬¸Ã¼¯ºÏ°üº¬ÁËå´»úµÄËùÓÐBrokerÉϵÄËùÓÐPartition

3.¶Ôset_pÖеÄÿһ¸öPartition

3.1 ´Ó/brokers/topics/[topic] /partitions/[partition]/state¶ÁÈ¡¸ÃPartitionµ±Ç°µÄISR

3.2 ¾ö¶¨¸ÃPartitionµÄÐÂLeader¡£Èç¹ûµ±Ç°ISRÖÐÓÐÖÁÉÙÒ»¸öReplica»¹ÐҴ棬ÔòÑ¡ÔñÆäÖÐÒ»¸ö×÷ΪÐÂLeader£¬ÐµÄISRÔò°üº¬µ±Ç°ISRÖÐËùÓÐÐÒ´æµÄReplica¡£·ñÔòÑ¡Ôñ¸ÃPartitionÖÐÈÎÒâÒ»¸öÐÒ´æµÄReplica×÷ΪеÄLeaderÒÔ¼°ISR£¨¸Ã³¡¾°Ï¿ÉÄÜ»áÓÐDZÔÚµÄÊý¾Ý¶ªÊ§£©¡£Èç¹û¸ÃPartitionµÄËùÓÐReplica¶¼å´»úÁË£¬Ôò½«ÐµÄLeaderÉèÖÃΪ-1¡£

3.3 ½«ÐµÄLeader£¬ISRºÍеÄleader_epoch¼°controller_epochдÈë/brokers/topics/[topic] /partitions/[partition]/state¡£×¢Ò⣬¸Ã²Ù×÷Ö»ÓÐÆäversionÔÚ3.1ÖÁ3.3µÄ¹ý³ÌÖÐÎޱ仯ʱ²Å»áÖ´ÐУ¬·ñÔòÌø×ªµ½3.1

4.Ö±½Óͨ¹ýRPCÏòset_pÏà¹ØµÄBroker·¢ËÍLeaderAndISRRequestÃüÁî¡£Controller¿ÉÒÔÔÚÒ»¸öRPC²Ù×÷Öз¢ËͶà¸öÃüÁî´Ó¶øÌá¸ßЧÂÊ¡£

Broker failover˳ÐòͼÈçÏÂËùʾ¡£

ÏÂÆªÔ¤¸æ

ÏÂÆªÎÄÕ½«Ïêϸ½éÉÜKafka HAÏà¹ØµÄÒì³£Çé¿ö´¦Àí£¬ÀýÈ磬ÔõÑù´¦ÀíBroker failover£¬FollowerÈçºÎ´ÓLeader fetchÏûÏ¢£¬ÈçºÎÖØÐ·ÖÅäReplica£¬ÈçºÎ´¦ÀíController failureµÈ¡£

   
2617 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

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

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

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