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

1Ôª 10Ôª 50Ôª





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



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

±¾ÎÄÊÇϵÁÐÎÄÕµĵÚ4ƪ£¬

µÚһƪ "KafkaÉè¼Æ½âÎö£¨Ò»£©- Kafka±³¾°¼°¼Ü¹¹½éÉÜ"

µÚ¶þƪ KafkaÉè¼Æ½âÎö£¨¶þ£©- Kafka High Availability £¨ÉÏ£©

µÚÈýƪ KafkaÉè¼Æ½âÎö£¨Èý£©- Kafka High Availability £¨ÖУ©

±¾ÎÄÔÚǰÁ½ÆªµÄ»ù´¡ÉÏ£¬½éÉÜÁËKafkaÌṩµÄÓëReplicationÏà¹ØµÄ¹¤¾ß£¬ÈçÖØÐ·ÖÅäPartitionµÈ¡£

Topic Tool

$KAFKA_HOME/bin/kafka-topics.sh£¬¸Ã¹¤¾ß¿ÉÓÃÓÚ´´½¨¡¢É¾³ý¡¢Ð޸ġ¢²é¿´Ä³¸öTopic£¬Ò²¿ÉÓÃÓÚÁгöËùÓÐTopic¡£ÁíÍ⣬¸Ã¹¤¾ß»¹¿ÉÐÞ¸ÄÒÔÏÂÅäÖá£

unclean.leader.election.enable

delete.retention.ms

segment.jitter.ms

retention.ms

flush.ms

segment.bytes

flush.messages

segment.ms

retention.bytes

cleanup.policy

segment.index.bytes

min.cleanable.dirty.ratio

max.message.bytes

file.delete.delay.ms

min.insync.replicas

index.interval.bytes

Replica Verification Tool

$KAFKA_HOME/bin/kafka-replica-verification.sh£¬¸Ã¹¤¾ßÓÃÀ´ÑéÖ¤ËùÖ¸¶¨µÄÒ»¸ö»ò¶à¸öTopicÏÂÿ¸öPartition¶ÔÓ¦µÄËùÓÐReplicaÊÇ·ñ¶¼Í¬²½¡£¿Éͨ¹ýtopic-white-listÕâÒ»²ÎÊýÖ¸¶¨ËùÐèÒªÑéÖ¤µÄËùÓÐTopic£¬Ö§³ÖÕýÔò±í´ïʽ¡£

Preferred Replica Leader Election Tool

ÓÃ;

ÓÐÁËReplication»úÖÆºó£¬Ã¿¸öPartition¿ÉÄÜÓжà¸ö±¸·Ý¡£Ä³¸öPartitionµÄReplicaÁбí½Ð×÷AR£¨Assigned Replicas£©£¬ARÖеĵÚÒ»¸öReplica¼´Îª¡°Preferred Replica¡±¡£´´½¨Ò»¸öеÄTopic»òÕ߸øÒÑÓÐTopicÔö¼ÓPartitionʱ£¬Kafka±£Ö¤Preferred Replica±»¾ùÔÈ·Ö²¼µ½¼¯ÈºÖеÄËùÓÐBrokerÉÏ¡£ÀíÏëÇé¿öÏ£¬Preferred Replica»á±»Ñ¡ÎªLeader¡£ÒÔÉÏÁ½µã±£Ö¤ÁËËùÓÐPartitionµÄLeader±»¾ùÔÈ·Ö²¼µ½Á˼¯Èºµ±ÖУ¬ÕâÒ»µã·Ç³£ÖØÒª£¬ÒòΪËùÓеĶÁд²Ù×÷¶¼ÓÉLeaderÍê³É£¬ÈôLeader·Ö²¼¹ýÓÚ¼¯ÖУ¬»áÔì³É¼¯Èº¸ºÔز»¾ùºâ¡£µ«ÊÇ£¬Ëæ×ż¯ÈºµÄÔËÐУ¬¸Ãƽºâ¿ÉÄÜ»áÒòΪBrokerµÄå´»ú¶ø±»´òÆÆ£¬¸Ã¹¤¾ß¾ÍÊÇÓÃÀ´°ïÖú»Ö¸´Leader·ÖÅäµÄƽºâ¡£

