[ 
https://issues.apache.org/jira/browse/KAFKA-1503?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14039422#comment-14039422
 ] 

Jianwen Wang commented on KAFKA-1503:
-------------------------------------

One way to break this loop is to turn on "auto.leader.rebalance.enable=true". 
But the cluster still will be imbalance between two auto rebalances(I used 60 
seconds as the interval).
The fix I provided is to make sure the partitions are even distributed within 
the live brokers between two auto rebalances.

> 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)

Reply via email to