Главная страница

Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly


Скачать 7.59 Mb.
НазваниеApache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Дата21.06.2022
Размер7.59 Mb.
Формат файлаpdf
Имя файлаApache Kafka. Потоковая обработка и анализ данных.pdf
ТипДокументы
#609074
страница18 из 39
1   ...   14   15   16   17   18   19   20   21   ...   39
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.всегда.
получают.новые.данные.в.правильной.последовательности.и.не.пропускают.со- бытий.
В.случае.останова.потребителя.другому.потребителю.понадобится.информация.
о.том,.с.какого.места.продолжить.работу,.—.каково.последнее.из.обработанных.
предыдущим.потребителем.перед.остановом.смещений..Этот.другой.потребитель.
может.даже.оказаться.тем.самым.же.потребителем,.только.перезапущенным..
Это.неважно:.какой-то.потребитель.продолжит.получать.данные.из.этого.раздела,.
и.ему.необходимо.знать,.с.какого.смещения.начинать.работу..Именно.поэтому.
потребители.должны.фиксировать.обработанные.смещения..Потребитель.для.
каждого.раздела,.из.которого.берет.данные,.сохраняет.текущее.местоположение,.
так.что.после.перезагрузки.он.или.другой.потребитель.будет.знать,.с.какого.места.
продолжить.работу..Потребители.в.основном.теряют.сообщения,.когда.фиксируют.
смещения.для.прочитанных,.но.еще.не.полностью.обработанных.событий..В.этом.
случае.другой.потребитель,.продолжающий.работу,.пропустит.эти.события,.и.они.
так.никогда.и.не.будут.обработаны..Именно.поэтому.чрезвычайно.важно.тщательно.
отслеживать,.когда.и.как.фиксируются.смещения.

1   ...   14   15   16   17   18   19   20   21   ...   39


написать администратору сайта