ÊÂʵÉÏ£¬Ã¿¸öTopic´Óʧ°ÜÖлָ´¹ýÀ´ºó£¬ËüĬÈϻᱻÉèÖÃΪFollower½ÇÉ«£¬³ý·Çij¸öPartitionµÄReplicaÈ«²¿å´»ú£¬¶øµ±Ç°BrokerÊǸÃPartitionµÄARÖеÚÒ»¸ö»Ö¸´»ØÀ´µÄReplica¡£Òò´Ë£¬Ä³¸öPartitionµÄLeader£¨Preferred Replica£©å´»ú²¢»Ö¸´ºó£¬ËüºÜ¿ÉÄܲ»ÔÙÊǸÃPartitionµÄLeader£¬µ«ÈÔÈ»ÊÇPreferred Replica¡£

Ô­Àí

ÔÚZookeeperÉÏ´´½¨/admin/preferred_replica_election½Úµã£¬²¢´æÈëÐèÒªµ÷ÕûPreferred ReplicaµÄPartitionÐÅÏ¢¡£

ControllerÒ»Ö±Watch¸Ã½Úµã£¬Ò»µ©¸Ã½Úµã±»´´½¨£¬Controller»áÊÕµ½Í¨Öª£¬²¢»ñÈ¡¸ÃÄÚÈÝ¡£

Controller¶ÁÈ¡Preferred Replica£¬Èç¹û·¢ÏÖ¸ÃReplicaµ±Ç°²¢·ÇÊÇLeader²¢ÇÒËüÔÚ¸ÃPartitionµÄISRÖУ¬ControllerÏò¸ÃReplica·¢ËÍLeaderAndIsrRequest£¬Ê¹¸ÃReplica³ÉΪLeader¡£Èç¹û¸ÃReplicaµ±Ç°²¢·ÇÊÇLeader£¬ÇÒ²»ÔÚISRÖУ¬ControllerΪÁ˱£Ö¤Ã»ÓÐÊý¾Ý¶ªÊ§£¬²¢²»»á½«ÆäÉèÖÃΪLeader¡£

Ó÷¨

$KAFKA_HOME/bin/kafka-preferred-replica-election.sh ¡ªzookeeper localhost:2181

ÔÚ°üº¬8¸öBrokerµÄKafka¼¯ÈºÉÏ£¬´´½¨1¸öÃûΪtopic1£¬replication-factorΪ3£¬PartitionÊýΪ8µÄTopic£¬Ê¹ÓÃÈçÏÂÃüÁî$KAFKA_HOME/bin/kafka-topics.sh --describe --topic topic1 --zookeeper localhost:2181²é¿´ÆäPartition/Replica·Ö²¼¡£

²éѯ½á¹ûÈçÏÂͼËùʾ£¬´ÓͼÖпÉÒÔ¿´µ½£¬Kafka½«ËùÓÐReplica¾ùÔÈ·Ö²¼µ½ÁËÕû¸ö¼¯Èº£¬²¢ÇÒLeaderÒ²¾ùÔÈ·Ö²¼¡£

ÊÖ¶¯Í£Ö¹²¿·ÖBroker£¬topic1µÄPartition/Replica·Ö²¼ÈçÏÂͼËùʾ¡£´ÓͼÖпÉÒÔ¿´µ½£¬ÓÉÓÚBroker 1/2/4¶¼±»Í£Ö¹£¬Partition 0µÄLeaderÓÉÔ­À´µÄ1±äΪ3£¬Partition 1µÄLeaderÓÉÔ­À´µÄ2±äΪ5£¬Partition 2µÄLeaderÓÉÔ­À´µÄ3±äΪ6£¬Partition 3µÄLeaderÓÉÔ­À´µÄ4±äΪ7¡£

ÔÙÖØÐÂÆô¶¯IDΪ1µÄBroker£¬topic1µÄPartition/Replica·Ö²¼ÈçÏ¡£¿ÉÒÔ¿´µ½£¬ËäÈ»Broker 1ÒѾ­Æô¶¯£¨Partition 0ºÍPartition5µÄISRÖÐÓÐ1£©£¬µ«ÊÇ1²¢²»ÊÇÈκÎÒ»¸öParititonµÄLeader£¬¶øBroker 5/6/7¶¼ÊÇ2¸öPartitionµÄLeader£¬¼´LeaderµÄ·Ö²¼²»¾ùºâ¡ª¡ªÒ»¸öBroker×î¶àÊÇ2¸öPartitionµÄLeader£¬¶ø×îÉÙÊÇ0¸öPartitionµÄLeader¡£

