Когда интервьюер проверяет ваше знание Кафки, он, скорее всего, задаст вам загадку: что случилось с выборами у Кафки? Если вы не спросите, какой вы выборный, большинство интервьюеров, задающих такого рода вопросы, мало знают о Кафке, и на этот раз самое время его «убить». Конечно, если у вас нет определенного запаса знаний, то тогда вас «убьют».
Если этот вопрос вообще задают, то он должен знать один из них, например выборы лидера раздела. Так называемые выборы лидера раздела — это процесс переизбрания ведущей копии, когда ведущая копия в ISR выходит из строя. По этой проблеме у вас есть возможность повернуться против заказчика, потому что в Кафке много выборов, но не только выборы лидера партиции. случаи. Детали здесь не совсем понятны большинству людей.
Выборы в Kafka можно условно разделить на три категории: выборы контролера, выборы лидера раздела и выборы, связанные с потребителями, которые можно разделить на семь подкатегорий. Давайте пройдемся по ним по порядку.Эта статья лишь кратко перечисляет общее содержание.Что же касается внутренней детальной логики, то ее должны изучить сами читатели. Злоупотреблять или подвергаться насилию зависит от вашей самодвижущей силы.
выборы контролера
В кластере Kafka будет один или несколько брокеров, один из которых будет выбран в качестве контроллера (Kafka Controller), отвечающего за управление состоянием всех разделов и реплик во всем кластере. Например, когда ведущая копия раздела выходит из строя, контроллер отвечает за выбор новой ведущей копии для раздела. В качестве другого примера, когда обнаруживается изменение в наборе ISR раздела, контроллер отвечает за уведомление всех брокеров о необходимости обновления информации о своих метаданных.
Выбор контроллера Kafka достигается за счет использования Zookeeper. Какой брокер в кластере Kafka может успешно создать временный (EPHEMERAL) узел /controller, может стать контроллером Kafka.
Здесь нужно пояснить, что реализация Kafka Controller довольно сложна, включает в себя различные аспекты.Если вы освоите Kafka Controller, вы освоите «полстраны» Kafka. Из-за нехватки места я не буду раскрывать их здесь по одному. Заинтересованные читатели могут обратиться к соответствующему содержанию главы 6 в «Глубоком понимании Кафки».
Выборы лидера раздела
Здесь нет контента, связанного с соглашением о консенсусе (PacificA), только конкретное содержание выборов.
Выбор реплики лидера раздела реализуется контроллером Kafka. При создании раздела (создание темы или добавление раздела приводит к созданию раздела) или когда раздел переходит в режим онлайн (например, исходная копия лидера в разделе отключается, в это время раздел должен выбрать нового лидера для выхода в интернет для предоставления внешних услуг), необходимо выполнить действие по выбору лидера.
Основная идея состоит в том, чтобы найти первую уцелевшую реплику в порядке реплик в наборе AR, и эта реплика находится в наборе ISR. Набор AR раздела указывается во время выделения, и пока не происходит перераспределения, порядок реплик в наборе остается неизменным, в то время как порядок реплик в наборе ISR раздела может измениться. Обратите внимание, что выборы здесь основаны на порядке AR, а не на порядке ISR. Это относительно абстрактно, и заинтересованные читатели могут вручную закрыть/открыть брокера в кластере, чтобы наблюдать за конкретными изменениями.
В некоторых случаях также происходит выбор лидера раздела, например, когда раздел переназначается, необходимо выполнить действие выбора лидера. Идея относительно проста: найти первую уцелевшую копию из перераспределенного списка AR, и эта копия находится в текущем списке ISR.
В качестве другого примера, когда происходит выбор предпочтительного лидера раздела реплики, предпочтительная реплика может быть непосредственно установлена в качестве лидера, а первая реплика в наборе AR является предпочтительной репликой.
В Kafka много XX реплик, если вы мало о них знаете, то можете обратить внимание на следующую статью из этой серии "Kafka Popular Science Series | Сколько реплик в Kafka?" 》
Другая ситуация заключается в том, что когда узел корректно завершает работу (то есть выполняется ControlledShutdown), реплика лидера, расположенная на этом узле, будет отключена, поэтому соответствующий раздел должен выполнить выбор лидера. Конкретная идея здесь такова: найти первую уцелевшую реплику из списка AR, и эта реплика есть в текущем списке ISR, и при этом убедиться, что этой реплики нет на той ноде, которую выключают.
Выборы, связанные с потребителями
Для понимания этой части содержания, ах. . Если вы мало что знаете о потребителях, группах потребителей, координаторах потребителей и координаторах групп, тогда. . . Функция вызвалась порекомендовать книгу «Глубокое понимание Кафки», хе-хе.
Координатор группы GroupCoordinator должен выбрать лидера группы потребителей для потребителей в группе потребителей.Алгоритм выбора также очень прост и может быть проанализирован в двух случаях. Если в группе потребителей нет лидера, первый потребитель, присоединившийся к группе потребителей, становится лидером группы потребителей. Если потребитель-лидер по каким-либо причинам в определенное время выходит из группы потребителей, то будет переизбран новый лидер, и процесс переизбрания ведущего будет более "случайным". Соответствующие коды следующие:
//scala code.
private val members = new mutable.HashMap[String, MemberMetadata]
var leaderId = members.keys.head
Объясните эти две строки кода: в GroupCoordinator информация о потребителе хранится в форме HashMap, где ключ — это member_id потребителя, а значение — связанные с потребителем метаданные. LeaderId представляет member_id потребителя-лидера, а его значение — это ключ первой пары ключ-значение в HashMap.Этот метод выбора в основном такой же, как случайный. В целом процесс избрания лидера потребительской группы весьма произволен.
Интерлюдия: недавно было обнаружено, что статьи были украдены, и статьи появились на основных веб-сайтах портала в течение нескольких часов после публикации, и все они являются оригинальными. Хотя у меня нет возможности остановить это, я обнаружил, что большинство из них были скопированы без внимательного изучения (даже QR-код моего публичного аккаунта ниже был скопирован, и, конечно же, был также вор цыплят, который использовал PS для удаления водяной знак моей фотографии), так что я был мудр. меня. . Почему бы не поместить мою книгу в середину статьи и позволить им украсть ее, чтобы прорекламировать ее для меня. я очень худая~~
Это заканчивается здесь? Существует также выбор стратегии распределения разделов.
Возможно, вы немного незнакомы с этим, но учащиеся, которые использовали Kafka, могут быть знакомы с параметром partition.assignment.strategy (который оценивается как RangeAssignor, RoundRobinAssignor, StickyAssignor и т. д.). Каждый потребитель может установить свою собственную стратегию выделения разделов.Для группы потребителей необходимо выбрать взаимно «убедительную» стратегию из стратегий распределения, сообщаемых каждым потребителем, для выполнения общего распределения разделов. Выбор этого распределения разделов не решается ведущим потребителем, а определяется голосами каждого потребителя в группе потребителей. Что касается конкретных деталей. . . Эй-эй.
Приглашаем поддержать автора буклета: "Практическое руководство по иллюстрированию Кафки"и"Проиллюстрировать основные принципы Кафки》
Добро пожаловать в поддержку новых работ автора: «Углубленное понимание Kafka: основные принципы проектирования и практики» и «Практическое руководство по RabbitMQ», а также приглашаем обратить внимание на общедоступный аккаунт автора в WeChat: блог Zhu Xiaosi.