[ https://issues.apache.org/jira/browse/KAFKA-1503?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14039460#comment-14039460 ]
Guozhang Wang commented on KAFKA-1503: -------------------------------------- Hi Jianwen, When the topic is firstly created, the leaders should be balanced. Then when there is, say a soft failure on some brokers, its leading partitions will be migrated to others, and even when this broker resumes these partitions will not be migrated back, causing imbalance. And this is probably what you saw before. Previously we do rebalance using the partition-reassignment-tool from time to time, then we created the auto-rebalance tool to ease this problem. Unfortunately there is an issue with this tool and we are currently fixing it: https://issues.apache.org/jira/browse/KAFKA-1305 The fix should be released soon with 0.8.2, will that fully-working tool solve your issue then? > all partitions are using same broker as their leader after broker is down > ------------------------------------------------------------------------- > > Key: KAFKA-1503 > URL: https://issues.apache.org/jira/browse/KAFKA-1503 > Project: Kafka > Issue Type: Bug > Components: controller > Affects Versions: 0.8.0, 0.8.1.1 > Environment: 0.8.1.1 > Reporter: Jianwen Wang > Assignee: Neha Narkhede > > The current leader selection always pick the first live broker in ISR when > the current leader broker is down. Since the list of liveBrokerInIsr is not > evenly distributed. As time goes on, all the partitions will use only one > broker as its leader. > I figured out a fix which is to use the first live broker in replica list > which is also in ISR list. Since the liveAssignedReplicas is evenly > distributed across brokers, all the partitions will be evenly distributed in > the live brokers in ISR. > The fix is: > kafka-0.8.1.1-src/core/src/main/scala/kafka/controller/PartitionLeaderSelector.scala > 71 71 > case false => > 72 > - val newLeader = liveBrokersInIsr.head > 72 > + val liveReplicasInIsr = liveAssignedReplicas.filter(r => > liveBrokersInIsr.contains(r)) > 73 > + val newLeader = liveReplicasInIsr.head -- This message was sent by Atlassian JIRA (v6.2#6252)