Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
Извлечение смещений по метке даты/времени Размер сегмента журнала влияет на извлечение смещений по метке даты/време- ни. При запросе смещений для раздела с конкретной меткой даты/времени Kafka ищет файл сегмента журнала, который был записан в этот момент. Для этого используется время создания и последнего изменения файла: выполняется поиск файла, который был бы создан до указанной метки даты/времени и последний раз менялся после нее. В ответе возвращается смещение начала этого сегмента журнала, являющееся также именем файла. log.segment.ms Другой.способ.управления.закрытием.сегментов.журнала.—.с.помощью.параме- тра. log.segment.ms ,.задающего.отрезок.времени,.по.истечении.которого.сегмент. журнала.закрывается..Как.и.параметры. log.retention.bytes .и. log.retention.ms ,. параметры. log.segment.bytes .и. log.segment.ms .не.являются.взаимоисключа- ющими..Kafka.закрывает.сегмент.журнала,.когда.или.истекает.промежуток. времени,.или.достигается.заданное.ограничение.по.размеру,.в.зависимости.от. того,.какое.из.этих.событий.произойдет.первым..По.умолчанию.значение.пара- метра. log.segment.ms .не.задано,.в.результате.чего.закрытие.сегментов.журналов. обуслов.ливается.их.размером. Выбор аппаратного обеспечения 53 Эффективность ввода/вывода на диск при использовании ограничений по времени на сегменты Задавая ограничения по времени на сегменты журналов, важно учитывать, что произойдет с производительностью операций с жестким диском при одновремен- ном закрытии нескольких сегментов. Это может произойти при наличии большого числа разделов, которые никогда не достигают пределов размера для сегментов журнала, поскольку отсчет времени начинается при запуске брокера и время для этих разделов истечет тоже одновременно. message.max.bytes Брокер.Kafka.позволяет.с.помощью.параметра. message.max.bytes .ограничивать. максимальный.размер.генерируемых.сообщений..Значение.этого.параметра.по. умолчанию.равно.1.000.000.(1.Мбайт)..Производитель,.который.попытается.от- править.сообщение.большего.размера,.получит.от.брокера.извещение.об.ошибке,. а.сообщение.принято.не.будет..Как.и.в.случае.всех.остальных.размеров.в.байтах,. указываемых.в.настройках.брокера,.речь.идет.о.размере.сжатого.сообщения,.так. что.производители.могут.отправлять.сообщения,.размер.которых.в.несжатом.виде. гораздо.больше,.если.их.можно.сжать.до.задаваемых.параметром. message.max.bytes пределов. Увеличение.допустимого.размера.сообщения.серьезно.влияет.на.производитель- ность..Больший.размер.сообщений.означает,.что.потоки.брокера,.обрабатывающие. сетевые.соединения.и.запросы,.будут.заниматься.каждым.запросом.дольше..Также. бо'льшие.сообщения.увеличивают.объем.записываемых.на.диск.данных,.что.влияет. на.пропускную.способность.ввода/вывода. Согласование настроек размеров сообщений Размер сообщения, задаваемый на брокере Kafka, должен быть согласован с на- стройкой fetch.message.max.bytes на клиентах потребителей. Если это значение меньше, чем message.max.bytes, то потребители не смогут извлекать превыша- ющие данный размер сообщения, вследствие чего потребитель может зависнуть и прекратить дальнейшую обработку. То же самое относится к параметру replica. fetch.max.bytes на брокерах при конфигурации кластера. Выбор аппаратного обеспечения Выбор.подходящего.аппаратного.обеспечения.для.брокера.Kafka.—.скорее.искус- ство,.чем.наука..У.самой.платформы.Kafka.нет.каких-либо.строгих.требований. к.аппаратному.обеспечению,.она.будет.работать.без.проблем.на.любой.системе.. Но.если.говорить.о.производительности,.то.на.нее.влияют.несколько.факторов:. емкость.и.пропускная.способность.дисков,.оперативная.память,.сеть.и.CPU.. 54 Глава 2 • Установка Kafka Сначала.нужно.определиться.с.тем,.какие.типы.производительности.важнее.всего. для.вашей.системы,.после.чего.можно.будет.выбрать.оптимальную.конфигурацию. аппаратного.обеспечения,.вписывающуюся.в.бюджет. Пропускная способность дисков Пропускная.способность.дисков.брокера,.которые.используются.для.хранения. сегментов.журналов,.самым.непосредственным.образом.влияет.на.производитель- ность.клиентов-производителей..Сообщения.Kafka.должны.фиксироваться.в.ло- кальном.хранилище,.которое.бы.подтверждало.их.запись..Лишь.после.этого.можно. считать.операцию.отправки.успешной..Это.значит,.что.чем.быстрее.выполняются. операции.записи.на.диск,.тем.меньше.будет.задержка.генерации.сообщений. Очевидное.действие.при.возникновении.проблем.с.пропускной.способностью. дисков.—.использовать.жесткие.диски.с.раскручивающимися.пластинами.(HDD). или.твердотельные.накопители.(SSD)..У.SSD.на.порядки.ниже.время.поиска/до- ступа.и.выше.производительность..HDD.же.более.экономичны.и.обладают.более. высокой.относительной.емкостью..Производительность.HDD.можно.улучшить. за.счет.большего.их.числа.в.брокере,.или.используя.несколько.каталогов.данных,. или.устанавливая.диски.в.массив.независимых.дисков.с.избыточностью.(redundant. array.of.independent.disks,.RAID)..На.пропускную.способность.влияют.и.другие. факторы,.например,.технология.изготовления.жесткого.диска.(к.примеру,.SAS.или. SATA),.а.также.характеристики.контроллера.жесткого.диска. Емкость диска Емкость.—.еще.один.аспект.хранения..Необходимый.объем.дискового.простран- ства.определяется.тем,.сколько.сообщений.необходимо.хранить.одновременно.. Если.ожидается,.что.брокер.будет.получать.1.Тбайт.трафика.в.день,.то.при.7-днев- ном.хранении.ему.понадобится.доступное.для.использования.хранилище.для. сегментов.журнала.объемом.минимум.7.Тбайт..Следует.также.учесть.перерасход. как.минимум.10.%.для.других.файлов,.не.считая.буфера.для.возможных.колебаний. трафика.или.роста.его.с.течением.времени. Емкость.хранилища.—.один.из.факторов,.которые.необходимо.учитывать.при. определении.оптимального.размера.кластера.Kafka.и.принятии.решения.о.его. расширении..Общий.трафик.кластера.можно.балансировать.за.счет.нескольких. разделов.для.каждой.темы,.что.позволяет.использовать.дополнительные.брокеры. для.наращивания.доступной.емкости.в.случаях,.когда.плотности.данных.на.одного. брокера.недостаточно..Решение.о.том,.сколько.необходимо.дискового.пространства,. определяется.также.выбранной.для.кластера.стратегией.репликации.(подробнее. обсуждается.в.главе.6). Выбор аппаратного обеспечения 55 Память В.обычном.режиме.функционирования.потребитель.Kafka.читает.из.конца.раз- дела,.причем.потребитель.постоянно.наверстывает.упущенное.и.лишь.незна- чительно.отстает.от.производителей,.если.вообще.отстает..При.этом.читаемые. потребителем.сообщения.сохраняются.оптимальным.образом.в.страничном.кэше. системы,.благодаря.чему.операции.чтения.выполняются.быстрее,.чем.если.бы.бро- керу.приходилось.перечитывать.их.с.диска..Следовательно,.чем.больший.объем. оперативной.памяти.доступен.для.страничного.кэша,.тем.выше.быстродействие. клиентов-потребителей. Для.самой.Kafka.не.требуется.выделения.для.JVM.большого.объема.оперативной. памяти.в.куче..Даже.брокер,.который.обрабатывает.X.сообщений.в.секунду.при. скорости.передачи.данных.X.мегабит.в.секунду,.может.работать.с.кучей.в.5.Гбайт.. Остальная.оперативная.память.системы.будет.применяться.для.страничного.кэша. и.станет.приносить.Kafka.пользу.за.счет.возможности.кэширования.используемых. сегментов.журналов..Именно.поэтому.не.рекомендуется.располагать.Kafka.в.си- стеме,.где.уже.работают.другие.важные.приложения,.так.как.им.придется.делиться. страничным.кэшем,.что.снизит.производительность.потребителей.Kafka. Передача данных по сети Максимальный.объем.трафика,.который.может.обработать.Kafka,.определяет- ся.доступной.пропускной.способностью.сети..Зачастую.это.ключевой.(наряду. с.объемом.дискового.хранилища).фактор.выбора.размера.кластера..Затрудняет. этот.выбор.присущий.Kafka.(вследствие.поддержки.нескольких.потребителей). дисбаланс.между.входящим.и.исходящим.сетевым.трафиком..Производитель. может.генерировать.1.Мбайт.сообщений.в.секунду.для.заданной.темы,.но.коли- чество.потребителей.может.оказаться.каким.угодно,.привнося.соответствующий. множитель.для.исходящего.трафика..Повышают.требования.к.сети.и.другие.опе- рации,.такие.как.репликация.кластера.(см..главу.6).и.зеркальное.копирование. (обсуждается.в.главе.8)..При.интенсивном.использовании.сетевого.интерфейса. вполне.возможно.отставание.репликации.кластера,.что.вызовет.неустойчивость. его.состояния. CPU Вычислительные.мощности.не.так.важны,.как.дисковое.пространство.и.опера- тивная.память,.но.они.тоже.в.некоторой.степени.влияют.на.общую.производитель- ность.брокера..В.идеале.клиенты.должны.сжимать.сообщения.ради.оптимизации. использования.сети.и.дискового.пространства..Брокер.Kafka,.однако,.должен.раз- архивировать.все.пакеты.сообщений.для.проверки.контрольных.сумм.отдельных. 56 Глава 2 • Установка Kafka сообщений.и.назначения.смещений..Затем.ему.нужно.снова.сжать.пакет.сообщений. для.сохранения.его.на.диске..Именно.для.этого.Kafka.требуется.бо'льшая.часть.вы- числительных.мощностей..Однако.не.следует.рассматривать.это.как.основ.ной. фактор.при.выборе.аппаратного.обеспечения. Kafka в облачной среде Kafka.часто.устанавливают.в.облачной.вычислительной.среде,.например,.Amazon. Web.Services.(AWS)..AWS.предоставляет.множество.виртуальных.вычислитель- ных.узлов,.все.с.различными.комбинациями.CPU,.оперативной.памяти.и.дис- кового.пространства..Для.выбора.подходящей.конфигурации.виртуального.узла. нужно.учесть.в.первую.очередь.факторы.производительности.Kafka..Начать.можно. с.необходимого.объема.хранения.данных,.после.чего.учесть.требуемую.произво- дительность.генераторов..В.случае.потребности.в.очень.низкой.задержке.могут. понадобиться.виртуальные.узлы.с.оптимизацией.по.операциям.ввода/вывода. с.локальными.хранилищами.на.основе.SSD..В.противном.случае.может.оказаться. достаточно.удаленного.хранилища.(например,.AWS.Elastic.Block.Store)..После. принятия.этих.решений.можно.будет.выбрать.из.числа.доступных.вариантов.CPU. и.оперативной.памяти. На.практике.это.означает,.что.в.случае.задействования.AWS.можно.выбрать. виртуальные.узлы.типов.m4.или.r3..Виртуальный.узел.типа.m4.допускает.более. длительное.хранение,.но.при.меньшей.пропускной.способности.записи.на.диск,. поскольку.основан.на.адаптивном.блочном.хранилище..Пропускная.способность. виртуального.узла.типа.r3.намного.выше.благодаря.использованию.локальных. SSD-дисков,.но.последние.ограничивают.доступный.для.хранения.объем.данных.. Преимущества.обоих.этих.вариантов.сочетают.существенно.более.дорогостоящие. типы.виртуальных.узлов.i2.и.d2. Кластеры Kafka Отдельный.сервер.Kafka.хорошо.подходит.для.локальной.разработки.или.созда- ния.прототипов.систем,.но.настроить.несколько.брокеров.для.совместной.работы. в.виде.кластера.намного.выгоднее.(рис..2.2)..Основная.выгода.от.этого.—.возмож- ность.масштабировать.нагрузку.на.несколько.серверов..Вторая.по.значимости.—. возможность.использования.репликации.для.защиты.от.потери.данных.вслед- ствие.отказов.отдельных.систем..Репликация.также.дает.возможность.выполнить. работы.по.обслуживанию.Kafka.или.нижележащей.системы.с.сохранением.до- ступности.для.клиентов..В.этом.разделе.мы.рассмотрим.только.настройку.кла- стера.Kafka..Более.подробную.информацию.о.репликации.данных.вы.найдете. в.главе.6. Кластеры Kafka 57 Рис. 2.2. Простой кластер Kafka Сколько должно быть брокеров? Размер.кластера.Kafka.определяется.несколькими.факторами..Первый.из.них.—. требующийся.для.хранения.сообщений.объем.дискового.пространства.и.объем.до- ступного.места.на.отдельном.брокере..Если.кластеру.необходимо.хранить.10.Тбайт. данных,.а.отдельный.брокер.может.хранить.2.Тбайт,.то.минимальный.размер.кла- стера.—.пять.брокеров..Кроме.того,.использование.репликации.может.повысить. требования.к.хранилищу.минимум.на.100.%.(в.зависимости.от.ее.коэффициента). (см..главу.6)..Это.значит,.что.при.использовании.репликации.тот.же.кластер.дол- жен.будет.содержать.как.минимум.десять.брокеров. Еще.один.фактор,.который.нужно.учесть,.—.возможности.кластера.по.обработке. запросов..Например,.каковы.возможности.сетевых.интерфейсов.и.способны.ли. они.справиться.с.трафиком.клиентов.при.нескольких.потребителях.данных.или. колебаниями.трафика.на.протяжении.хранения.данных.(то.есть.в.случае.вспле- сков.трафика.в.период.пиковой.нагрузки)..Если.сетевой.интерфейс.отдельного. брокера.используется.на.80.%.при.пиковой.нагрузке,.а.потребителя.данных.два,. то.они.не.смогут.справиться.с.пиковым.трафиком.при.менее.чем.двух.брокерах.. Если.в.кластере.используется.репликация,.она.играет.роль.дополнительного.по- требителя.данных,.который.необходимо.учесть..Может.быть.полезно.увеличить. количество.брокеров.в.кластере,.чтобы.справиться.с.проблемами.производитель- ности,.вызванными.понижением.пропускной.способности.дисков.или.объема.до- ступной.оперативной.памяти. 58 Глава 2 • Установка Kafka Конфигурация брокеров Есть.только.два.требования.к.конфигурации.брокеров.при.их.работе.в.составе.од- ного.кластера.Kafka..Первое.—.в.конфигурации.всех.брокеров.должно.быть.одина- ковое.значение.параметра. zookeeper.connect ..Он.задает.ансамбль.ZooKeeper.и.путь. хранения.кластером.метаданных..Второе.—.у.каждого.из.брокеров.кластера.должно. быть.уникальное.значение.параметра. broker.id ..Если.два.брокера.с.одинаковым. значением. broker.id .попытаются.присоединиться.к.кластеру,.то.второй.брокер. запишет.в.журнал.сообщение.об.ошибке.и.не.запустится..Существуют.и.другие. параметры.конфигурации.брокеров,.используемые.при.работе.кластера,.а.именно. параметры.для.управления.репликацией,.описываемые.в.дальнейших.главах. Тонкая настройка операционной системы Хотя.в.большинстве.дистрибутивов.Linux.есть.готовые.конфигурации.параметров. конфигурации.ядра,.которые.довольно.хорошо.подходят.для.большинства.прило- жений,.можно.внести.в.них.несколько.изменений.для.повышения.производитель- ности.брокера.Kafka..В.основном.они.относятся.к.подсистемам.виртуальной.па- мяти.и.сети,.а.также.специфическим.моментам,.касающимся.точки.монтирования. диска.для.сохранения.сегментов.журналов..Эти.параметры.обычно.настраиваются. в.файле. /etc/sysctl.conf ,.но.лучше.обратиться.к.документации.конкретного.дис- трибутива.Linux,.чтобы.выяснить.все.нюансы.корректировки.настроек.ядра. Виртуальная память Обычно.система.виртуальной.памяти.Linux.сама.подстраивается.под.нагрузку. системы..Но.можно.внести.некоторые.корректировки.в.работу.как.с.областью. подкачки,.так.и.с.«грязными».страницами.памяти,.чтобы.лучше.приспособить.ее. к.специфике.нагрузки.Kafka. Как.и.для.большинства.приложений,.особенно.тех,.где.важна.пропускная.способ- ность,.лучше.избегать.подкачки.(практически).любой.ценой..Затраты,.обуслов- ленные.подкачкой.страниц.памяти.на.диск,.существенно.влияют.на.все.аспекты. производительности.Kafka..Кроме.того,.Kafka.активно.использует.системный. страничный.кэш,.и.если.подсистема.виртуальной.памяти.выполняет.подкачку.на. диск,.то.страничному.кэшу.выделяется.недостаточное.количество.памяти. Один.из.способов.избежать.подкачки.—.не.выделять.в.настройках.никакого.места. для.нее..Подкачка.—.не.обязательное.требование,.а.скорее.страховка.на.случай. какой-либо.аварии.в.системе..Она.может.спасти.от.неожиданного.прерывания.си- стемой.выполнения.процесса.вследствие.нехватки.памяти..Поэтому.рекомендуется. делать.значение.параметра. vm.swappiness .очень.маленьким,.например.1..Этот.па- раметр.представляет.собой.вероятность.(в.процентах).того,.что.подсистема.вирту- альной.памяти.воспользуется.подкачкой.вместо.удаления.страниц.из.страничного. кэша..Лучше.уменьшить.размер.страничного.кэша,.чем.использовать.подкачку. Кластеры Kafka 59 Почему бы не сделать параметр swappiness равным 0? Ранее рекомендовалось всегда задавать параметр vm.swappiness равным 0. Смысл этого значения был таков: никогда не использовать подкачку, разве что при нехватке памяти. Однако в версии 3.5-rc1 ядра Linux смысл поменялся, и это изменение было бэкпортировано во многие дистрибутивы, включая ядро Red Hat Enterprise Linux версии 2.6.32-303. Значение 0 при этом приобрело смысл «не использовать подкачку ни при каких обстоятельствах». Поэтому сейчас ре- комендуется использовать значение 1. Корректировка.того,.что.ядро.системы.делает.с.«грязными».страницами,.которые. должны.быть.сброшены.на.диск,.также.имеет.смысл..Быстрота.ответа.Kafka.про- изводителям.зависит.от.производительности.дисковых.операций.ввода/вывода.. Именно.поэтому.сегменты.журналов.обычно.размещаются.на.быстрых.дисках:.или. отдельных.дисках.с.быстрым.временем.отклика.(например,.SSD),.или.дисковых. подсистемах.с.большим.объемом.NVRAM.для.кэширования.(например,.RAID).. В.результате.появляется.возможность.уменьшить.число.«грязных».страниц,.по.до- стижении.которого.запускается.фоновый.сброс.их.на.диск..Для.этого.необходимо. задать.значение.параметра. vm.dirty_background_ratio .меньшее,.чем.значение.по. умолчанию.(равно.10)..Оно.означает.долю.всей.памяти.системы.(в.процентах),. и.во.многих.случаях.его.можно.задать.равным.5..Однако.не.следует.делать.его. равным.0,.поскольку.в.этом.случае.ядро.начнет.непрерывно.сбрасывать.страницы. на.диск.и.тем.самым.потеряет.возможность.буферизации.дисковых.операций.за- писи.при.временных.флуктуациях.производительности.нижележащих.аппаратных. компонентов. Общее.количество.«грязных».страниц,.при.превышении.которого.ядро.системы. принудительно.инициирует.запуск.синхронных.операций.по.сбросу.их.на.диск,. можно.повысить.и.увеличением.параметра. vm.dirty_ratio .до.значения,.превыша- ющего.значение.по.умолчанию.—.20.(тоже.доля.в.процентах.от.всего.объема.памяти. системы)..Существует.широкий.диапазон.возможных.значений.этого.параметра,. но.наиболее.разумные.располагаются.между.60.и.80..Изменение.этого.параметра. является.несколько.рискованным.в.смысле.как.объема.не.сброшенных.на.диск.дей- ствий,.так.и.вероятности.возникновения.длительных.пауз.ввода/вывода.в.случае. принудительного.запуска.синхронных.операций.сброса..При.выборе.более.высо- ких.значений.параметра. vm.dirty_ratio .настойчиво.рекомендуется.использовать. репликацию.в.кластере.Kafka,.чтобы.защититься.от.системных.сбоев. При.выборе.значений.этих.параметров.имеет.смысл.контролировать.количество. «грязных».страниц.в.ходе.работы.кластера.Kafka.под.нагрузкой.при.промышленной. эксплуатации.или.имитационном.моделировании..Определить.его.можно.с.помо- щью.просмотра.файла. /proc/vmstat : # cat /proc/vmstat | egrep "dirty|writeback" nr_dirty 3875 nr_writeback 29 nr_writeback_temp 0 # |