Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
191 ЦОД,.так.что.в.каждом.из.них.будет.находиться.два.конфликтующих.события.. Приложениям.в.каждом.из.ЦОД.необходимо.знать,.что.делать.в.такой.ситуа- ции:.следует.ли.выбрать.одно.из.событий.как.правильное?.Если.да,.то.должны. существовать.согласованные.правила.выбора,.чтобы.приложения.из.обоих.ЦОД. приняли.одинаковое.решение..Или.следует.счесть,.что.оба.события.правильные,. просто.отправить.пользователю.две.книги,.а.дальше.пусть.другой.отдел.разби- рается.с.возвратом?.Amazon.обычно.так.и.решает.подобные.проблемы,.но.при. торговле.акциями.это.невозможно..При.каждом.сценарии.использования.есть. свой.способ.минимизации.конфликтов.и.обработки.возникающих.конфликтных. ситуаций..Важно.лишь.не.забывать,.что.при.такой.архитектуре.конфликты.не- избежны.и.их.придется.как-то.решать. Если.вам.удастся.решить.проблемы.с.асинхронными.операциями.чтения.одних. и.тех.же.данных.из.нескольких.мест.и.записи.в.них,.то.данная.архитектура.—.очень. неплохой.вариант..Это.наиболее.масштабируемая,.отказоустойчивая,.гибкая.и.за- тратоэффективная.архитектура.из.известных.нам..Так.что.имеет.смысл.поискать. возможности.избежать.циклов.репликации,.ограничить.пользователей.в.основном. одним.ЦОД.и.найти.способ.решения.конфликтов.при.их.возникновении. Часть.проблемы.зеркального.копирования.по.типу.«активный.—.активный»,. особенно.в.случае.более.чем.двух.ЦОД,.состоит.в.том,.что.вам.понадобится.про- цесс.зеркального.копирования.для.каждой.пары.ЦОД.и.каждого.направления.. При.пяти.ЦОД.придется.поддерживать.работу.как.минимум.20.процессов.зер- кального.копирования,.а.вероятнее.всего.40,.поскольку.для.высокой.доступности. необходима.избыточность. Кроме.того,.необходимо.избегать.зацикливания.—.бесконечного.зеркального.копи- рования.одного.и.того.же.события.туда.и.обратно..Для.этого.можно.выделить.для. каждой.логической.темы.отдельную.тему.в.каждом.ЦОД.и.не.реплицировать.темы,. производителем.которых.является.удаленный.ЦОД..Например,.логическая.тема. users.будет.называться.SF.users.в.одном.ЦОД.и.NYC.users.—.в.другом..При.зеркаль- ном.копировании.SF.users.будет.скопирована.из.Сан-Франциско.(SF).в.Нью-Йорк. (NYC),.а.NYC.users.—.из.Нью-Йорка.в.Сан-Франциско..В.результате.все.события. будут.зеркально.копироваться.однократно,.но.в.каждом.из.этих.ЦОД.будут.в.на- личии.обе.темы,.SF.users.и.NYC.users,.то.есть.информация.по.всем.пользователям.. Потребителям.придется.читать.данные.из.*.users,.чтобы.получить.события.по.всем. пользователям..Эту.схему.можно.рассматривать.как.отдельное.пространство.имен. для.каждого.ЦОД,.включающее.все.его.темы..В.нашем.примере.речь.идет.о.про- странствах.имен.NYC.и.SF. Отметим,.что.в.ближайшем.будущем.(возможно,.еще.до.того,.как.к.вам.в.руки. попадет.эта.книга).в.Apache.Kafka.появятся.заголовки.записей 1 ..Это.позволит.по- мечать.записи.ЦОД,.в.котором.они.впервые.появились,.предотвращая.с.помощью. 1. Были.добавлены.в.версии.0.11.0.0..См..KAFKA-4208..—.Примеч. пер. 192 Глава 8 • Зеркальное копирование между кластерами информации.из.этого.заголовка.бесконечные.циклы.зеркального.копирования,.а.так- же.организовывать.обработку.событий.из.разных.ЦОД.по.отдельности..Эту.функ- циональность.можно.реализовать.и.с.помощью.структурированного.формата. данных.для.значений.записей.(мой.излюбленный.пример.—.Avro),.включая.теги. и.заголовки.в.самое.событие..Однако.это.потребует.дополнительных.усилий.при. зеркальном.копировании,.поскольку.ни.одна.из.существующих.утилит.зеркального. копирования.не.будет.поддерживать.пользовательский.формат.заголовка. Архитектура типа «активный — резервный» В.некоторых.случаях.единственное.требование.к.мультикластерной.архитектуре.—. наличие.сценария.действий.в.случае.аварийного.сбоя..Допустим,.у.вас.есть.два. кластера.в.одном.ЦОД..Один.кластер.используется.для.всех.приложений,.а.вто- рой,.содержащий.практически.все.события.из.первого,.предназначен.для.приме- нения.при.полной.недоступности.первого..Или,.возможно,.для.вас.важна.отказо- устойчивость.в.географическом.смысле..Работа.всего.бизнеса.осуществляется. из.ЦОД.в.Калифорнии,.но.на.случай.землетрясения.вы.хотели.бы.иметь.второй. ЦОД.в.Техасе,.большую.часть.времени.практически.не.работающий..В.техасском. ЦОД,.вероятно,.будут.бездействующие.(«холодные»).копии.всех.приложений,. которые.администраторы.могут.запустить.в.случае.чрезвычайной.ситуации.и.ко- торые.будут.применять.второй.кластер.(рис..8.4)..Зачастую.это.требование.за- кона,.а.не.реальный.план.действий,.но.все.равно.лучше.быть.готовым.к.подобной. ситуации. Рис. 8.4. Архитектура типа «активный — резервный» Преимущества.подобной.схемы.—.простота.настройки.и.возможность.использо- вания.практически.в.любом.сценарии..Нужно.просто.установить.второй.кластер. и.настроить.процесс.зеркального.копирования,.который.перебрасывал.бы.данные. из.одного.кластера.в.другой..И.никаких.проблем.с.доступом.к.данным,.обработкой. конфликтов.и.другими.архитектурными.особенностями. Мультикластерные архитектуры 193 Недостатки.же.таковы:.простаивает.отличный.кластер,.да.и.переключение.с.одного. кластера.Kafka.на.другой.на.практике.не.такая.уж.простая.вещь..Определяющий. фактор.—.то,.что.в.настоящий.момент.невозможно.переключиться.с.одного.класте- ра.Kafka.на.другой.без.потери.данных.или.дублирования.событий..А.часто.и.того. и.другого..Можно.минимизировать.эти.неприятные.эффекты,.но.не.исключить.их. полностью. Очевидно,.что.кластер,.не.выполняющий.никакой.полезной.работы,.а.лишь.про- стаивающий.в.ожидании.аварийного.сбоя,.—.пустая.трата.ресурсов..Поскольку. аварийные.сбои.—.событие.редкое.(или.по.крайней.мере.должно.быть.таковым),. большую.часть.времени.этот.кластер.машин.вообще.ничего.не.будет.делать..Неко- торые.компании.пытаются.справиться.с.этой.проблемой.за.счет.так.называемого. DR-кластера.(disaster.recovery,.кластер.для.переключения.в.случае.аварийного. сбоя),.намного.меньшего,.чем.кластер.для.промышленной.эксплуатации..Но.это. довольно.рискованное.решение,.ведь.нет.уверенности,.что.такой.минималистичный. кластер.сможет.справиться.с.реальной.нагрузкой.при.нештатной.ситуации..Другие. компании.предпочитают,.чтобы.в.обычное.время,.когда.нет.нештатных.ситуаций,. резервный.кластер.приносил.пользу,.и.делегируют.ему.рабочую.нагрузку.«только. для.чтения»,.то.есть.фактически.используют.архитектуру.с.топологией.типа.«звез- да»,.где.у.«звезды».только.один.луч. Более.насущный.вопрос:.а.как,.собственно,.переключиться.на.DR-кластер.в.Apache. Kafka? Какой.бы.из.существующих.методов.вы.ни.выбрали,.команда.специалистов.по. обеспечению.надежности.должна.регулярно.практиковаться.в.его.выполнении.. Прекрасно.работающий.сегодня.план.может.перестать.действовать.после.обнов- ления,.а.существующий.инструментарий.—.оказаться.устаревшим.при.новых. сценариях.применения..Тренировки.по.восстановлению.после.сбоя.следует.про- водить.не.реже.чем.раз.в.квартал..А.хорошие.команды.специалистов.по.обеспече- нию.надежности.делают.это.гораздо.чаще..Знаменитая.утилита.Chaos.Monkey. компании.Netflix,.вызывающая.аварийные.сбои.в.случайные.моменты.времени,. доводит.этот.тезис.до.абсолюта:.любой.день.может.оказаться.днем.тренировки. восстановления.после.сбоя. Посмотрим.теперь,.что.включает.в.себя.восстановление.после.сбоя. Потери данных и несогласованности при внеплановом восстановлении после сбоя Поскольку.все.программные.решения.для.зеркального.копирования.Kafka.асин- хронны.(мы.обсудим.синхронные.решения.в.следующем.разделе),.то.в.DR-кластере. не.будет.последних.сообщений.из.основного.кластера..Следует.всегда.контро- лировать.отставание.DR-кластера.от.основного.и.не.позволять.ему.отставать. слишком.сильно..Но.при.перегруженной.системе.стоит.ожидать,.что.DR-кластер. 194 Глава 8 • Зеркальное копирование между кластерами будет.отставать.от.основного.на.несколько.сотен.или.даже.тысяч.сообщений.. Если.ваш.кластер.Kafka.обрабатывает.миллион.сообщений.в.секунду,.а.отстава- ние.DR-кластера.от.основного.равно.5.мс,.то.DR-кластер.даже.при.наилучшем. сценарии.будет.отставать.на.5000.сообщений..Так.что.будьте.готовы.к.потере. данных.в.случае.незапланированного.переключения..Если.же.переключение. запланировано,.можно.остановить.основной.кластер.и.подождать,.пока.в.ходе. зеркального.копирования.будут.скопированы.оставшиеся.сообщения,.прежде. чем.переключать.приложения.на.DR-кластер,.исключив.таким.образом.потерю. данных..На.случай.незапланированного.переключения.учтите,.что.в.Kafka.сейчас. нет.понятия.транзакций,.так.что.если.часть.событий.из.нескольких.тем.связаны. друг.с.другом.(например,.продажи.и.позиции.заказа),.то.часть.событий.может.по- ступить.в.DR-кластер.вовремя.(для.переключения),.а.часть.—.нет..Приложения. должны.уметь.обрабатывать.позиции.заказов.без.соответствующих.продаж.после. переключения.на.DR-кластер. Начальное смещение для приложений после аварийного переключения Вероятно,.сложнее.всего.при.переключении.на.другой.кластер.гарантировать,.что. приложения.начнут.потреблять.данные.с.нужного.места..Существует.несколько. возможных.решений.этой.проблемы..Некоторые.просты,.но.могут.вызвать.до- полнительную.потерю.данных.или.обработку.дубликатов,.другие.сложнее,.но. позволяют.минимизировать.потери.данных.и.повторную.обработку..Рассмотрим. некоторые.из.них. Автоматический сброс смещения..У.потребителей.Apache.Kafka.имеется.пара- метр,.определяющий.их.поведение.при.отсутствии.ранее.зафиксированных. смещений,.—.приступить.к.чтению.с.начала.или.с.конца.раздела..В.случае.ис- пользования.старых.потребителей,.фиксирующих.смещения.в.ZooKeeper,.если. не.производится.зеркальное.копирование.этих.смещений.в.рамках.плана.DR,. необходимо.выбрать.один.из.этих.параметров:.либо.читать.с.начала.имеющихся. данных.и.обрабатывать.большое.количество.дубликатов,.либо.перескочить. в.конец.раздела,.пропустив.при.этом.некое.(надеемся,.небольшое).число.со- бытий. Репликация темы для смещений..Потребители.новых.(0.9.и.выше).версий.Kafka. будут.фиксировать.смещения.в.специальную.тему. __consumer_offsets ..Если. зеркально.копировать.ее.в.DR-кластер,.то.потребители.смогут.начать.читать. данные.из.DR-кластера.с.тех.смещений,.на.которых.они.закончили.чтение.. Все.просто,.но.не.без.некоторых.нюансов. Во-первых,.нет.никаких.гарантий,.что.смещения.в.основном.и.дополнительном. кластерах.будут.совпадать..Допустим,.что.данные.хранятся.в.основном.кластере. только.три.дня.и.вы.начинаете.зеркально.копировать.тему.через.неделю.после.ее. создания..В.этом.случае.первым.смещением.в.основном.кластере.будет,.напри- мер,.смещение.57000000.(старые.события.за.первые.четыре.дня.уже.удалены),. а.первое.смещение.в.DR-кластере.—.0..Так.что.попытка.потребителя.прочитать. Мультикластерные архитектуры 195 из.DR-кластера.смещение.57000003,.потому.что.именно.его.он.должен.читать. следующим,.приведет.к.сбою. Во-вторых,.даже.если.начать.зеркально.копировать.сразу.же.после.создания. темы,.так.что.и.темы.основного.кластера,.и.DR-темы.будут.начинаться.со. смещения.0,.а.повторы.попыток.отправки.производителем.могут.привести. к.расхождению.смещений..Проще.говоря,.не.существует.варианта.зеркального. копирования.Kafka,.которое.сохраняло.бы.смещения.при.переходе.от.основного. к.DR-кластеру. В-третьих,.даже.если.смещения.сохраняются.в.точности,.из-за.отставания.DR- кластера.от.основного.кластера.и.отсутствия.в.настоящий.момент.в.Kafka.тран- закций.информация.о.фиксации.потребителем.Kafka.смещения.может.прибыть. раньше.или.позже.записи.с.данным.смещением..При.переключении.после.сбоя. потребитель.может.обнаружить.смещения.без.соответствующих.им.записей.. Или.может.оказаться,.что.последнее.зафиксированное.смещение.в.DR.старше,. чем.последнее.зафиксированное.смещение.основного.кластера.(рис..8.5). Необходимо.смириться.с.некоторым.количеством.дубликатов,.если.последнее. зафиксированное.смещение.в.DR-кластере.старше,.чем.зафиксированное.в.ос- новном.кластере,.или.если.смещения.в.записях.DR-кластера.опережают.смеще- ния.в.основном.из-за.повторов.попыток.отправки..Вам.придется.также.решить,. что.делать.со.случаями,.когда.для.последнего.зафиксированного.смещения.в.DR- кластере.не.существует.соответствующей.записи,.—.начать.обработку.с.начала. темы.или.перескочить.к.ее.концу? Как.видите,.у.данного.подхода.есть.ограничения..Тем.не.менее.этот.вариант.по- зволяет.переключиться.на.другой.DR-кластер.при.меньшем.числе.дубликатов. или.пропущенных.событий.по.сравнению.с.другими.подходами,.оставаясь.при. этом.простым.в.реализации. Переключение по времени..При.использовании.действительно.новых.(0.10.0. и.выше).версий.потребителей.Kafka.каждое.сообщение.включает.метку.даты/ времени,.соответствующую.времени.отправки.сообщения.в.Kafka..В.еще.более. новых.версиях.(0.10.1.0.и.выше).брокеры.включают.индекс.и.API.для.поиска. смещения.по.метке.даты/времени..Таким.образом,.если.вы.переключились.на. DR-кластер.и.знаете,.что.проблемы.начались.в.4:05,.то.можете.сказать.потреби- телям,.что.нужно.начинать.обработку.данных.с.4:03..Конечно,.будет.несколько. дубликатов,.относящихся.к.этим.двум.минутам,.но.другие.варианты.еще.хуже.. К.тому.же.такое.поведение.системы.гораздо.легче.объяснить.сотрудникам:. «Мы.откатились.к.времени.4:03».звучит.намного.лучше,.чем.«Мы.откатились. к,.возможно,.последним.зафиксированным.смещениям»..Так.что.это.зачастую. неплохой.компромисс..Единственный.вопрос:.как.сообщить.потребителям.о.не- обходимости.начинать.обработку.данных.с.4:03? Один.из.вариантов:.добавить.настраиваемый.пользователем.параметр,.который. задавал.бы.начальное.время.для.приложения..При.задании.этого.параметра. приложение.может.воспользоваться.новыми.API.для.извлечения.смещений. по.времени,.перейти.к.этому.моменту.и.начать.потребление.данных.с.нужной. точки,.фиксируя.смещения.обычным.образом. 196 Глава 8 • Зеркальное копирование между кластерами Рис. 8.5. Переключение при сбое приводит к появлению зафиксированных смещений без соответствующих записей Мультикластерные архитектуры 197 Этот.параметр.—.замечательная.вещь,.если.сразу.писать.все.приложения.таким. образом..Но.что.если.вы.уже.создали.приложение.без.него?.Можно.без.особых. проблем.написать.небольшую.утилиту,.которая.будет.принимать.на.входе.мет- ку.даты/времени,.извлекать.для.нее.смещения.с.помощью.новых.API,.после. чего.фиксировать.смещения.для.списка.разделов.и.тем.как.конкретной.группы. потребителей..Мы.надеемся.добавить.такую.утилиту.в.Kafka.в.ближайшем. будущем,.но.вы.можете.написать.ее.и.самостоятельно..При.запуске.подобной. утилиты.необходимо.приостановить.работу.группы.потребителей.и.возобновить. ее.непосредственно.после.завершения.работы.утилиты. Это.вариант.можно.рекомендовать.для.тех,.кто.использует.новые.версии.Kafka,. хочет.быть.уверенным.в.том,.что.при.аварийном.переключении.система.будет. вести.себя.правильно,.и.не.против.написать.немного.собственного.кода.в.про- цессе. Внешнее хранение соответствий смещений..Одна.из.главных.проблем.при.зер- кальном.копировании.темы.для.смещений.состоит.в.возможных.расхождениях. смещений.в.основном.и.DR-кластере..Из-за.этого.некоторые.компании.предпо- читают.использовать.внешнее.хранилище.данных,.например.Apache.Cassandra,. для.хранения.соответствий.смещений.одного.кластера.смещениям.другого.. Они.настраивают.свои.утилиты.зеркального.копирования.Kafka.так,.что.при. генерации.события.для.отправки.в.DR-кластер.оба.смещения.отправляются. во.внешнее.хранилище..Или.же.сохраняют.оба.смещения.только.в.случае.из- менения.различия.между.ними..Например,.если.смещение.495.на.основном.кла- стере.соответствует.смещению.500.в.DR-кластере,.мы.записываем.во.внешнее. хранилище.пару.(495,.500)..Если.в.дальнейшем.разница.меняется.и.смещение. 596.соответствует.уже.смещению.600,.то.записываем.новое.соответствие.(596,. 600)..Необходимости.хранить.все.промежуточные.соответствия.смещений. между.495.и.596.нет,.мы.просто.предполагаем,.что.разница.остается.неизмен- ной.и.смещение.550.в.основном.кластере.будет.соответствовать.смещению.555. в.DR-кластере..А.в.случае.переключения.на.резервный.кластер.вместо.задания. соответствий.меток.даты/времени.(всегда.немного.неточных).используются. соответствия.смещений.основного.кластера.смещениям.DR-кластера..При. этом.реализуется.один.из.двух.описанных.ранее.методов,.чтобы.потребители. начинали.чтение.с.новых.смещений.из.карты.соответствий..Однако.сохраняется. проблема.с.фиксацией.смещений,.прибывших.раньше.самих.записей,.а.также. смещений,.которые.не.были.вовремя.зеркально.скопированы.в.DR-кластер,.но. часть.проблемных.случаев.все.равно.будет.охвачена. Это.решение.довольно.сложно.и,.по.моему.мнению,.практически.никогда. не.оправдывает.дополнительных.усилий..Оно.появилось.еще.в.те.времена,. когда.не.существовало.индексов,.которые.можно.использовать.для.аварийного. переключения..Сейчас.я.предпочел.бы.обновить.кластер.и.воспользоваться. переключением.по.времени,.а.не.тратить.усилия.на.хранение.соответствий. смещений,.все.равно.не.охватывающее.все.сценарии.аварийного.переклю- чения. 198 Глава 8 • Зеркальное копирование между кластерами После аварийного переключения Предположим,.что.аварийное.переключение.было.успешным..Все.прекрасно.ра- ботает.на.DR-кластере..Теперь.нам.нужно.что-то.сделать.с.основным.кластером.. Например,.сформировать.из.него.новый.DR-кластер. Очень.заманчиво.просто.изменить.направление.процесса.зеркального.копирования. и.начать.зеркально.копировать.данные.из.нового.основного.кластера.в.старый.. Однако.при.этом.возникают.два.важных.вопроса. Как.узнать,.с.какого.места.начинать.зеркальное.копирование?.Нам.придется. решить.ту.же.проблему,.которую.мы.описали.ранее,.применительно.ко.всем. потребителям..И.не.забывайте,.что.для.всех.наших.решений.существуют.сце- нарии.использования,.при.которых.возникают.дубликаты.или.пропущенные. данные.—.зачастую.и.то.и.другое. Кроме.того,.по.обсуждавшимся.выше.причинам.вполне.возможно,.что.в.исход- ном.основном.кластере.содержатся.события,.отсутствующие.в.DR-кластере.. Если.начать.зеркальное.копирование.новых.данных.в.обратную.сторону,.эти. дополнительные.события.никуда.не.денутся.и.два.кластера.окажутся.не.со- гласованными. Поэтому.простейшим.решением.будет.сначала.почистить.исходный.кластер.—. удалить.все.данные.и.зафиксированные.смещения,.после.чего.начать.зеркальное. копирование.из.нового.основного.кластера.в.новый.DR-кластер..Благодаря.этому. вы.получите.чистый.DR-кластер,.идентичный.новому.основному. Несколько слов об обнаружении кластеров При.планировании.резервного.кластера.очень.важно.учесть,.что.в.случае.аварий- ного.переключения.ваши.приложения.должны.будут.откуда-то.узнать,.как.начать. взаимодействие.с.резервным.кластером..Если.вы.«зашили».имена.хостов.брокеров. основного.кластера.в.свойства.производителей.и.потребителей,.то.это.будет.не- легко..Большинство.компаний.для.простоты.создают.имя.DNS,.которое.в.обычных. обстоятельствах.указывает.на.брокеры.основного.кластера..В.случае.аварии.можно. сделать.так,.чтобы.оно.ссылалось.на.резервный.кластер..Сервис.обнаружения. (DNS.или.какой-то.другой).не.должен.включать.все.брокеры.—.клиентам.Kafka. достаточно.успешно.обратиться.к.одному.брокеру,.чтобы.получить.метаданные. кластера.и.обнаружить.все.остальные..Так.что.обычно.достаточно.включить.всего. три.брокера..Независимо.от.метода.обнаружения.большинство.сценариев.вос- становления.после.сбоя.требуют.перезапуска.приложений-потребителей.после. переключения,.чтобы.они.смогли.обнаружить.новые.смещения,.с.которых.нужно. начинать.чтение. |