Apache Kafka стал первым выбором многих программистов при создании высокопроизводительных и надежных систем обмена сообщениями. В этой статье представлен углубленный анализ внутреннего механизма Kafka, от макроархитектуры до деталей потока сообщений, показывающий, как Kafka достигает асинхронной обработки сообщений и управления трафиком с помощью тщательно разработанных системных компонентов и стратегий. В этой статье вы познакомитесь со стратегией подтверждения Kafka, технологией сохранения данных и ключевыми разработками для повышения производительности системы, включая пакетную обработку, сжатие, PageCache и технологии нулевого копирования. В то же время в статье также рассматриваются балансировка нагрузки и управление кластерами, что дает вам полное представление о том, как Kafka соответствует строгим требованиям к очередям сообщений в крупномасштабных распределенных системах.
изучить основные знания Kafka раньше,Давайте сначала подумаем над вопросом:Какой сценарий побудит нас использовать Kafka? Скажи приезжать сюда,в наших умахилимногоили Меньше шансов выскочитьАсинхронная развязкаисглаживание пиков и заполнение впадини другие слова,даиз,Это Kafka Самая важная сцена приземления.
Приведенный выше пример можно найти в транзакции、Часто требуется в таких сценариях, как оплатаАсинхронная развязкаисглаживание пиков и заполнение впадинОсобенности решения проблем,Такие сценарии, как транзакции и платежи, предъявляют особенно высокие требования к производительности и надежности. Так,Наша статьяизглавный герой Kafka Может ли он соответствовать соответствующим требованиям? Давайте обсудим это ниже.
исследование Kafka Прежде чем добиться высокой производительности и высокой надежности, давайте посмотрим на это с макроэкономической точки зрения. Kafka системная архитектура.
Как показано на рисунке выше, Kafka состоит из Producer, Broker, Consumer и ZooKeeper, который отвечает за управление кластером. Функции каждой части следующие:
В показанном выше процессе потока сообщений есть несколько особенно важных понятий: тема, раздел, сегмент и смещение.
После краткого понимания общей структуры системы Kafka и связанных с ней концепций давайте продолжим изучение принципов реализации высокой надежности и высокой производительности.
Tips:Самодельный Kafka Кластеры могут столкнуться с рядом проблем, включая построение кластера, настройку узлов, управление разделами и копиями, безопасность и мониторинг и т. д. Выберите очередь сообщений Tencent Cloud CKafka Версия (TDMQ for CKafka),100% Совместимость с открытым исходным кодом Kafka API 2.4、2.8、3.2 Версия, обладая при этом преимуществами высокой доступности, сжатия данных и поддержки обработки данных как в автономном режиме, так и в реальном времени, устраняя различные проблемы, такие как самостоятельное управление.
Для получения подробной информации посетите адрес:https://cloud.tencent.com/product/ckafka
Основой высокой надежности Kafka является гарантия того, что сообщения не будут потеряны во время доставки, что включает в себя следующие основные ссылки:
3.1 Сообщения надежно отправляются от производителя брокеру
Чтобы гарантировать надежную отправку сообщений от производителя брокеру, нам необходимо обеспечить две вещи:
3.1.1 стратегия подтверждения
Для вопроса 1 Кафка предлагает нам три стратегии подтверждения:
Для достижения прочного и надежного kafka систему, нам нужно установить Request.required.acks= -1, а также устанавливает реплики в кластере, находящиеся в состоянии нормальной синхронизации. follower количество min.insync.replicas>2,кроме того,настраивать unclean.leader.election.enable=false Создать кластер ISR из follower Только тогда мы сможем стать новым человеком лидер, чтобы избежать усечения сообщения в особых обстоятельствах.
3.1.2 Стратегия отправки сообщений
Что касается вопроса 2, kafka предоставляет два типа методов отправки сообщений: синхронную (синхронную) отправку и асинхронную (асинхронную) отправку. Соответствующие параметры плагина kafka в платформе trpc-go следующие:
(Рекомендуется нажать на изображение, чтобы увеличить его)
trpc-kafka Нижний уровень основан на открытом исходном коде. sarama Реализация, существование Сообщение отправляется из процесса, независимо от того, отправлено ли оно Отправить синхронновозвращатьсяда Отправить асинхронно будет задействовано две сопрограммы - ответственная за отправку сообщений из основной сопрограммы и ответственная за распространение сообщений из dispatcher Корутины.
для Отправить асинхронно(ack != 0 Сцена, когда равна 0, писать не важно kafka В результате (подробно объяснено позже) процесс выглядит примерно следующим образом:
Отправить синхронно(ack != 0 сцена)дасуществовать Отправить асинхронноиз реализуется на основе условных ограничений. Отправлять синхронные сообщения существуют newSyncProducerFromAsyncProducer Откройте две асинхронные сопрограммы для обработки сообщений об успехе с ошибкой из-за «обратного вызова» и используйте их. waitGroup Подождите, пока асинхронная операция будет преобразована в синхронную. Процесс примерно следующий (см. [sarama Kafka Сортировка клиентов-производителей и потребителей]
Благодаря приведенному выше анализу можно обнаружить, что Кафка Отправка сообщений по сути асинхронна, но Отправить синхроннопроходить waitGroup Преобразование асинхронных операций вдля Синхронная работа。Отправить в определенной степени гарантирует, что мы существуем в сети К Broker При передаче сообщения сообщение должно быть надежно передано Broker。потому чтодлясуществовать Отправить синхронно, мы можем четко определить, отправлено ли сообщение Broker,Если сообщение не удалось отправить из-за дрожания сети, простоя компьютера и т. д., результат неизвестен.,Можетпроходить Повторите попытку и другие средства для обеспеченияинформацияк На одного меньше Второсортный(at least once) отправить в Маклер. Кроме того, Kafka (после версии 0.11.0.0) также Producer Два типамеханизм来实现精确一Второсортный(exactly once) Отправка сообщения: идемпотентность и транзакция.
(Рекомендуется нажать на изображение, чтобы увеличить его)
3.1.3 Резюме
проходить ack Стратегия Конфигурация、Отправить синхронно, возможности комбинирования сообщений о транзакциях, мы можем достичь ровно один раз семантикаПо сетям К Broker Передавать сообщения. Однако продюсер получать Broker изуспех ак, а сообщение не потеряется? Чтобы понять эту проблему, мы должны сначала понять Broker Что же делали существа после получения сообщения от получать.
3.2 отправить в Broker из новостей Может Зависит от Выносливость
Чтобы обеспечить Producer получать Broker изуспех ack Наконец, сообщения не должно быть там Broker Если ссылка потеряна, следует сосредоточиться на следующих моментах:
3.2.1 Брокерный асинхронный дисковый щеточный механизм
kafka Чтобы получить более высокую пропускную способность, брокер После получения сообщения просто напишите данные PageCache Тогда считается, что сообщение написано успешно,и PageCache серединаизданныепроходить linux из flusher Программа выполняет асинхронную чистку диска (триггерная панель очистки диска: активный вызов sync или fsync Функция: доступная память ниже порога, загрязнена data время достигает порога), данные записываются на диск последовательно. Схема обработки сообщений выглядит следующим образом:
Поскольку сообщение написано PageCache , автономный сценарий, если вы еще не обновили диск Broker Тогда все кончено Producer Часть данных, которые производятся, может быть потеряна. для Для решения проблем, которые может вызвать одиночный сбой машины, изпотеря данныхвопрос,Kafka Введен механизм реплик для разделов.
3.2.2 Механизм копирования реплик
Kafka Каждая группа разделов обычно имеет много копий, и одна и та же группа разделов из разных дистрибутивов копирования существует в разных вариантах. Broker вкл. сохраняется одно и то же сообщение (может быть с задержкой). Отношения между копировать - это «один хозяин многоот», при котором leader Реплика отвечает за обработку запросов на чтение и запись, ведомый Копия отвечает за начало с leader Извлекайте сообщения для синхронизации. Раздел из всех копировать коллективно для AR(Assigned Реплики), все из которых связаны с leader копировать сохранять определенную синхронизацию изкопировать (в том числе leader копия включена) для формирования ISR (In-Sync Реплики), с leader Синхронная задержка состоит из многоизкопировать OSR(Out-of-Sync Реплики), видно, что AR=ISR+OSR. последователь Синхронизировано ли копирование с лидером критериев оценки, зависит от Broker параметры терминала реплика.лаг.время.макс.мс (по умолчанию 10 секунд), ведомый По умолчанию каждые 500ms К leader fetch Данные одновременно, только один Follower Копировать сзади Leader копирование длится не более 10 секунд, затем Kafka Просто подумай, что Follower копировать с помощью leader Это синхронизировано. существуют в норме все из follower Копии должны совпадать с leader копировать поддерживать определенную степень синхронизации, т.е. AR=ISR,OSR Коллекция пуста.
когда leader скопировать местоположение Broker Во время простоя Кафка буду использовать ZK от follower копировать выборы новыйиз leader Продолжайте предоставлять услуги внешнему миру, реализуйте автоматическую передачу неисправностей и гарантируйте доступность услуг. для сделал выборы из новых leader японский и старый leader данныевыхлопвозможныйпоследовательный,когда leader При сбое реплики по умолчанию только ISR Только те, кто находится в коллекции, имеют право быть избранными в качестве кандидата. лидер, находясь в OSR Набор изкопировать не имеет никаких шансов (можно изменить, введя настройку unclean.leader.election.enable).
когда Kafka Когда механизм применениямногокопирования решает проблему сбоя одной машины, он также вызывает проблему согласованности синхронизации между многокопированием. Кафка использовать механизм возобновления высокого уровня воды, копировать механизм синхронизации, Leader Epoch Для решения проблемы согласованности синхронизации данных между несколькими копиями были приняты различные меры. Давайте по очереди рассмотрим эти основные меры.
HW и ЛЕО
Во-первых, давайте рассмотрим две важные концепции, связанные с журналами в Kafka HW и LEO:
Как показано на картинке выше,он представляет собой файл журнала,В этом файле журнала 8 сообщений.,0к5междуиз новостейдля Поданныйинформация,5к7из новостейдля Не отправленоинформация。файл журналаиз HW для5, что указывает на то, что потребители могут получать сообщения только до прибытия5, и offset для5из сообщения невидимы для потребителей. Файл журнала из LEO равно 8, следующее сообщение будет написано здесь.
ПРИМЕЧАНИЕ: Все копировать имеют соответствующее HW и Лео, просто Leader Копия особенная, Кафка использовать Leader копировать уровень паводка для определения всех существовавших зональностей по уровню паводка. Другими словами, высокий уровень воды в зоне является ее Leader копироватьизвысокий уровень воды。Leader копироватьи Follower копироватьиз HW Он имеет следующие характеристики:
Примечание. Для удобства описания ниже ведущий HW обозначается сокращенно HW L, ведомый HW сокращенно HW F, ведущий LEO сокращенно LEO L, а ведомый LEO сокращенно LEO F.
Ниже мы демонстрируем Второсортный полный процесс обновления HW/LEO:
Во время вышеуказанного процесса обновления Follower и Leader из HW Время обновления ЗАЗОР. если Leader Если в течение этого периода узел выйдет из строя, то Follower из HW и Leader из HW может находиться в противоречивом состоянии, если Followe выбран какновыйиз Leader сам из HW Если для предоставляет услуги внешним сторонам, это может привести к потерям. данныхили Путаница данныхвопрос。
KIP-101 Вопрос: потеря данных&Путаница данных
потеря данных
Шаг 1:
Шаг 2:
В настоящее время, если не будет исключения, А. встречаполучать B из Ответить и узнать о текущей ситуации из HW для2,Ранназадвозобновлятьсамиз HW это 2. Но на шаге 2 A Перезапустил, не поздно получить B из ответа, в это время B все еще leader。A После перезапуска будет HW для стандарта обрезается журнал, потому что для A как follower Я не знаю, было ли отправлено много из журнала, чтобы предотвратить несогласованность данных и усечение многих оставшихся из данных, и попробуйте отослать их. leader Пересинхронизируйтесь там.
Шаг 3:
B Разбился, мин.isr Настройка из равна 1, поэтому zookeeper встречаот ISR Выбрать другой как лидер, то есть А, но A изданные - это не полное из, но потеря данных Феномен。вопроссуществоватьгде?существовать В A После перезапуска с HW Стандарт for усекает большое количество журналов. Можно ли не обрезать? Нет, потому что журнал для мог не быть отправлен (т. е. не был отправлен). ISR Все узлы в файле записаны), и сохранение приведет к путанице в журнале.
Путаница данных
Прежде чем анализировать проблему путаницы в журналах, нам необходимо понять, куда приезжать. kafka ископировать Гарантия надежности имеет предпосылку:существовать ISR В . есть хотя бы один узел. В случае выхода из строя всех узлов надежность не гарантируется. Такая ситуация произойдет. данных,потеря данные приемлемы. Здесь мы анализируем проблему из-за потери данные еще хуже,Это приведет к путанице в журналах или даже к ненормальной работе всей системы.,А это недопустимо из.
Шаг 1:
Шаг 2:
потому что A и B все вниз,и min.isr=1 и unclean.leader.election.enable=true(закрытие unclean стратегия выбора), поэтому Kafka буду ждать первого ISR Средний узел восстанавливается и восстанавливается как Лидер, к сожалению вот B выбран как лидер, а также принять получать producer Отправить новое сообщение от из м3. Обратите внимание, что это отсутствует m2 Сообщение приемлемое, ведь все узлы не работают.
Шаг 3:
A После восстановления и перезапуска я обнаружил, что я последователь, и HW для2, и нет много изданных, которые нужно обрезать, так что начнем B Выполните новый раунд синхронизации. Но это время A и B Никто из них не осознавал, что компенсация для1из новостейнепоследовательный。
Вопрос Где? существуют Запись журнала асинхронна, как упоминалось выше. Kafka изкопировать Стратегия. Один из вариантов заключается в том, что обмен сообщениями из-за постоянства является асинхронным, что приведет к тому, что будет выбран сценарий 2. leader Он не обязательно содержит все файлы, что может привести к путанице и проблемам в журнале.
Чтобы устранить вышеуказанные недостатки, Кафка представил Leader Epoch из концепции. лидер epoch и raft Понятие термина «число» очень похоже. При каждом переизбрании лидера используется строго монотонно возрастающее число. id Поставляется с логотипом, который позволяет всем follower понимать leader обмен. и follower больше никогда HW Как правило, нужно после каждого краша заходить и перезагружаться. leader Загляни туда раньше, когда leader из журнала, от которого offset Начало из. Посмотрите ниже Leader Epoch Как решить две вышеуказанные проблемы из.
потеря данныхрешать
здесьиз Ключевые моментысуществовать Вкопировать A После перезапуска как последователь, не занятой HW для Квази-усечениесебя избревно,ида Начать сначала LeaderEpochRequest Попросите копию B Последнее поколение 0 из смещения намного меньше, копировать B встречавозвращатьсясебя из LEO Дайте копию на 2 A,A теперь буду знать новости m2 нельзя сократить, поэтому m2 Получил возможность приезжать зарезервировано. когда A выбран как leader На тот момент все представленные журналы были сохранены, и проблему потери журналов пришлось решать путем выезда. если инициировано LeaderEpochRequest Что мне делать, если он уже мертв? В этом случае потери журнала не будет, поскольку копировать A выбран как leader назад Нетвстреча Усечьсебя избревно,Усечение журнала будет происходить только для тела последователя.
Путаница данныхрешать
Ключевым моментом здесь по-прежнему является шаг 3, копировать A Перезагрузить как follower из Первый шаг еще предстоит сделать LeaderEpochRequest просить leader когда назад 0-е поколение последнего смещения было намного меньше, потому что чтокопировать B Он был заменен, поэтому он даст A начальное смещение первого поколения (то есть 1). После того, как A обнаружит конфликт, он урежет свое собственное смещение для журнала 1iz и начнет заново. leader синхронный. копировать A икопировать B Журналы согласованы, и путаница в журналах устранена.
3.2.3 Резюме
Broker После получения сообщения просто напишите данные PageCache Впоследствии признается, что сообщение для успеха было написано, однако механизм проведения копировать сочетается с ACK Стратегия позволяет избежать последствий простоя одной машины с высокой вероятностью изпотеря. данныхвопрос,ипроходить HW, механизм синхронизации реплик, Leader Epoch и другие меры по решению проблемы согласованности синхронизации данных между несколькими копиями и, наконец, реализованы Broker данныеиз Надежное сохранение.
3.3 Потребитель от Broker Потребляйте сообщение, и лучше всего использовать его только один раз.
Consumer существуют Необходим в процессе потребления сообщений из Kafka отчетсебя из Смещениеданные,толькокогда Consumer К Kafka Только после того, как будет сообщено о смещении сообщения, оно будет Broker Считается, что он был израсходован. Следовательно, Потребитель Терминальное сообщение «Надежность — главное» и offset Связанный с методом подачи, Кафка Потребитель предоставляет два метода отправки сообщения:
(Рекомендуется нажать на изображение, чтобы увеличить его)
Поскольку для имеет возможность повторного потребления, в нормальных обстоятельствах нам обычно требуется идемпотентный контроль для повторного потребления.
Kafka высокая Основой производительности является обеспечение того, чтобы система обрабатывала сообщения с низкой задержкой и высокой пропускной способностью, для этого Kafka Принятие многих изысканных дизайнов:
4.1 Отправить асинхронно
Как уже говорилось выше, Кафка Предусмотрены два метода отправки сообщений: асинхронный и синхронный. существовать Отредактировать В асинхронном режиме весь процесс асинхронен. Позвонить Отправить асинхронно, сообщение будет записано канал, а затем немедленно возвращает успех. Диспетчер Программная встреча channel опросинформация,поставь этоотправить в Брокер, за обработку будет отвечать еще одна асинхронная сопрограмма Broker возвращатьсяизрезультат。Отправить По сути, это слишком асинхронно, но когда существование синхронно обрабатывает результат, Отправить синхроннопроходить waitGroup Преобразуйте асинхронные операции в синхронные. использовать Отредактировать асинхронно может максимизировать пропускную способность отправки сообщений.
4.2 Пакетная отправка
Kafka поддерживать Отправить Оптом сообщение упаковывает множество сообщений в пакет Второсортный для отправки, тем самым уменьшая накладные расходы на передачу по сети и повышая эффективность и пропускную способность передачи по сети. Кафка из Отправить Оптом сообщение передается с помощью следующих двух параметров:
существовать Kafka В клиенте-производителе, когда отправляется сообщение, если включено Отправить оптом,Kafka встреча Воляинформациякэшприезжатьбуферсередина.когдабуферсерединаиз новостей Большой и маленькийприезжать batch.size или Время ожидания до linger.ms Когда, Кафка встреча Волябуферсерединаиз новостейупакованный водинпартия Второсортный Отправлять。еслисуществовать Время ожидания не наступилоприезжать batch.size,Kafka такжевстреча Волябуферсерединаиз новости Отправить,от и избежать задержки сообщений.
4.3 Технология сжатия
Kafka поддерживатьтехнология сжатие, сжимает сообщение перед его передачей, тем самым уменьшая накладные расходы на передачу по сети (процесс сжатия и распаковки будет потреблять определенную сумму денег) CPU ресурс,Поэтому его необходимо корректировать в соответствии с реальной ситуацией. ),Повышение эффективности и пропускной способности сети.
Kafka Поддержка многоалгоритмов сжатия, передача параметров конфигурации. Compression.type (значение по умолчанию: none, что указывает на отсутствие сжатия). существовать Kafka До версии 2.1.0 поддерживалось только GZIP,Snappy и LZ4, все еще поддерживается после версии 2.1.0. Zstandard Алгоритмы (Фейсбук Открытый исходный код, способный обеспечить сверхвысокую степень сжатия). Сравнение производительности этих алгоритмов сжатия (чем выше, тем лучше по обоим показателям) следующее:
существовать Kafka из клиента-производителя, при отправке сообщения, если включена технология сжатия,Kafka Перед отправкой сообщение будет сжато. существовать потребительский клиент, если сообщения сжаты, Kafka Будет распаковывать сообщение при его потреблении. Примечание: Брокер Если установлен алгоритм сжатия, несовместимый с производителем. После получения сообщения оно будет распаковано, повторно сжато и сохранено. Маклер если существует совместимость версии сообщения, также будет запущена распаковка, а затем сжатие.
4.4 PageCache механизм&Добавляйте заказы последовательно
kafka Чтобы улучшить пропускную способность системы и уменьшить задержку, Broker После получения сообщения просто напишите данные PageCache Тогда считается, что сообщение написано успешно, и PageCache серединаизданныепроходить linux из flusher Программа выполняет асинхронную прошивку диска (избегая огромных накладных расходов системы, связанных с синхронной прошивкой диска).,Воляданныепоследовательное добавление записиприезжатьдискфайл журналасередина.потому что PageCache Он кэшируется в памяти, поэтому скорость чтения и записи очень высокая, что может значительно повысить эффективность чтения и записи. одновременное добавление записи Получите максимум от заказа I/O Операции записи избегают медленных и случайных I/O операция, которая может эффективно улучшить Kafka Колебание.
Как показано на картинке выше,Сообщения последовательно добавляются в конец файла журнала каждого раздела.
4.5 Нулевая копия
Kafka серединажитьсуществовать Многоизсетьданные Выносливостьприезжатьдиск(Producer приезжать Брокер) и дисковый файл осуществляют сетевую отправку (Брокер приезжать Потребитель) из процесса, этот процесс производительности напрямую влияет Kafka из Общая пропускная способность. Традиция IO Операция экономит копирование и переключение контекста, а производительность относительно низкая. Кафка использоватьнулевая Технология копирования повышает производительность вышеуказанного процесса. Среди них постоянный диск сетевых данных в основном использует технологию mmap, а канал передачи сетевых данных в основном использует использование. sendfile технология.
4.5.1 Индексное ускорение mmap
В устаревшем режиме для передачи файлов по сети данных требуется 4 раза копирования данных, 4 переключения контекста Второсортировки и два системных вызова Второсортировки. Как показано ниже:
для Для снижения затрат производительности, вызванных переключением контекста и копированием данных.,Kafkaиспользоватьmmapобработать его индексный файл。Kafkaсерединаизиндексдокументиспользовать Всуществоватьизвлекатьфайл журналасерединаиз новостейэффективный поиск。Эти индексные файлы поддерживаютсядляфайл, отображенный в памяти,Это позволяет Kafka быстро получать доступ и выполнять поиск по индексам в памяти.,отиускорятьсясуществоватьфайл журналасерединапозицияинформацияизпроцесс。mmap Прочитайте буфер в ядре (прочитайте буфер) из адреса и пользовательского пространства из буфера (пользователь буфер), так что буфер ядра можно использовать совместно с памятью приложения, устраняя необходимость сопоставления буфера ядра (читай буфер) копировать приезжать пользовательский буфер (пользователь буфер) из процесса, будет происходить весь процесс копирования 4 Второсортныйначальство Переключиться ниже,1 Второсортный CPU Копировать 2Второсортный DMA копия.
4.5.2 Файл отправки для передачи данных по сети
Реализовано традиционным способом: сначала прочитайте диск, а затем используйте его. socket Отправить, актуально Слишком на четыре Второсортный копия. Как показано ниже:
для Для снижения затрат производительности, вызванных переключением контекста и копированием данных.,Kafka существовать Consumer от Broker читатьданныепроцесссерединаиспользовать Понятно sendfile технология.специфическийсуществоватьздесь采использоватьизпландапроходить NIO из transferTo/transferFrom
Вызов операционной системы из sendfile Достичь нулевого количества копий. 2 Второсортный Ядроданныекопировать、2 Второсортный переключатель контекста и системный вызов Второсортный удалены. CPU Копирование данных следующим образом:
4.6 Разреженный индекс
Для Чтобы облегчить извлечение журналов и очистку сроков их хранения, Kafka Помимо файлов журналов, они используются для хранения журналов. .log файл и файл индекса смещения .index èИндексный файл временной метки .timeindex документ,Имена трех файлов абсолютно одинаковы,следующее:
Kafka индексный файл isv соответствии с В соответствии сразреженный Разработан с учетом идей индексизации. разреженный Ядро индексизации не сохраняет индекс для каждой записи, а только добавляет значение индекса после записи определенной записи. Конкретный интервал равен много и применяется. log.index.interval.bytes Параметры для управления, размер по умолчанию: 4 КБ, значит Kafka Напишите хотя бы 4KB После сообщения данных в существующий индексный файл будет добавлена индексная запись. Видно, что размер одного сообщения будет влиять Kakfa Индекс частоты вставки, следовательно log.index.interval.bytes Слишком Kafka Настройка значения важного параметра. потому что чтоиндексдокумент Слишкомв соответствии с Инкрементирует элементы индекса в порядке сообщений, поэтому Kafka Для поиска целевого элемента индекса можно использовать алгоритм двоичного поиска, что сокращает временную сложность. O(lgN), что значительно сокращает время поиска.
Индекс смещения file.index
Смещениеиндексдокументиз Структура элемента индексаследующее:
Относительное смещение:保жить Виндексдокументимяначальстволапшаизначинать Смещениеиз Разница,Предполагаемый индексный файл для:00000000000000000100.index,Тогда начальное значение смещения равно 100., при объёме хранения для 150 из индексация новостей,Относительное смещение из в существующем индексном файле составляет 150 - 100 = 50.. Преимущество этого заключается в использовании 4 字节保жить Смещение Прямо сейчас Может,Можно сэкономить много дискового пространства.
Физическое расположение файла:информациясуществовать log Сохраните местоположение в файле, то есть Kafka Вы можете быстро найти сообщение «Жить существовать» по смещению сообщения, введя индексный файл смещения. log Физическое местоположение в файле. Используя значение физического местоположения, мы можем быстро изменить его. log документсерединапопытаться найтиприезжатьпереписыватьсяиз новостей Понятно。Ниже я использую фотографии для представления Kafka Как быстро получить сообщения:
гипотеза Kafka Необходимо найти перемещение как 3550 из новостей,Так Kafka Во-первых, использование алгоритма двоичного поиска позволит найти жилье меньше, чем 3550 из Максимальная запись индекса: [3528, 2310272], после получения пункта индекса приезжать, Кафка Будет основано на записи индекса существующего физического местоположения файла. log от позиции в файле 2310272 Начинайте поиск последовательно, пока не найдете место перемещения для 3550 из новостей Записыватьдляконец。
Индексный файл метки времени.timeindex
Kafka существовать 0.10.0.0 В будущих версиях к сообщениям будет добавляться информация о временных метках, чтобы удовлетворить потребности пользователей в запросе записей сообщений на основе временных меток, Kafka добавляет индексный файл временной метки,时间戳индексдокументиз Структура элемента индексаследующее:
Получение файла индекса временной метки аналогично файлу индекса смещения. Ниже представлена диаграмма сообщений быстрого поиска:
4.7 broker & раздел данных
Kafka Кластер содержит несколько маклер. один topic Обычно их несколько partition,partition распределенныйсуществоватьдругойиз Broker включено, для хранения topic из новостей, что делает Kafka существующего может обрабатывать и хранить сообщения на нескольких машинах, давая kafka поставлять Давать Понятнои ХОРОШОиз новостейвычислительная мощностьирядом КВозможность расширения。
4.8 Модель многореакторной многопоточной сети
много Reactor многопоточная сетевая модель Это эффективная модель сетевой связи, в которой используется Reactor Потоки — рабочие потоки для обработки сетевых запросов, могут полностью использовать много ядер. CPU производительности, улучшить пропускную способность системы и скорость отклика. Кафка для повышения пропускной способности системы, существования Broker Эта модель используется, когда клиент обрабатывает сообщения, как показано ниже:
SocketServer и KafkaRequestHandlerPool Есть два наиболее важных компонента:
Весь процесс обработки запроса на стороне сервера условно разделен на следующие этапы:
5.1 Балансировка нагрузки
5.1.1 Балансировка нагрузки производителя
Kafka Завершение дисбалансировки производства нагрузка в основном относится к тому, как отправить сообщение отправить в Подходит для разделения. Кафка Когда производитель создает сообщение, он доставляет сообщение в указанный раздел в соответствии с разделителем, поэтому Kafka избалансировка нагрузка во многом зависит от разделителей. Кафка Разделитель по умолчанию Kafka Предоставить из Дефолт Партиционер. Он из раздела Стратегия основан на Key ценить Распределение разделовиз:
5.1.2 Балансировка потребительской нагрузки
существовать Kafka , каждый раздел (Partition) может использоваться только одним потребителем в одной группе потребителей. В группе потребителей много потребителей, когда, Кафка балансировка будет выполнена автоматически нагрузку, распределяйте перегородки равномерно на каждого потребителя. существовать Kafka в,потребительская балансировка Алгоритм нагрузки может включать заданную группу потребителей из partition.assignment.strategy параметры для выбора. В настоящее время основные распределения разделов следующие:
5.2 Управление кластером
Kafka С помощью ZooKeeper Выполните управление кластером. Кафка много информации, все существуют ZK Средний уход, например broker Кластерная информация, потребитель информация о кластере, topic сопутствующая информация, partition Информация и т. д. Кафка из ОЧЕНЬ много функция Слишком основана на ZK Осознайте из, например, partition Селектор, брокер Управление кластером, потребитель Балансировка нагрузки и т. д. не будут описаны в этой статье из-за ограничений по объему. Вот онлайн-скриншот, который может попробовать каждый: