Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
145 распределение.раздела.по.нескольким.стойкам,.что.гарантирует.еще.более.высокую. доступность..Если.вас.интересуют.детали,.перечитайте.главу.5,.где.мы.подробно. описали,.как.платформа.распределяет.реплики.по.брокерам.и.стойкам. «Нечистый» выбор ведущей реплики Параметр,.доступный.только.на.уровне.брокера.(и.на.практике.для.всего.кластера),. называется. unclean.leader.election.enable ..По.умолчанию.его.значение.равно. true Как.объяснялось.ранее,.если.ведущая.реплика.раздела.становится.недоступной,. одна.из.согласованных.реплик.выбирается.новой.ведущей..Такой.выбор.ведущей. реплики.является.«чистым».в.смысле.гарантий.отсутствия.потерь.данных.—.по. определению.зафиксированные.данные.имеются.во.всех.согласованных.репликах. Но.что.делать,.если.нет.никаких.согласованных.реплик,.кроме.только.что.ставшей. недоступной.ведущей? Такая.ситуация.может.возникнуть.при.одном.из.двух.сценариев. У.раздела.три.реплики,.две.ведомые.реплики.стали.недоступными.(например,. два.брокера.отказали)..В.этом.случае,.поскольку.производители.продолжают. записывать.данные.на.ведущую.реплику,.получение.всех.сообщений.подтверж- дается.и.они.фиксируются,.так.как.ведущая.реплика.является.единственной.со- гласованной..Теперь.предположим,.что.ведущая.реплика.становится.недоступ- ной.(упс,.еще.один.брокер.отказал)..Если.при.таком.сценарии.развития.событий. сначала.запустится.одна.из.несогласованных.ведомых.реплик,.единственной. доступной.репликой.для.раздела.окажется.несогласованная. У.раздела.три.реплики,.и.из-за.проблем.с.сетью.две.ведомые.отстали.так,.что. хотя.они.работают.и.выполняют.репликацию,.но.уже.не.согласованы..Ведущая. реплика.продолжает.получать.сообщения.как.единственная.согласованная.. Если.теперь.ведущая.реплика.станет.недоступной,.то.две.доступные.реплики. не.будут.согласованы. При.развитии.обоих.сценариев.необходимо.принять.непростое.решение. Если.мы.запрещаем.рассогласованным.репликам.становиться.ведущими,.то. раздел.будет.отключен.до.тех.пор,.пока.не.восстановим.работу.старой.ведущей. реплики..В.некоторых.случаях.(например,.при.необходимости.замены.модуля. памяти).это.может.занять.несколько.часов. Если.разрешить.рассогласованной.реплике.стать.ведущей,.то.мы.потеряем. все.сообщения,.записанные.на.старую.ведущую.реплику.за.то.время,.пока.она. была.рассогласованной,.а.заодно.получим.проблемы.с.рассогласованием.на.по- требителях..Почему?.Представьте.себе,.что.за.время.недоступности.реплик.0. и.1.мы.записали.сообщения.со.смещениями.100–200.на.реплику.2,.ставшую. 146 Глава 6 • Надежная доставка данных затем.ведущей..Теперь.реплика.2.недоступна,.а.реплика.0.вернулась.в.работу.. На.реплике.0.содержатся.только.сообщения.0–100,.но.нет.сообщений.100–200.. Так.что.у.новой.ведущей.реплики.будут.совершенно.новые.сообщения.100–200.. Отметим,.что.часть.потребителей.могли.уже.прочитать.старые.сообщения. 100–200,.часть.—.новые,.а.часть.—.некую.их.смесь..Это.приведет.к.доволь- но.неприятным.последствиям.с.точки.зрения.последующих.отчетов..Кроме. того,.реплика.2.вернется.в.работу.и.станет.ведомой.у.новой.ведущей.реплики.. При.этом.она.удалит.все.сообщения,.опережающие.текущую.ведущую.реплику.. В.дальнейшем.никто.из.потребителей.не.сможет.их.увидеть. Резюмируя:.разрешение.рассогласованным.репликам.становиться.ведущими.уве- личивает.риск.потери.данных.и.того,.что.они.станут.противоречивыми..Если.же. запретить.это,.уменьшится.доступность.из-за.необходимости.ждать,.пока.перво- начальная.ведущая.реплика.станет.доступной.и.можно.будет.восстановить.работу. раздела. Установка.значения.параметра. unclean.leader.election.enable .в. true .означа- ет,.что.мы.разрешаем.рассогласованным.репликам.становиться.ведущими.(этот. процесс.называется.«нечистым» выбором.(unclean.election)),.хотя.и.знаем,.что. в.результате.этого.потеряем.данные..Установка.же.его.в. false .означает.ожидание. восстановления.функционирования.исходной.ведущей.реплики,.что.приводит. к.снижению.доступности..Обычно.возможность.«нечистого».выбора.ведущей.ре- плики.отключают.(параметр.равен. false ).в.системах,.в.которых.критически.важны. качество.и.согласованность.данных,.например,.банковских.(большинство.банков. предпочитают.невозможность.обрабатывать.платежи.по.кредитным.картам.в.те- чение.минут.или.даже.часов.риску.неправильной.обработки.платежа)..В.системах. же,.где.более.значима.доступность,.например,.системах.анализа.маршрутов.пере- мещения.пользователей.по.веб-сайту,.возможность.«нечистого».выбора.ведущей. реплики.часто.включена. Минимальное число согласованных реплик Соответствующий.параметр.уровня.как.темы,.так.и.брокера.называется. min.in- sync.replicas Как.мы.уже.видели,.в.некоторых.случаях.даже.при.трех.репликах.в.теме.согласо- ванной.может.остаться.только.одна..В.случае.ее.недоступности.придется.выбирать. между.доступностью.и.согласованностью..Это.всегда.непростой.выбор..Проблема. усугубляется.следующим:.так.как.Kafka.гарантирует.надежность,.данные.считаются. зафиксированными.после.их.записи.во.все.согласованные.реплики,.даже.если.такая. реплика.только.одна,.и.в.случае.ее.недоступности.они.будут.утрачены. Если.нужно.гарантировать,.что.зафиксированные.данные.будут.записаны.более.чем. в.одну.реплику,.можно.задать.более.высокое.минимальное.число.согласованных. реплик..Если.в.теме.три.реплики.и.для.параметра. min.insync.replicas .установ- Использование производителей в надежной системе 147 лено.значение.2,.то.записывать.в.раздел.темы.можно.будет.только.тогда,.когда.по. крайней.мере.две.из.трех.реплик.согласованы. Если.все.три.реплики.согласованы,.то.все.работает.нормально..То.же.самое.будет. и.в.случае.недоступности.одной.из.реплик..Однако.если.недоступны.две.из.трех. реплик,.брокер.перестанет.принимать.запросы.производителей..Вместо.этого. производителям,.пытающимся.отправить.данные,.будет.возвращено.исключение. NotEnoughReplicasException ..При.этом.потребители.могут.продолжать.читать. существующие.данные..Фактически.в.подобной.ситуации.единственная.согласо- ванная.реплика.превращается.в.реплику.только.для.чтения..Это.предотвращает. нежелательную.ситуацию,.при.которой.данные.производятся.и.потребляются. лишь.для.того,.чтобы.пропасть.в.никуда.при.«нечистом».выборе..Для.выхода.из. состояния.«только.для.чтения».мы.должны.вновь.обеспечить.доступность.одной. из.двух.недоступных.реплик.(возможно,.перезапустить.брокер).и.подождать,.пока. она.нагонит.упущенное.и.станет.согласованной. Использование производителей в надежной системе Даже.если.конфигурация.брокеров.самая.надежная.из.всех.возможных,.система. в.целом.может.иногда.терять.данные,.если.не.настроить.производители.достаточно. надежным.образом. Вот.два.возможных.сценария.для.иллюстрации.сказанного. Брокеры.настроены.на.использование.трех.реплик,.а.возможность.«нечистого». выбора.ведущей.реплики.отключена..Так.что.мы.вроде.бы.не.должны.потерять. ни.одного.сообщения,.зафиксированного.в.кластере.Kafka..Однако.произво- дитель.настроили.так,.чтобы.отправлять.сообщения.с. acks=1 ..Мы.отправили. сообщение.с.производителя,.и.оно.уже.было.записано.на.ведущую.реплику,.но. еще.не.было.записано.на.ведомые.согласованные.реплики..Ведущая.реплика. вернула.производителю.ответ,.гласящий:.«Сообщение.было.записано.успешно»,. и.сразу.же.после.этого,.еще.до.репликации.данных.на.другие.реплики,.потерпе- ла.аварийный.сбой..Другие.реплики.по-прежнему.считаются.согласованными. (как.вы.помните,.до.объявления.реплики.рассогласованной.проходит.некоторое. время),.и.одна.из.них.становится.ведущей..Так.как.сообщение.не.было.на.них. записано,.оно.будет.утрачено..Но.приложение-производитель.считает,.что.оно. было.записано.успешно..Система.согласована,.поскольку.ни.один.потребитель. сообщения.не.видит.(оно.так.и.не.было.зафиксировано,.поэтому.реплики.его. не.получили),.но.с.точки.зрения.производителя.сообщение.было.потеряно. Брокеры.настроены.на.использование.трех.реплик,.а.возможность.«нечисто- го».выбора.ведущей.реплики.отключена..Мы.извлекли.урок.из.своей.ошибки. и.стали.генерировать.сообщения.с. acks=all ..Допустим,.мы.пытаемся.записать. 148 Глава 6 • Надежная доставка данных сообщение.в.Kafka,.но.ведущая.реплика.раздела,.в.который.записываются. данные,.только.что.потерпела.аварийный.сбой,.а.новая.еще.не.выбрана..Kafka. вернет.ошибку.«Ведущая.реплика.недоступна»..Если.при.этом.производитель. не.поступит.должным.образом.и.не.будет.пытаться.отправить.сообщение. вплоть.до.успешного.выполнения.операции.записи,.оно.может.быть.потеряно.. Опять.же.это.не.проблема.надежности.брокера,.поскольку.он.вообще.не.полу- чал.сообщения,.и.не.проблема.согласованности,.потому.что.потребители.тоже. его.не.получали..Но.если.производители.не.обрабатывают.ошибки.должным. образом,.то.могут.столкнуться.с.потерей.данных. Так.как.же.избежать.подобных.неприятных.результатов?.Как.показывают.эти.при- меры,.все,.кто.пишет.приложения,.которые.служат.производителями.для.Kafka,. должны.обращать.внимание.на.две.вещи. Использование.соответствующего.требованиям.надежности.значения.пара- метра. acks Правильная.обработка.ошибок.как.в.настройках,.так.и.исходном.коде. Режимы.работы.производителей.мы.подробно.обсуждали.в.главе.3,.но.остановимся. на.важнейших.нюансах.еще.раз. Отправка подтверждений Производители.могут.выбрать.один.из.трех.режимов.подтверждения. acks=0 .означает,.что.сообщение.считается.успешно.записанным.в.Kafka,.если. производитель.сумел.отправить.его.по.сети..Возможно.возникновение.оши- бок,.если.отправляемый.объект.не.удается.сериализовать.или.произошел.сбой. сетевой.карты..Но.если.раздел.недоступен.или.если.весь.кластер.Kafka.решит. часок-другой.отдохнуть.от.работы,.никакие.ошибки.возвращены.не.будут.. Это.значит,.что.даже.в.случае.ожидаемого.«чистого».выбора.ведущей.реплики. производитель.будет.терять.сообщения.просто.из-за.отсутствия.информации. о.недоступности.ведущей.реплики.на.протяжении.выбора.новой.ведущей.ре- плики..Быстродействие.при. acks=0 .очень.высокое,.именно.поэтому.существует. столько.тестов.производительности.при.подобной.конфигурации..Если.вы. решите.идти.этим.путем,.то.сможете.добиться.потрясающей.пропускной.спо- собности.и.эффективно.использовать.бо'льшую.часть.полосы.пропускания,.но. заведомо.потеряете.часть.сообщений. acks=1 .означает,.что.ведущая.реплика.в.момент.получения.сообщения.и.за- писи.его.в.файл.данных.раздела.(но.необязательно.на.диск).отправит.под- тверждение.или.сообщение.об.ошибке..Это.значит,.что.при.обычных.усло- виях.во.время.выбора.ведущей.реплики.производитель.получит.исключение. LeaderNotAvailableException ..И.если.он.обработает.это.исключение.правильно. (см..следующий.раздел),.то.повторит.попытку.отправки.сообщения,.так.что. Использование производителей в надежной системе 149 оно.успешно.попадет.в.новую.ведущую.реплику..Возможна.потеря.данных. в.случае.аварийного.сбоя.ведущей.реплики,.если.часть.успешно.записанных. на.нее.и.подтвержденных.сообщений.не.были.реплицированы.на.ведомые. реплики.до.сбоя. acks=all .означает,.что.ведущая.реплика,.прежде.чем.отправлять.подтверждение. или.сообщение.об.ошибке,.дождется.получения.сообщения.всеми.согласован- ными.репликами..В.сочетании.с.параметром. min.insync.replicas .на.брокере. это.позволяет.контролировать.число.реплик,.которые.должны.получить.со- общение.для.его.подтверждения..Это.самый.безопасный.вариант.—.произво- дитель.будет.пытаться.отправить.сообщение.вплоть.до.его.полной.фиксации.. Он.характеризуется.и.самым.низким.быстродействием.—.производитель.ждет. получения.сообщения.всеми.репликами,.прежде.чем.отметить.пакет.сообще- ний.как.обработанный.и.продолжить.работу..Эти.эффекты.можно.смягчить.за. счет.использования.асинхронного.режима.производителя.и.отправки.пакетов. большего.размера,.но.данный.вариант.обычно.снижает.пропускную.способ- ность. Настройка повторов отправки производителями Обработка.ошибок.на.стороне.производителя.состоит.из.двух.частей:.автомати- ческой.обработки.производителем.и.обработки.с.помощью.библиотеки.произво- дителя,.которую.должны.выполнять.вы.как.разработчик. Сам.производитель.может.справиться.с.теми.возвращаемыми.брокером.ошибка- ми,.которые.можно.разрешить.путем.повтора.отправки..При.отправке.произво- дителем.сообщения.брокеру.последний.может.вернуть.или.код,.соответствующий. успешному.выполнению,.или.код.ошибки..Коды.ошибок.делятся.на.две.категории:. коды.ошибок,.которые.можно.разрешить.путем.повтора.отправки,.и.коды.ошибок,. которые.разрешить.нельзя..Например,.если.брокер.вернул.код.ошибки. LEADER_NOT_ AVAILABLE ,.то.производитель.может.попробовать.повторить.отправку.сообщения. в.надежде,.что.выбор.уже.сделан.и.вторая.попытка.завершится.успешно..Это.зна- чит,.что. LEADER_NOT_AVAILABLE .—.ошибка,.которую можно разрешить путем повто- ра отправки.(retriable.error)..Но.если.брокер.вернул.исключение. INVALID_CONFIG ,. то.повтор.отправки.того.же.сообщения.никак.не.поменяет.настройки..Это.пример. ошибки,.которую нельзя разрешить путем повтора.(nonretriable.error). В.целом,.если.ваша.цель.—.не.терять.ни.одного.сообщения,.то.лучше.всего.настро- ить.производитель.на.повтор.отправки.сообщений.в.тех.случаях,.когда.это.имеет. смысл..Почему?.Потому.что.отсутствие.ведущей.реплики.или.проблемы.с.сетевым. подключением.обычно.разрешаются.за.несколько.секунд,.и.если.просто.предоста- вить.производителю.возможность.продолжать.попытки.вплоть.до.достижения. успеха,.то.можно.избавиться.от.необходимости.заниматься.этим..Меня.часто.спра- шивают:.«На.какое.количество.повторов.необходимо.настроить.производитель?».. Ответ.зависит.от.того,.что.вы.собираетесь.делать.после.генерации.производителем. 150 Глава 6 • Надежная доставка данных исключения.о.прекращении.попыток.после.N.проделанных..Если.хотите.перехва- тить.исключение.и.выполнить.еще.несколько.попыток,.то.вам.определенно.необ- ходимо.установить.большее.число.повторов.—.и.пусть.производитель.продолжает. предпринимать.попытки..Если.же.вы.собираетесь.просто.отказаться.от.сообщения,. считая,.что.смысла.в.дальнейших.повторах.нет,.или.записать.его.где-нибудь.еще. и.заняться.им.позже,.то.пора.прекратить.повторы..Обратите.внимание.на.то,.что. имеющаяся.в.Kafka.утилита.репликации.между.ЦОД.(MirrorMaker,.которую.мы. обсудим.в.главе.8).настроена.по.умолчанию.на.бесконечное.число.повторов.(то.есть. число.повторов.равно. MAX_INT ),.поскольку.высоконадежная.утилита.репликации. никогда.не.должна.просто.выбрасывать.сообщения. Отметим,.что.попытка.повтора.отправки.сообщения.в.случае.неудачи.часто.озна- чает.небольшой.риск.того,.что.оба.сообщения.будут.успешно.записаны.на.брокер,. а.это.приведет.к.дублированию..Например,.если.подтверждение.от.брокера.не.до- стигло.производителя.из-за.проблем.с.сетью,.но.сообщение.было.успешно.записано. и.реплицировано,.то.производитель.сочтет.отсутствие.подтверждения.временны- ми.проблемами.с.сетью.и.попытается.повторить.отправку.сообщения,.поскольку. не.знает,.что.оно.было.получено..В.этом.случае.на.брокере.окажется.две.копии. сообщения..Повторы.отправки.и.тщательная.обработка.ошибок.позволяют.га- рантировать.сохранение.сообщения.по крайней мере один раз,.но.в.текущей.версии. Kafka.(0.10.0).нельзя.гарантировать,.что.оно.будет.сохранено.ровно один раз..Мно- гие.находящиеся.в.промышленной.эксплуатации.приложения.добавляют.в.каждое. сообщение.уникальный.идентификатор,.чтобы.можно.было.обнаруживать.дубли- каты.и.убирать.их.при.чтении.сообщений..Другие.приложения.делают.сообщения. идемпотентными.в.том.смысле,.что.отправка.сообщения.дважды.не.повлияет.на. правильность..Например,.сообщение.«Сумма.на.счету.равна.$110».идемпотентно,. ведь.многократная.его.отправка.не.меняет.результата..А.сообщение.«Добавить. на.счет.$10».не.идемпотентно,.поскольку.меняет.результат.при.каждой.отправке. Дополнительная обработка ошибок С.помощью.встроенного.в.производители.механизма.повторов.можно.легко.долж- ным.образом.обработать.множество.разнообразных.ошибок.без.потери.сообщений,. но,.как.разработчику,.вам.нужно.иметь.возможность.обрабатывать.и.другие.типы. ошибок,.включающие: ошибки.брокеров,.которые.нельзя.разрешить.путем.повтора.отправки,.напри- мер,.ошибки,.связанные.с.размером.сообщений,.ошибки.авторизации.и.т..п.; ошибки,.произошедшие.до.отправки.сообщения.брокеру,.например,.ошибки. сериализации; ошибки,.связанные.с.тем,.что.производитель.достиг.предельного.количества. попыток.повтора.отправки.или.исчерпал.во.время.этого.доступную.ему.память. на.хранение.сообщений. Использование потребителей в надежной системе 151 В.главе.3.мы.обсуждали.написание.обработчиков.ошибок.как.для.синхронного,.так. и.для.асинхронного.методов.отправки.сообщений..Логика.этих.обработчиков.оши- бок.меняется.в.зависимости.от.вашего.приложения.и.его.задач:.выбрасываете.ли. вы.«плохие».сообщения?.Заносите.ли.ошибки.в.журнал?.Храните.ли.эти.сообще- ния.в.каталоге.на.локальном.диске?.Инициируете.ли.обратный.вызов.к.другому. приложению? Эти.решения.зависят.от.вашей.архитектуры..Просто.отметим,.что.если.все.обра- ботчики.ошибок.пытаются.только.повторить.отправку.сообщения,.то.в.этом.лучше. положиться.на.функциональность.производителей. Использование потребителей в надежной системе Теперь,.разобравшись,.как.учесть.гарантии.надежности.Kafka.при.работе.с.произ- водителями.данных,.можно.обсудить.потребление.данных. Как.мы.видели.в.первой.части.главы,.данные.становятся.доступными.потребите- лям.лишь.после.их.фиксации.в.Kafka,.то.есть.записи.во.все.согласованные.реплики.. Это.значит,.что.потребителям.поступают.заведомо.согласованные.данные..Им.оста- ется.лишь.обеспечить.учет.того,.какие.сообщения.они.уже.прочитали,.а.какие.нет.. Это.ключ.к.тому,.чтобы.не.терять.сообщения.при.потреблении. Во.время.чтения.данных.из.раздела.потребитель.извлекает.пакет.событий,.находит. в.нем.последнее.смещение.и.запрашивает.следующий.пакет.событий,.начиная. с.последнего.полученного.смещения..Благодаря.этому.потребители.Kafka.всегда. получают.новые.данные.в.правильной.последовательности.и.не.пропускают.со- бытий. В.случае.останова.потребителя.другому.потребителю.понадобится.информация. о.том,.с.какого.места.продолжить.работу,.—.каково.последнее.из.обработанных. предыдущим.потребителем.перед.остановом.смещений..Этот.другой.потребитель. может.даже.оказаться.тем.самым.же.потребителем,.только.перезапущенным.. Это.неважно:.какой-то.потребитель.продолжит.получать.данные.из.этого.раздела,. и.ему.необходимо.знать,.с.какого.смещения.начинать.работу..Именно.поэтому. потребители.должны.фиксировать.обработанные.смещения..Потребитель.для. каждого.раздела,.из.которого.берет.данные,.сохраняет.текущее.местоположение,. так.что.после.перезагрузки.он.или.другой.потребитель.будет.знать,.с.какого.места. продолжить.работу..Потребители.в.основном.теряют.сообщения,.когда.фиксируют. смещения.для.прочитанных,.но.еще.не.полностью.обработанных.событий..В.этом. случае.другой.потребитель,.продолжающий.работу,.пропустит.эти.события,.и.они. так.никогда.и.не.будут.обработаны..Именно.поэтому.чрезвычайно.важно.тщательно. отслеживать,.когда.и.как.фиксируются.смещения. |