ÔËÐиù¤¾ßºó£¬topic1µÄPartition/Replica·Ö²¼ÈçÏÂͼËùʾ¡£ÓÉͼ¿É¼û£¬³ýÁËPartition 1ºÍPartition 3ÓÉÓÚBroker 2ºÍBroker 4»¹Î´Æô¶¯£¬ËùÒÔÆäLeader²»ÊÇÆäPreferred RepliacÍ⣬ÆäËüËùÓÐPartitionµÄLeader¶¼ÊÇÆäPreferred Replica¡£Í¬Ê±£¬ÓëÔËÐиù¤¾ßǰÏà±È£¬LeaderµÄ·ÖÅä¸ü¾ùÔÈ¡ª¡ªÒ»¸öBroker×î¶àÊÇ2¸öParittionµÄLeader£¬×îÉÙÊÇ1¸öPartitionµÄLeader¡£

Æô¶¯Broker 2ºÍBroker 4£¬Leader·Ö²¼ÓëÉÏÒ»²½Ïà±È²¢Î´±ä»¯£¬ÈçÏÂͼËùʾ¡£

ÔÙ´ÎÔËÐиù¤¾ß£¬ËùÓÐPartitionµÄLeader¶¼ÓÉÆäPreferred Replica³Ðµ££¬Leader·Ö²¼¸ü¾ùÔÈ¡ª¡ªÃ¿¸öBroker³Ðµ£1¸öPartitionµÄLeader½ÇÉ«¡£

³ýÁËÊÖ¶¯ÔËÐиù¤¾ßʹLeader·ÖÅä¾ùÔÈÍ⣬Kafka»¹ÌṩÁË×Ô¶¯Æ½ºâLeader·ÖÅäµÄ¹¦ÄÜ£¬¸Ã¹¦ÄÜ¿Éͨ¹ý½«auto.leader.rebalance.enableÉèÖÃΪtrue¿ªÆô£¬Ëü½«ÖÜÆÚÐÔ¼ì²éLeader·ÖÅäÊÇ·ñƽºâ£¬Èô²»Æ½ºâ¶È³¬¹ýÒ»¶¨ãÐÖµÔò×Ô¶¯ÓÉController³¢ÊÔ½«¸÷PartitionµÄLeaderÉèÖÃΪÆäPreferred Replica¡£¼ì²éÖÜÆÚÓÉleader.imbalance.check.interval.secondsÖ¸¶¨£¬²»Æ½ºâ¶ÈãÐÖµÓÉleader.imbalance.per.broker.percentageÖ¸¶¨¡£

Reassign Partitions Tool

ÓÃ;

¸Ã¹¤¾ßµÄÉè¼ÆÄ¿±êÓëPreferred Replica Leader Election ToolÓÐЩÀàËÆ£¬¶¼Ö¼ÔÚ´Ù½øKafka¼¯ÈºµÄ¸ºÔؾùºâ¡£²»Í¬µÄÊÇ£¬Preferred Replica Leader ElectionÖ»ÄÜÔÚPartitionµÄAR·¶Î§ÄÚµ÷ÕûÆäLeader£¬Ê¹Leader·Ö²¼¾ùÔÈ£¬¶ø¸Ã¹¤¾ß»¹¿ÉÒÔµ÷ÕûPartitionµÄAR¡£

