Mickael Maison created KAFKA-20895:
--------------------------------------

             Summary: Different controller election behavior depending on node 
count
                 Key: KAFKA-20895
                 URL: https://issues.apache.org/jira/browse/KAFKA-20895
             Project: Kafka
          Issue Type: Improvement
            Reporter: Mickael Maison


On a clean shutdown, the leader computes a preferred successors list. This list 
is order by log end offsets and by node.id for followers with the same log end 
offsets.

With a 3 node quorum, when the leader enters the resigned state, each follower 
will wait a specific time based on its position in the successors list before 
initiating a vote. As the first entry waits the least amount of time, it starts 
a vote first. It will receive its own vote as well as the vote from the 
resigned leader. This is 2 votes out of 3, a majority, thus becomes the new 
leader. The 3rd node won't vote for it however. It reaches 
FollowerState.canGrantVote(), but will return false because 
hasFetchedFromLeader will be true.

With a 4 node quorum, it turns out that the 1st entry in the preferred 
successors list cannot win the vote. Like in the 3 node scenario, it will get 
its own vote as well as the vote from the resigned leader, but this isn't a 
majority. The other 2 nodes won't vote for it because 
FollowerState.canGrantVote() will return false because hasFetchedFromLeader 
will be true. So the 1st node in the list will fail the vote and return to 
Follower state. The 2nd node in the list will then start a new vote, it will 
receive its own vote, the vote from the resigned leader. The first node will 
also vote for it, as it's FollowerState.canGrantVote() will return true because 
hasFetchedFromLeader is false. This is a majority (3 out of 4), so this node 
will become the new leader. Again the 4th node won't vote for it as 
FollowerState.canGrantVote() will return false because hasFetchedFromLeader 
will be true.

With a 5 node quorum, we get a similar behavior than 4 nodes, the 2nd node in 
the preferred successors typically win the vote as the first node cannot win.

The patterns seems to repeat. With 6 or 7 nodes, the 3rd entry in the preferred 
successors should win, with 8 or 9, the 4th entry, etc.

I would expect the first entry in the preferred successors list to typically 
win, but with more than 3 nodes it's not possible so in some case it seems we 
may elect a node with a smaller log end offset.





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to