±¾ÎÄÊÇϵÁÐÎÄÕµĵÚ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 |