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

Kafka

предисловие

По просьбе большинства друзей, давайте устроим эпизод кафки перед Yarn, который расслаблен и счастлив.

1. Основы Кафки

Роль системы сообщений

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

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

Представляя сценарий, мы знаем, что обработка журналов China Mobile, China Unicom и China Telecom передается на аутсорсинг для анализа больших данных.Предположим теперь, что их журналы передаются в вашу систему для анализа профиля пользователя.

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

1.Тема темы

Кафка изучил дизайн в БД и спроектировал в ней топик, который аналогичен таблице реляционной БД

В настоящее время мне нужно получить данные China Mobile, чтобы я мог напрямую следить за TopicA.

2.Разделите раздел

В Kafka также есть концепция под названием Partition. Конкретная производительность раздела на сервере изначально представляет собой каталог. Под топиком есть несколько разделов. Эти разделы будут храниться на разных серверах или, по сути, на разных хостах. каталоги. Основная информация об этих разделах содержится в файле .log. Подобно разделу в базе данных, он предназначен для повышения производительности.

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

Тема и партиция это как понятия таблицы и региона в HBASE.Таблица это просто логическое понятие.Настоящее хранилище данных это регион.Эти регионы будут распределены на каждом сервере,соответствуя кафке,тоже верно.Тема также является логическим понятием, а раздел — это распределенная единица хранения. Эта конструкция является основой для обеспечения массовой обработки данных. Можем сравнить.Если HDFS не имеет блочного дизайна, то файл 100T можно разместить только на одном сервере, который будет занимать непосредственно весь сервер.После введения блока большие файлы могут быть разбросаны и храниться на разных серверах .

Примечание. 1. Раздел будет иметь единую точку отказа, поэтому мы установим количество реплик для каждого раздела.

2. Нумерация разделов начинается с 0

3.Продюсер - Продюсер

Производитель отправляет данные в систему сообщений

4. Потребитель - Потребитель

Потребитель, который читает данные из kafka

5.Сообщение - сообщение

Данные, которые мы обрабатываем в kafka, называются сообщением.

2. Кластерная архитектура Kafka

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

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

Реплика - Реплика

Чтобы обеспечить безопасность данных, разделы в kafka могут создавать несколько копий каждого раздела.

На данный момент мы устанавливаем 3 копии разделов 0, 1 и 2 соответственно (на самом деле правильнее установить две копии)

А на самом деле у каждой копии есть роли, они одну копию выберут в лидеры, а остальные в ведомые, нашиКогда производитель отправляет данные, он напрямую отправляет их в раздел-лидер., то подчиненный раздел перейдет к ведущему для самостоятельной синхронизации данных,Когда потребители потребляют данные, они также потребляют данные от лидера..

Группа потребителей - Группа потребителей

Когда мы потребляем данные, мы указываем в коде group.id, этот идентификатор представляет собой имя группы потребления, иДаже если этот group.id не установлен, система установит его по умолчанию.

conf.setProperty("group.id","tellYourDream")

Некоторые известные нам системы сообщений обычно спроектированы таким образом, что пока один потребитель потребляет данные в системе сообщений, все остальные потребители не могут использовать данные. Но кафка не такая, например, теперь потребитель А потребляет данные в топике А.

consumerA:
    group.id = a
consumerB:
    group.id = a
    
consumerC:
    group.id = b
consumerD:
    group.id = b

Пусть потребитель B также потребляет данные TopicA, он не может потребляться, но мы повторно указываем другой group.id в потребителе C, и потребитель C может потреблять данные темы A. А ConsumerD нельзя потреблять, поэтому в кафкеУ разных групп может быть только один потребитель для потребления данных по одной и той же теме..

Следовательно, группа потребителей существует для того, чтобы несколько потребителей могли потреблять информацию параллельно, и они не будут потреблять одно и то же сообщение, как показано ниже, потребители A, B, C не будут мешать друг другу.

consumer group:a
    consumerA
    consumerB
    consumerC

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

Controller

Знакомо с правилом: в распределенных файловых системах для больших данных 95% из них представляют собой архитектуры master-slave, а некоторые — одноранговые архитектуры, такие как ElasticSearch.

Kafka также является архитектурой master-slave.Главный узел называется контроллером, а остальные — подчиненными узлами.Контроллер должен взаимодействовать с zookeeper для управления всем кластером kafka.

Как кафка и смотритель зоопарка работают вместе

Kafka в значительной степени зависит от кластера zookeeper (поэтому предыдущие статьи о зоопарке по-прежнему полезны). Все брокеры будут регистрироваться в зоопарке, когда они будут запущены. Цель состоит в том, чтобы выбрать контроллера. Этот процесс выборов очень прост и груб.

Что вы будете делать после того, как станете контроллером?Он будет мониторить несколько директорий в zookeeper, например, есть директория /brokers/, а остальные подчиненные узлы будут регистрироваться в этой директории (то есть создавать свои поддиректории в этой директории. ) ** сами по себе, то правила именования обычно являются их идентификационными номерами, такими как /brokers/0,1,2

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

На этом этапе мы моделируем сценарий, создаем тему (по сути, это просто создание директории в /topics/topicA на zookeeper), kafka сгенерирует схему разделов в этой директории, а контроллер будет слушать это изменение , он будет Синхронизировать метаинформацию этого каталога, а затем делегировать ее своим подчиненным узлам. С помощью этого метода весь кластер информируется о схеме разделов. В это время подчиненные узлы создают свои собственные каталоги и ждут создание копий разделов. Это также механизм управления для всего кластера.

Время закуски

1. Где исполнение Кафки хорошее?

① Пишите последовательно

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

Если он записан случайным образом, данные будут изменены в определенной позиции файла, и производительность будет ниже.

② Нулевая копия

Давайте сначала рассмотрим случай с ненулевым копированием.

Видно, что копия данных копируется из памяти в сервисный процесс kafka, а затем в кеш сокета Весь процесс занимает много времени Kafka использует линуксовую технологию sendFile (NIO), избавляя от необходимости переключение процессов и однократное копирование данных для повышения производительности.

2. Хранение сегментов журнала

Kafka оговаривает, что максимальный размер файла .log в разделе составляет 1 ГБ. Цель этого ограничения — облегчить загрузку .log в память для работы.

00000000000000000000.index
00000000000000000000.log
00000000000000000000.timeindex

00000000000005367851.index
00000000000005367851.log
00000000000005367851.timeindex

00000000000009936472.index
00000000000009936472.log
00000000000009936472.timeindex

Это число, например 9936472, представляет собой начальное смещение, содержащееся в файле сегмента журнала, что означает, что в этот раздел было записано как минимум около 10 миллионов фрагментов данных. У брокера Kafka есть параметр log.segment.bytes, который ограничивает размер каждого файла сегмента журнала, максимальный — 1 ГБ.Когда файл сегмента журнала заполнен, он автоматически открывает новый файл сегмента журнала для записи, чтобы избежать Большой, влияет на производительность чтения и записи файла, этот процесс называется свертыванием журнала, а записываемый файл сегмента журнала называется активным сегментом журнала.

Если вы прочитали две предыдущие статьи о HDFS, вы обнаружите, что журнал изменений NameNode также будет ограничен, поэтому эти фреймворки учтут эти проблемы.

3. Сетевой дизайн Кафки

Сетевой дизайн Kafka связан с настройкой Kafka, поэтому он поддерживает высокий уровень параллелизма.

Во-первых, все запросы, отправленные клиентом, будут сначала отправлены акцептору, а в брокере будет 3 потока (по умолчанию 3).Эти 3 потока называются процессорами. Акцептор не будет обрабатывать запрос клиента, а напрямую инкапсулировать его По одному socketChannel рассылается на эти процессоры для формирования очереди.Способ отправки – polling, то есть сначала отправляем на первый процессор, потом на второй, третий, а потом обратно на первый. Когда поток-потребитель использует эти socketChannels, он будет получать запросы запросов один за другим, и эти запросы запросов будут сопровождаться данными.

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

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

Итак, это расширенная версия модели многопоточной сети реактора.

finally

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

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