kafka использует zookeeper для нескольких вещей:
- членство в кластере - живые брокеры кластера - это те, у кого эфемерные узлы ZK
- выборы лидера - выборы брокера kafkaкоторый действует как контроллер
- хранилища состояний - некоторое (в основном старшее) состояние хранится в ZK - например, конфигурация для тем. некоторое состояние, которое раньше было в ZK, было перенесено в специальные темы (смещения потребителей), а некоторые новые функции были написаны для сохранения состояния полностью в kafka (журналы транзакций, например).
общая тенденцияпрекратить использование состояния в ZK и вместо этого самостоятельно разместить его (хотя старые части кода никогда не переносились).
почему бы не использовать ZK для выбора лидера раздела - одна из причин заключается в логикеучаствует. при выборе брокера-лидера кластера нет никаких предпочтений - подойдет любой брокер. это хорошо согласуется с тем, как работает выбор лидера на основе ZK (1-й член, создающий и владеющий эфемерными победами znode).
при выборе лидера раздела, однако вам нужно немного больше логики. например, вы хотите выбрать лидера с «самым высоким водяным знаком» (с самыми последними данными, помните, что репликация обычно асинхронная). есть также логика вокруг выборов нечистого лидера. Один ZK не может этого сделать, поэтому это делает контроллер.