Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
199 Эластичные кластеры Архитектуры.типа.«активный.—.резервный».служат.для.защиты.бизнеса.при.сбое. кластера.Kafka.за.счет.переключения.приложения.на.взаимодействие.с.другим. кластером.в.случае.отказа.первоначального..Эластичные кластеры.(stretch.clusters). предназначены.для.предотвращения.отказа.кластера.Kafka.в.случае.сбоя.всего. ЦОД..Это.достигается.за.счет.установки.одного.кластера.Kafka.в.нескольких.ЦОД. Эластичные.кластеры.принципиально.отличаются.от.других.мультикластерных. архитектур..Начать.нужно.с.того,.они.не.мультикластерные.—.речь.идет.об.одном. кластере..В.результате.оказывается.не.нужен.процесс.зеркального.копирования. для.синхронизации.двух.кластеров..Для.обеспечения.согласованности.всех.бро- керов.кластера.используется.обычный.механизм.репликации.Kafka..Эта.схема. может.включать.синхронную.репликацию..Обычно.производители.после.успеш- ной.записи.сообщения.в.Kafka.получают.подтверждение.от.брокера.Kafka..В.слу- чае.же.эластичного.кластера.можно.настроить.все.так,.чтобы.подтверждение.от- правлялось.после.успешной.записи.сообщения.в.брокеры.Kafka.в.двух.ЦОД.. Для.этого.потребуются.соответствующие.описания.стоек,.чтобы.у.каждого.раз- дела.были.реплики.в.нескольких.ЦОД..Придется.также.воспользоваться.параме- трами. min.insync.replicas .и. acks=all ,.чтобы.гарантировать.подтверждение.каж- дой.записи.как.минимум.из.двух.ЦОД. Преимущества.такой.архитектуры.заключаются.в.синхронной.репликации.—.для. некоторых.коммерческих.предприятий.необходимо,.чтобы.их.DR-сайт.всегда.был. на.100.%.согласован.с.основным.сайтом..Зачастую.это.нужно.согласно.законода- тельству,.так.что.компания.вынуждена.соблюдать.указанное.требование.во.всех. своих.хранилищах.данных,.включая.Kafka..Еще.одно.преимущество.—.использу- ются.оба.ЦОД.и.все.брокеры.кластера..Ничего.не.простаивает,.как.в.архитектурах. типа.«активный.—.резервный». Однако.эта.архитектура.защищает.от.ограниченного.списка.типов.аварий:.только. от.отказов.ЦОД,.но.не.от.отказов.приложений.или.Kafka..Ограничена.также.экс- плуатационная.сложность..Кроме.того,.архитектура.требует.физической.инфра- структуры,.обеспечить.которую.под.силу.не.всем.компаниям. Использовать.эту.архитектуру.имеет.смысл,.если.у.вас.есть.возможность.уста- новить.Kafka.по.крайней.мере.в.трех.ЦОД.с.высокой.пропускной.способностью. и.низкой.сетевой.задержкой.взаимодействия.между.ними..Достичь.этого.можно,. если.вашей.компании.принадлежат.три.здания.на.одной.улице.или.(чаще.всего). три.зоны.доступности.в.пределах.одного.региона.облачного.провайдера. Причина,.по.которой.нужны.три.ЦОД,.заключается.в.том,.что.для.ZooKeeper.тре- буется,.чтобы.в.кластере.было.нечетное.число.узлов,.он.остается.доступным,.пока. доступно.большинство.из.них..При.двух.ЦОД.и.нечетном.числе.узлов.в.одном. 200 Глава 8 • Зеркальное копирование между кластерами из.ЦОД.будет.больше.узлов,.так.что.при.его.недоступности.окажется.недоступен. и.ZooKeeper,.а.значит,.и.Kafka..При.трех.ЦОД.можно.легко.распределить.узлы.так,. что.ни.у.одного.из.них.не.будет.большинства..И.если.один.из.ЦОД.станет.недо- ступен,.в.других.двух.останется.большинство,.а.значит,.останется.доступен.кластер. ZooKeeper..А.следовательно,.и.кластер.Kafka. Работу.ZooKeeper.и.Kafka.в.двух.ЦОД.можно.обеспечить.с.помощью.таких.на- строек.групп.ZooKeeper,.которые.позволяли.бы.выполнять.ручное.аварийное.пере- ключение.между.этими.ЦОД..Однако.такая.схема.реализуется.редко. Утилита MirrorMaker (Apache Kafka) В.Apache.Kafka.включена.простая.утилита.для.зеркального.копирования.данных. между.двумя.ЦОД..Она.называется.MirrorMaker.и.представляет.собой.набор.по- требителей.(по.историческим.причинам.именуемых.в.документации.MirrorMaker. потоками данных.(streams)),.состоящих.в.одной.группе.и.читающих.данные.из. выбранного.вами.для.репликации.набора.тем..У.каждого.из.процессов.MirrorMaker. имеется.один.производитель..Последовательность.выполняемых.действий.очень. проста:.MirrorMaker.запускает.для.каждого.потребителя.поток.выполнения..По- требители.читают.события.из.назначенных.им.тем.и.разделов.исходного.кластера. и.используют.разделяемый.производитель.для.отправки.этих.событий.на.целевой. кластер..Каждые.60.секунд.(по.умолчанию).потребители.сообщают.производи- телю,.чтобы.он.отправил.все.имеющиеся.события.в.Kafka.и.подождал.от.нее.под- тверждения.их.успешного.получения..Затем.потребители.обращаются.к.исходному. кластеру.Kafka.для.фиксации.смещений.этих.событий..Такая.схема.гарантирует. отсутствие.потерь.данных.(Kafka.подтверждает.получение.сообщений.до.фиксации. смещений.в.исходном.кластере),.а.в.случае.аварийного.сбоя.процесса.MirrorMaker. образуются.дубликаты.максимум.за.60.секунд.(рис..8.6). Рис. 8.6. Процесс MirrorMaker в Kafka Утилита MirrorMaker (Apache Kafka) 201 Еще о MirrorMaker Утилита MirrorMaker представляется очень простой, но в силу нашего стремления к эффективности и максимальной приближенности к строго однократной до- ставке ее корректная реализация — задача довольно хитрая. К моменту выхода версии Kafka 0.10.0.0 MirrorMaker переписывалась уже четырежды и, возможно, не в последний раз. Приведенные в следующих разделах описание и различные подробности относятся к MirrorMaker такой, какой она была версиях Kafka с 0.9.0.0 по 0.10.2.0. Настройка MirrorMaker У.MirrorMaker.очень.широкие.возможности.настройки..Во-первых,.утилита.ис- пользует.один.производитель.и.несколько.потребителей,.так.что.при.ее.настройке. можно.задействовать.все.конфигурационные.параметры.производителей.и.по- требителей..Кроме.того,.у.самой.MirrorMaker.есть.обширный.список.параметров. конфигурации,.зачастую.взаимосвязанных.довольно.запутанным.образом..Мы.про- демонстрируем.несколько.примеров.и.отметим.некоторые.наиболее.важные.пара- метры.конфигурации,.но.всестороннее.описание.MirrorMaker.выходит.за.рамки. данной.книги. С.учетом.сказанного.взглянем.на.пример.использования.MirrorMaker: bin/kafka-mirror-maker --consumer.config etc/kafka/consumer.properties --producer. config etc/kafka/producer.properties --new.consumer --num.streams=2 --whitelist ".*" Рассмотрим.основные.аргументы.командной.строки.MirrorMaker: consumer.config ..Это.настройки.для.всех.потребителей,.извлекающих.данные.из. исходного.кластера..Конфигурационный.файл.у.них.один.на.всех,.а.значит,.мож- но.использовать.только.один.исходный.кластер.и.один. group.id ..Поэтому.все.по- требители.окажутся.в.составе.одной.группы.потребителей.—.это.именно.то,.что. нам.и.требуется..Обязательные.настройки.в.этом.файле.—. bootstrap.servers (для.исходного.кластера).и. group.id ..Но.можете.задать.любые.необходимые. вам.дополнительные.настройки..А.вот.параметр. auto.commit.enable=false .вам. вряд.ли.стоит.менять..Для.MirrorMaker.необходима.возможность.фиксировать. свои.смещения.после.их.успешной.доставки.в.целевой.кластер.Kafka..Измене- ние.этого.параметра.может.привести.к.потере.данных..Имеет.смысл.также.по- менять.значение.параметра. auto.offset.reset ..По.умолчанию.оно.равно. latest ,. то.есть.MirrorMaker.будет.зеркально.копировать.только.события,.поступившие. в.исходный.кластер.после.запуска.MirrorMaker..Если.вы.предпочли.бы.скопиро- вать.и.существующие.данные,.поменяйте.его.значение.на. earliest ..Мы.обсудим. другие.настройки.конфигурации.в.разделе.«Тонкая.настройка.MirrorMaker». далее.в.этой.главе. producer.config ..Эти.настройки.производителей.используются.MirrorMaker. для.записи.в.целевой.кластер..Единственная.обязательная.настройка.среди. 202 Глава 8 • Зеркальное копирование между кластерами них.—. bootstrap.servers .(для.целевого.кластера)..Обсудим.дополнительные. настройки.конфигурации.в.разделе.«Тонкая.настройка.MirrorMaker». new.consumer ..MirrorMaker.может.задействовать.потребитель.версии.0.8.или.0.9.. Рекомендуем.использовать.потребители.версии.0.9,.поскольку.они.в.настоящий. момент.стабильнее. num.streams ..Как.мы.уже.объясняли,.каждый.поток.означает.еще.один.потреби- тель,.читающий.данные.из.исходного.кластера..Помните,.что.все.потребители.из. одного.процесса.MirrorMaker.делят.между.собой.одни.и.те.же.производители.. Для.потребления.всех.данных.от.производителя.потребуется.несколько.по- токов..Для.большего.повышения.производительности.понадобится.еще.один. процесс.MirrorMaker. whitelist ..Регулярное.выражение.для.названий.зеркально.копируемых.тем.. Все.темы,.чьи.названия.соответствуют.данному.регулярному.выражению,. будут.копироваться..В.данном.примере.мы.реплицируем.их.все,.но.часто.имеет. смысл.использовать.регулярное.выражение.вроде. prod.* ,.чтобы.не.реплициро- вать.тестовые.темы..Или.можно.при.архитектуре.типа.«активный.—.активный». задать.для.MirrorMaker,.копирующего.данные.из.нью-йоркского.ЦОД.в.ЦОД. Сан-Франциско,.значение.этого.параметра.равным. whitelist="NYC.\*" ,.чтобы. избежать.обратного.копирования.тем.из.Сан-Франциско. Развертывание MirrorMaker для промышленной эксплуатации В.предыдущем.примере.MirrorMaker.запускалась.как.утилита.командной.строки.. Когда.MirrorMaker.работает.в.среде.промышленной.эксплуатации,.желательно. запускать.ее.как.сервис.с.помощью.команды. nohup .и.перенаправлять.выводимую. в.консоль.информацию.в.файл.журнала..Формально.у.MirrorMaker.есть.параметр. командной.строки. -daemon ,.которая.делает.все.перечисленное,.но.в.последних.вы- пусках.Kafka.она.не.работает.как.полагается. У.большинства.использующих.MirrorMaker.компаний.написаны.собственные. сценарии.запуска,.включающие.применяемые.параметры..Для.автоматизации.раз- вертывания.и.управления.параметрами.и.файлами.конфигураций.задействуются. также.такие.системы.развертывания.для.промышленной.эксплуатации,.как.Ansible,. Puppet,.Chef.и.Salt. Более.продвинутый.вариант.развертывания,.который.становится.все.более.по- пулярным,.—.запуск.MirrorMaker.в.контейнере.Docker..Утилита.MirrorMaker. совершенно.не.сохраняет.состояние,.для.нее.не.нужно.никакого.дискового.хра- нилища.—.все.данные.и.состояние.хранятся.в.самой.Kafka..Благодаря.использо- ванию.Docker.в.качестве.адаптера.для.MirrorMaker.становится.возможной.также. Утилита MirrorMaker (Apache Kafka) 203 работа.нескольких.экземпляров.утилиты.на.одной.машине..Поскольку.отдельный. экземпляр.MirrorMaker.ограничивается.пропускной.способностью.одного.про- изводителя,.часто.бывает.важно.запустить.несколько.экземпляров.MirrorMaker,. а.Docker.эту.задачу.облегчает..Он.также.упрощает.вертикальное.масштабирование. в.обе.стороны.—.можно.добавить.контейнеры,.если.возникает.потребность.в.до- полнительной.пропускной.способности.в.период.пиковой.нагрузки,.а.затем.убрать. их..При.работе.MirrorMaker.в.облачной.среде.можно.даже.подключать.дополни- тельные.серверы,.чтобы.запускать.на.них.контейнеры.в.зависимости.от.нагрузки. и.потребностей.в.обслуживании. Если.это.возможно,.запускайте.MirrorMaker.в.целевом.ЦОД..То.есть.при.отправке. данных.из.Нью-Йорка.в.Сан-Франциско.MirrorMaker.должен.работать.в.Сан- Франциско.и.потреблять.данные.из.Нью-Йорка..Причина.состоит.в.том,.что.сеть. внутри.ЦОД.более.надежна,.чем.магистральные.сети..В.случае.разрыва.связности. сети.и.потери.связи.между.ЦОД.потребитель,.который.не.может.подключиться. к.кластеру,.намного.безопаснее.подобного.производителя..Такой.потребитель. просто.не.сможет.читать.события,.но.эти.события.все.равно.будут.сохранены.в.ис- ходном.кластере.Kafka.и.могут.находиться.там.длительное.время..Риска.потери. событий.нет..В.то.же.время,.если.события.уже.прочитаны,.а.MirrorMaker.не.может. отправить.их.из-за.разрыва.связности.сети,.то.все.равно.появляется.риск.случай- ной.их.потери.MirrorMaker..Так.что.удаленное.потребление.данных.безопаснее. удаленной.их.генерации. В.каких.же.случаях.приходится.потреблять.данные.локально,.а.генерировать. удаленно?.Ответ:.тогда,.когда.необходимо.шифровать.данные.при.их.передаче. из.одного.ЦОД.в.другой,.но.не.нужно.шифровать.внутри.ЦОД..Использование. SSL-шифрования.при.подключении.к.Kafka.существенно.влияет.на.производи- тельность.потребителей.—.намного.сильнее,.чем.на.производительность.произ- водителей..Воздействует.оно.и.на.сами.брокеры.Kafka..Если.трафик.между.ЦОД. требует.шифрования,.лучше.разместить.MirrorMaker.в.исходном.ЦОД,.чтобы.он. потреблял.незашифрованные.данные.локально,.после.чего.отправлять.посред- ством.генерации.их.в.удаленный.ЦОД.через.зашифрованное.SSL-соединение.. Таким.образом,.через.SSL.подключается.к.Kafka.производитель,.а.не.потребитель,. и.производительность.страдает.не.так.сильно..Если.вы.решите.использовать.схему. локального.потребления.и.удаленной.генерации,.позаботьтесь,.чтобы.MirrorMaker. никогда.не.теряла.событий,.задав.параметр. acks=all .и.достаточное.число.повторов. попыток..Настройте.MirrorMaker.так,.чтобы.она.завершала.работу,.если.отправить. события.невозможно,.—.обычно.это.безопаснее,.чем.продолжать.работу.и.риско- вать.потерей.данных. Если.важно.понизить.до.минимума.отставание.целевого.кластера.от.исходного,. лучше.запустить.не.менее.двух.экземпляров.MirrorMaker.на.двух.различных.сер- верах.с.использованием.обоими.одной.и.той.же.группы.потребителей..В.случае. 204 Глава 8 • Зеркальное копирование между кластерами останова.одного.из.серверов.второй.экземпляр.MirrorMaker.продолжит.зеркальное. копирование.данных. При.развертывании.MirrorMaker.для.промышленной.эксплуатации.важно.не.за- бывать.контролировать.ее.работу. Мониторинг отставания..Безусловно,.нужно.знать,.отстает.ли.целевой.кластер. от.исходного..Отставание.равно.разнице.смещений.между.последним.сообще- нием.в.исходном.кластере.Kafka.и.последним.сообщением.в.целевом.кластере. (рис..8.7). На.рис..8.7.последнее.смещение.исходного.кластера.равно.7,.а.последнее.сме- щение.целевого.—.5,.то.есть.величина.отставания.составляет.два.сообщения. Существует.два.способа.отслеживания.этого.отставания,.но.ни.один.из.них. не.идеален. y Проверка.последнего.зафиксированного.MirrorMaker.смещения.в.исходном. кластере.Kafka..Можно.воспользоваться.утилитой. kafka-consumer-groups ,. чтобы.для.каждого.читаемого.MirrorMaker.раздела.выяснить.смещение. последнего.сообщения.раздела,.последнее.зафиксированное.смещение. и.отставание.одного.от.другого..Этот.показатель.не.совсем.точен,.ведь. MirrorMaker.не.фиксирует.смещения.непрерывно..По.умолчанию.она.дела- ет.это.раз.в.минуту,.так.что.вы.обнаружите,.что.отставание.растет.в.течение. минуты,.после.чего.неожиданно.резко.уменьшается..На.схеме.фактическое. отставание.равно.2,.но.утилита. kafka-consumer-groups .покажет,.что.оно. равно.4,.поскольку.MirrorMaker.пока.еще.не.зафиксировала.смещения. для.более.новых.сообщений..Утилита.Burrow.от.LinkedIn.служит.для.мо- ниторинга.той.же.информации,.но.использует.более.сложный.метод.для. определения.того,.действительно.ли.отставание.представляет.собой.про- блему,.так.что.ложной.тревоги.она.не.поднимет. y Проверка.последнего.прочитанного.MirrorMaker.смещения,.даже.если.оно. не.зафиксировано..Встраиваемые.в.MirrorMaker.потребители.публикуют. важнейшие.показатели.в.JMX..Один.из.них.—.максимальное.отставание. потребителя.по.всем.читаемым.разделам..Этот.показатель.тоже.не.вполне. точен,.поскольку.обновляется.в.зависимости.от.прочитанных.потребителем. сообщений,.но.не.учитывает,.удалось.ли.производителю.отправить.эти. сообщения.в.целевой.кластер.Kafka.и.было.ли.их.получение.подтверждено.. В.данном.примере.потребитель.MirrorMaker.проинформирует.об.отставании. в.одно.сообщение,.а.не.в.два,.поскольку.уже.прочитал.сообщение.6,.хотя.оно. еще.не.было.сгенерировано.для.отправки.в.целевой.кластер. Обратите.внимание.на.то,.что.ни.один.из.описанных.методов.не.обнаружит. проблемы.в.случае,.когда.MirrorMaker.пропускает.или.отбрасывает.сообще- ния,.поскольку.они.лишь.отслеживают.последнее.смещение..Продукт.Confluent. Control.Center.заполняет.эту.брешь.в.мониторинге,.контролируя.количество. сообщений.и.контрольные.суммы. 206 Глава 8 • Зеркальное копирование между кластерами Мониторинг показателей..MirrorMaker.включает.производитель.и.потребитель.. У.каждого.из.них.есть.множество.показателей,.которые.рекомендуется.собирать. и.отслеживать..Список.всех.доступных.показателей.приведен.в.документации. Kafka..Здесь.же.мы.перечислим.лишь.некоторые.из.них,.удобные.при.тонкой. настройке.производительности.MirrorMaker: y показатели потребителя:. fetch-size-avg ,. fetch-size-max ,. fetch-rate ,. fetch- throttle-time-avg .и. fetch-throttle-time-max ; y показатели производителя:. batch-size-avg ,. batch-size-max ,. requests-in- flight .и. record-retry-rate ; y показатели обоих:. io-ratio .и. io-wait-ratio «Канарейка» 1 ..Если.вы.контролируете.все.остальное,.«канарейка».не.нуж- на,.но.иметь.ее.в.качестве.дополнительного.слоя.мониторинга.не.помешает.. Она.представляет.собой.процесс,.который.ежеминутно.отправляет.событие. в.специальную.тему.в.исходном.кластере,.после.чего.пытается.прочитать.это. событие.из.целевого.кластера..И.уведомляет.вас.в.случае,.если.передача.этого. события.занимает.слишком.много.времени.(то.есть.MirrorMaker.отстает.или. вообще.не.работает). Тонкая настройка MirrorMaker Выбор.кластера.MirrorMaker.зависит.от.требуемой.пропускной.способности.и.до- пустимого.отставания..Если.даже.минимальное.отставание.недопустимо,.мощности. MirrorMaker.должно.быть.достаточно,.чтобы.выдержать.максимально.возможную. нагрузку..Если.же.некоторое.отставание.допустимо,.можно.выбрать.такие.параме- тры,.при.которых.MirrorMaker.95–99.%.времени.использовалась.бы.на.75–80.%.. Вы.должны.понимать,.что.при.пиковой.нагрузке.возможно.возникновение.неболь- шого.отставания,.но.поскольку.у.MirrorMaker.большую.часть.времени.есть.резервы. производительности,.то.по.окончании.пиковой.нагрузки.она.его.наверстает. Далее.неплохо.бы.оценить.пропускную.способность.MirrorMaker.при.различном. количестве.потоков.потребителей.—.оно.настраивается.с.помощью.параметра. num.streams ..Мы.можем.дать.некоторые.приближенные.оценки.(для.LinkedIn. это.6.Мбайт/с.при.8.потоках.потребителей.и.12.Мбайт/с.при.16),.но.поскольку. очень.многое.зависит.от.вашего.аппаратного.обеспечения,.ЦОД.и.провайдера.об- лачных.сервисов,.будет.правильнее.выполнить.собственные.тесты..В.комплект. поставки.Kafka.включена.утилита.kafka-performance-producer..Ею.можно.вос- пользоваться.для.генерации.данных.(нагрузки).на.исходном.кластере,.а.затем.под- ключить.MirrorMaker.и.начать.эти.данные.зеркально.копировать..Протестируйте. MirrorMaker.при.1,.2,.4,.8,.16.и.32.потоках.потребителей..Найдите.число.потоков,. при.котором.производительность.начинает.падать,.и.установите.значение.параме- 1. Название.напоминает.о.том,.что.долгое.время.шахтеры.использовали.канареек.в.качестве. высокочувствительных.живых.детекторов.рудничного.газа..—.Примеч. пер. |