FollowerÐèÒª´ÓLeader FetchÊý¾ÝÒÔ±£³ÖÓëLeaderͬ²½£¬ËùÒÔ½ö½ö±£³ÖLeader·Ö²¼µÄƽºâ¶ÔÕû¸ö¼¯ÈºµÄ¸ºÔؾùºâÀ´ËµÊDz»¹»µÄ¡£ÁíÍ⣬Éú²ú»·¾³Ï£¬Ëæ×ŸºÔصÄÔö´ó£¬¿ÉÄÜÐèÒª¸øKafka¼¯ÈºÀ©ÈÝ¡£ÏòKafka¼¯ÈºÖÐÔö¼ÓBroker·Ç³£¼òµ¥·½±ã£¬µ«ÊǶÔÓÚÒÑÓеÄTopic£¬²¢²»»á×Ô¶¯½«ÆäPartitionÇ¨ÒÆµ½Ð¼ÓÈëµÄBrokerÉÏ£¬´Ëʱ¿ÉÓøù¤¾ß´ïµ½´ËÄ¿µÄ¡£Ä³Ð©³¡¾°Ï£¬Êµ¼Ê¸ºÔØ¿ÉÄÜԶСÓÚ×î³õÔ¤ÆÚ¸ºÔØ£¬´Ëʱ¿ÉÓøù¤¾ß½«·Ö²¼ÔÚÕû¸ö¼¯ÈºÉϵÄPartition֨װ·ÖÅ䵽ijЩ»úÆ÷ÉÏ£¬È»ºó¿ÉÒÔÍ£Ö¹²»ÐèÒªµÄBroker´Ó¶øÊµÏÖ½ÚÔ¼×ÊÔ´µÄÄ¿µÄ¡£

ÐèҪ˵Ã÷µÄÊÇ£¬¸Ã¹¤¾ß²»½ö¿ÉÒÔµ÷ÕûPartitionµÄARλÖ㬻¹¿Éµ÷ÕûÆäARÊýÁ¿£¬¼´¸Ä±ä¸ÃTopicµÄreplication factor¡£

Ô­Àí

¸Ã¹¤¾ßÖ»¸ºÔð½«ËùÐèÐÅÏ¢´æÈëZookeeperÖÐÏàÓ¦½Úµã£¬È»ºóÍ˳ö£¬²»¸ºÔðÏà¹ØµÄ¾ßÌå²Ù×÷£¬ËùÓе÷Õû¶¼ÓÉControllerÍê³É¡£

ÔÚZookeeperÉÏ´´½¨/admin/reassign_partitions½Úµã£¬²¢´æÈëÄ¿±êPartitionÁÐ±í¼°Æä¶ÔÓ¦µÄÄ¿±êARÁÐ±í¡£

Controller×¢²áÔÚ/admin/reassign_partitionsÉϵÄWatch±»fire£¬Controller»ñÈ¡¸ÃÁÐ±í¡£

¶ÔÁбíÖеÄËùÓÐPartition£¬Controller»á×öÈçϲÙ×÷£º

Æô¶¯RAR - ARÖеÄReplica£¬¼´Ð·ÖÅäµÄReplica¡££¨RAR = Reassigned Replicas£¬ AR = Assigned Replicas£©

µÈ´ýеÄReplicaÓëLeaderͬ²½

Èç¹ûLeader²»ÔÚRARÖУ¬´ÓRARÖÐÑ¡³öеÄLeader

Í£Ö¹²¢É¾³ýAR - RARÖеÄReplica£¬¼´²»ÔÙÐèÒªµÄReplica

ɾ³ý/admin/reassign_partitions½Úµã

Ó÷¨

¸Ã¹¤¾ßÓÐÈýÖÖʹÓÃģʽ

generateģʽ£¬¸ø¶¨ÐèÒªÖØÐ·ÖÅäµÄTopic£¬×Ô¶¯Éú³Éreassign plan£¨²¢²»Ö´ÐУ©

executeģʽ£¬¸ù¾ÝÖ¸¶¨µÄreassign planÖØÐ·ÖÅäPartition

verifyģʽ£¬ÑéÖ¤ÖØÐ·ÖÅäPartitionÊÇ·ñ³É¹¦

ÏÂÃæÕâ¸öÀý×Ó½«Ê¹Óøù¤¾ß½«TopicµÄËùÓÐPartitionÖØÐ·ÖÅäµ½Broker 4/5/6/7ÉÏ£¬²½ÖèÈçÏ£º

1. ʹÓÃgenerateģʽ£¬Éú³Éreassign plan¡£Ö¸¶¨ÐèÒªÖØÐ·ÖÅäµÄTopic £¨{¡°topics¡±:[{¡°topic¡±:¡±topic1¡±}],¡±version¡±:1}£©£¬²¢´æÈë/tmp/topics-to-move.jsonÎļþÖУ¬È»ºóÖ´ÐÐÃüÁî$KAFKA_HOME/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file /tmp/topics-to-move.json --broker-list "4,5,6,7" --generate£¬½á¹ûÈçÏÂͼËùʾ

2. ʹÓÃexecuteģʽ£¬Ö´ÐÐreassign plan¡£½«ÉÏÒ»²½Éú³ÉµÄreassignment plan´æÈë/tmp/reassign-plan.jsonÎļþÖУ¬²¢Ö´ÐÐ$KAFKA_HOME/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file /tmp/reassign-plan.json --execute

´Ëʱ£¬ZookeeperÉÏ/admin/reassign_partitions½Úµã±»´´½¨£¬ÇÒÆäÖµÓë/tmp/reassign-plan.jsonÎļþµÄÄÚÈÝÒ»Ö¡£

3. ʹÓÃverifyģʽ£¬ÑéÖ¤reassignÊÇ·ñÍê³É¡£Ö´ÐÐverifyÃüÁ$KAFKA_HOME/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file /tmp/reassign-plan.json --verify¡£½á¹ûÈçÏÂËùʾ£¬´ÓͼÖпɿ´³ötopic1µÄËùÓÐPartititon¶¼ÖØÐ·ÖÅä³É¹¦¡£

4. ÓÃTopic ToolÔÙ´ÎÑéÖ¤¡£bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic topic1¡£½á¹ûÈçÏÂͼËùʾ£¬´ÓͼÖпɿ´³ötopic1µÄËùÓÐPartition¶¼±»ÖØÐ·ÖÅäµ½Broker 4/5/6/7£¬ÇÒÿ¸öPartitionµÄARÓëreassign planÒ»Ö¡£

ÐèҪ˵Ã÷µÄÊÇ£¬ÔÚʹÓÃexecute֮ǰ£¬²¢²»Ò»¶¨ÒªÊ¹ÓÃgenerateģʽ×Ô¶¯Éú³Éreassign plan£¬Ê¹ÓÃgenerateģʽֻÊÇΪÁË·½±ã¡£ÊÂʵÉÏ£¬Ä³Ð©³¡¾°Ï£¬generateģʽÉú³ÉµÄreassign plan²¢²»Ò»¶¨ÄÜÂú×ãÐèÇ󣬴ËʱÓû§¿ÉÒÔ×Ô¼ºÉèÖÃreassign plan¡£

State Change Log Merge Tool

ÓÃ;

¸Ã¹¤¾ßÖ¼ÔÚ´ÓÕû¸ö¼¯ÈºµÄBrokerÉÏÊÕ¼¯×´Ì¬¸Ä±äÈÕÖ¾£¬²¢Éú³ÉÒ»¸ö¼¯Öеĸñʽ»¯µÄÈÕÖ¾ÒÔ°ïÖúÕï¶Ï״̬¸Ä±äÏà¹ØµÄ¹ÊÕÏ¡£Ã¿¸öBroker¶¼»á½«ÆäÊÕµ½µÄ״̬¸Ä±äÏà¹ØµÄµÄÖ¸Áî´æÓÚÃûΪstate-change.logµÄÈÕÖ¾ÎļþÖС£Ä³Ð©Çé¿öÏ£¬PartitionµÄLeader Election¿ÉÄÜ»á³öÏÖÎÊÌ⣬´ËʱÎÒÃÇÐèÒª¶ÔÕû¸ö¼¯ÈºµÄ״̬¸Ä±äÓиöÈ«¾ÖµÄÁ˽â´Ó¶øÕï¶Ï¹ÊÕϲ¢½â¾öÎÊÌâ¡£¸Ã¹¤¾ß½«¼¯ÈºÖÐÏà¹ØµÄstate-change.logÈÕÖ¾°´Ê±¼ä˳ÐòºÏ²¢£¬Í¬Ê±Ö§³ÖÓû§ÊäÈëʱ¼ä·¶Î§ºÍÄ¿±êTopic¼°Partition×÷Ϊ¹ýÂËÌõ¼þ£¬×îÖÕ½«¸ñʽ»¯µÄ½á¹ûÊä³ö¡£

Ó÷¨

bin/kafka-run-class.sh kafka.tools.StateChangeLogMerger --logs /opt/kafka_2.11-0.8.2.1/logs/state-change.log --topic topic1 --partitions 0,1,2,3,4,5,6,7

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

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

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

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