How do I permanently remove a broker from a Kafka cluster?

Scenario:

I have a stable cluster of 3 brokers. I temporarily added a fourth broker
that successfully joined the cluster. The controller returned metadata
indicating this broker was part of the cluster.

However, I never rebalanced partitions onto this broker, so this broker #4
was never actually used, didn't join any replica lists, ISRs, etc.

I later decided to remove this unused broker from the cluster. I shutdown
the broker successfully and Zookeeper /broker/ids no longer lists broker #4.

However, when my application code connects to any Kafka broker and fetches
metadata, I get a broker list that includes this deleted broker.

How do I indicate to the cluster that this broker has been permanently
removed from the cluster and not just a transient downtime?

Additionally, what's happening under the covers that causes this?

I'm guessing that when I connect to a broker and ask for metadata, the
broker checks its local cache for the controller ID, contacts the broker
and asks it for the list of all brokers. Then the controller checks it's
cached list of brokers and returns the list of all brokers known to have
belonged to the cluster at any point in time.

I'm guessing this happens because it's not certain if the dead broker is
permanently removed or just transient downtime. So I'm thinking I just need
to indicate to the controller that it needs to reset it's list of known
cluster brokers to the known live brokers in zookeeper. But would not be
surprised if something in my mental model is incorrect.

This is for Kafka 0.8.2. I am planning to upgrade to 0.10 in the
not-to-distant future, so if 0.10 handles this differently, I'm also
curious about that.


-- 

*Jeff Widman*
jeffwidman.com <http://www.jeffwidman.com/> | 740-WIDMAN-J (943-6265)
<><

Reply via email to