Интерлюдия: принцип обновления Kafka HW, LEO и краткое описание процесса работы

задняя часть Kafka

предисловие

Хотя это разминка исходного кода, это также краткое изложение эпизода Мы упомянули различные роли кластера в начале, дизайн кластера, сетевую модель, производителей и потребителей. В этой статье будет упомянуто последнее ядро, а затем подведен итог по трем предыдущим концепциям, разберитесь с процессом, увеличьте память и сделайте следующий исходный код более расслабленным и приятным, ладно, это последний раз Pigeon 🤣.

предыдущая ссылка

Концепция ①:Интерлюдия: народный язык знакомит вас с Кафкой

практично:Интерлюдия: практика развертывания, эксплуатации и обслуживания кластера Kafka

Концепция ②:Интерлюдия: принцип продюсера Кафки и описание важных параметров

Концепция ③:Интерлюдия: случай производителя Кафки и анализ принципов потребителя

Ничего такого:Интерлюдия: разминка исходного кода Kafka --- Java NIO

1. Доделать то, что не было упомянуто в предыдущей Кафке

существуетСлучай производителя Кафки и анализ принципа потребителяМы упомянули, что в ядре кафки тоже есть принцип LEO&HW, а теперь добавим его обратно.

1.1 Принцип обновления LEO&HW

Во-первых, есть два брокера, то есть два сервера, а затем в их разделах хранятся две копии p0, один ведущий, а другой ведомый

В это время производитель отправляет данные в ведущий раздел, и в конечном итоге данные должны быть записаны на диск. Далее ведомый будет синхронизировать данные с ведущего, а данные по ведомому так же будут записываться на диск

Однако ведомый сначала синхронизируется с ведущего, а затем записывает на диск, поэтому данных на его диске точно будет меньше, чем у ведущего.

1.1.1 Что такое ЛЕО

LEO (последнее конечное смещение) — это данные базового файла журнала копии.следующее значение максимального смещения, поэтому НОО ведущего на приведенном выше рисунке равен 5+1 = 6, а НОО ведомого равно 5. По аналогии, когда я знаю, что LEO равен 10, я знаю, что в лог-файле сохранено 10 единиц информации, а диапазон смещения равен [0,9]

1.1.2 Что такое аппаратное обеспечение

HW (highwater mark) – уровень воды, который должен быть меньше значения LEO. Это значение указывает, что потребители могут потреблять данные только до HW.

1.1.3 Анализ процесса

Когда ведомый синхронизирует данные с ведущим, синхронизированные данные будут иметь значение LEO, но вНа практике может быть более 2 копий p0. В это время рисую еще несколько фолловеров (p0), и они тоже синхронизируют данные в лидерский раздел и приносят свой LEO.Ведущий раздел будет записывать LEO, синхронизированный этими последователями, а затем примет наименьшее значение LEO в качестве значения HW.

Такой подход гарантирует, что если ведущий раздел выйдет из строя, кластер выберет новый ведущий раздел из других подчиненных разделов. В это время, независимо от того, какой узел выбран в качестве лидера, данные, которые будут потребляться в данный момент, могут быть гарантированы для обеспечения безопасности данных.

Тогда как определить значение собственного HW последователя, то естьКогда ведомый получает данные, он также приносит значение HW ведущего раздела, а затем принимает меньшее значение со своим собственным значением LEO в качестве собственного значения HW..

Теперь, если вы вспомните об ISR, упомянутом ранее, это станет более ясным.Если ведомый не сможет синхронизировать данные с ведущим более 10 секунд, он будет выкинут из ISR.. Его роль заключается в том, чтобы помочь нам быстро выбрать лидера, когда лидер не работает, потому что последователи в списке ISR имеют высокую скорость синхронизации с лидером, и даже если данные будут потеряны, они не потеряют слишком много.

И мы не упомянули обстоятельства, при которых ведомый может вернуться в ИСР, теперь ответьте, когдаЗначение LEO последователя >= значение HW лидера, вы можете вернуться в ISR.

Однако, в соответствии с процессом только что, потеря некоторых данных действительно неизбежна. Конечно, есть способы обеспечить целостность данных. Мы оставим это исходному коду и подведем итоги позже.

1.1.4 Если вы чувствуете, что на картинке слишком много слов и на нее не приятно смотреть, внимательно посмотрите на это

Во-вторых, процесс Кафки

Взяла всех рисовать в Большой Вернакулярной Главе, и теперь буду делать это снова.

Сначала идут два брокера (этот кластер должен иметь более 1 сервера, чтобы называться кластером), а затем они будут регистрироваться в кластере zookeeper при запуске.В это время два сервера будут вытеснять каталог с именем контроллер.Кто его схватил ?, кто контролер. Например, сейчас схвачен первый Брокер. тогда этоконтроллер, который отслеживает изменения в каждом каталоге в zookeeper и управляет метаданными всего кластера.

На этом этапе мы используем клиент для использования команд для создания темы.В это время схема раздела темы будет записана в каталог zookeeper, а контроллер будет отслеживать каталог для записи схемы раздела (фактически, некоторые метаданные информация)), он также изменяет свою собственную информацию метаданных. Позже другие брокеры также будут синхронизировать метаданные с контроллером. Убедитесь, что метаданные брокера всего кластера непротиворечивы.

В настоящее время, например, мы теперь знаем, что существует раздел p0 из метаданных, ведущий раздел находится на первом брокере, а подчиненный раздел — на втором брокере.

На этом этапе производитель должен выйти.Прежде чем производитель должен отправить сообщение в кластер, он должен сначала инкапсулировать каждое сообщение в объект ProducerRecord, что выполняется производителем внутри. Затем он пройдет через процесс сериализации. Затем ему нужно извлечь метаданные из прошлого кластера (чтобы все знали, почемуИнтерлюдия: принцип продюсера Кафки и описание важных параметровПочему один или несколько адресов брокера должны быть указаны в коде производителя 1-⑤-1?), фрагмент кода на тот момент выглядит следующим образом.

props.put("bootstrap.servers", "hadoop1:9092,hadoop2:9092,hadoop3:9092");

Потому что, если адрес сервера не указан, информация о метаданных не может быть получена. В настоящее время сообщение производителя не знает, какой раздел какого сервера следует отправить.

В это время производитель не спешит отправлять сообщение, а сначала помещает его в буфер. После помещения сообщения в буфер, в то же время будет независимый поток Sender для упаковки сообщения в пакеты пакетами. После завершения каждого пакета он начинает отправляться на соответствующий хост. через это времяНародный языкУпоминание времени китайской закускиМодель трехуровневой сетевой архитектуры Кафки, записать в кэш ОС, а затем продолжить запись на диск.

После этого процесс записи на диск будетСлучай производителя Кафки и анализ принципа потребителяупоминается вжурнал двоичного поиска, и только что упомянулISR, LEO и HW. Потому что, когда запись лидера завершена, ведомый должен снова синхронизировать данные.

В это время также входит группа потребителей.Эта группа потребителей будет иметь свой номер group.id.По этому можно вычислить,какой брокер является их координатором.После определения координатора,все потребители отправят запрос на вступление в группу зарегистрироваться. . послеКоординатор по умолчанию выбирает первого зарегистрированного потребителя в качестве главного потребителя.,Сообщить ситуацию по всей теме лидеру-потребителю. После этого ведущий потребитель сформулирует план потребления в соответствии с идеей балансировки нагрузки и вернет его координатору.После того, как координатор получит план, он будет распространен среди всех потребителей., чтобы завершить процесс.

Таким образом, это соединяет все точки знаний, упомянутые в нашей серии эпизодов, в основном включая все точки знаний, которые необходимо знать. Такая большая вещь разделена и объяснена шаг за шагом и дополнена небольшим знанием. Если вы интересуетесь Кафкой, очень рекомендую прочитать предыдущие статьи, думаю, они будут вам полезны.

Вернуться к исходному коду

Java NIO в исходном кодеБазаЗнания (видите нет, основы - это ключевые слова, продвинутых не требуется) и scala - это два условия, но если вы друг, который не знает scala, вам не нужно беспокоиться, это очень похоже на Java . Я считаю, что если вы будете сотрудничать с определенным объяснением, вы сможете понять все процедуры.

3. Кратко расскажите об окружающей среде

Версия Kafka 0.10.1, последняя должна быть 2.2.x. Основной процесс не сильно изменился, старая версия более стабильна, чем новая версия, а структура кода старой версии будет понятнее, потому что многие люди отправят некоторые исправления для такого проекта с открытым исходным кодом, но люди, которые отправят патч не должен быть лучшей группой, из-за чего код новой версии будет выглядеть запутанно, и его естественно неудобно изучать.

1.1 JDK1.7+ (не говоря уже об этом)

1.2 scala

Когда Kafka только вышла, ее исходный код был написан на scala, но код на стороне производителя и на стороне потребителя был переписан на java, но исходный код на стороне сервера все еще был написан на scala, поэтому нам нужно установить scala, чтобы проанализировать исходный код окружения Kafka.

я используюВерсия 2.11.8, можно скачать и настроить переменные окружения (это прекрасно можно сделать через Du Niang, и это очень похоже на настройку Java, так что здесь не будем расширяться).

В IDEA необходимо установить плагин scala. В Настройках-плагины просто найдите scala напрямую.

1.3 gradle

Исходным кодом Kafka управляет не maven, а gradle, и все думают, что это инструмент управления кодом, похожий на maven. Установите его так же, как вы устанавливаете maven.

finally

Исходный код, который будет упомянут

KafkaProducer:
    (难的,这个行了其它都是行的,而且源码写的很优秀,估计要分好几篇慢慢来)
Server:
    (有了上面的Producer之后就不会很难了)
KafkaConsumer:
    (非常基础,不太需要讲,其实大数据的框架关于读数据的部分都不算太难)

Если вы хотите объяснить это один за другим, это определенно будет очень запутанно, поэтому вам придется использовать сцену, чтобы объяснить это, и эта сцена даже не требует, чтобы я писал. Видите, что в исходном коде есть пример пакета? Большинство фреймворков больших данных имеют открытый исходный код, поэтому для продвижения официальные документы должны быть подробно написаны, и удобно предоставить несколько хороших образцов пакетов.С этого момента объяснение в основном опирается на комментарии к коду.

Следующая статья начинается здесь. Давайте работать вместе