Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
159 Во-первых,.клиенты.Kafka.включают.показатели.JMX,.позволяющие.выполнять. мониторинг.событий.и.состояния.клиентов..Два.наиболее.важных.для.производи- телей.показателя.—.число.ошибок.и.число.повторов.в.секунду.(агрегированные).. Следите.за.ними,.ведь.рост.числа.ошибок.или.повторов.означает.проблему.с.систе- мой.в.целом..По.журналам.производителей.также.отслеживайте.ошибки.отправки. событий,.помеченные.как. WARN ,.которые.выглядят.примерно.так:.«Получен.ответ. об.ошибке.при.генерации.сообщения.с.идентификатором.корреляции.5689.в.теме/ разделе.[тема.1,.3],.повторяю.попытку.(осталось.две.попытки)..Ошибка…».(Got.error. produce.response.with.correlation.id.5689.on.topic-partition.[topic-1,.3],.retrying.(two. attempts.left)..Error…)..Как.говорилось.в.разделе.«Использование.производителей. в.надежной.системе».ранее.в.данной.главе,.вы.можете.или.увеличить.число.повто- ров,.или.первым.делом.устранить.вызывающую.ошибки.проблему. На.стороне.потребителя.важнейшим.показателем.является.задержка.потребителя,. показывающая,.насколько.он.отстает.от.последнего.зафиксированного.в.разделе.на. брокере.сообщения..В.идеале.задержка.всегда.должна.быть.равна.0.и.потребитель. всегда.читает.последнее.сообщение..На.практике.же.она.будет.колебаться.в.опре- деленных.пределах.вследствие.того,.что.вызов.метода. poll() .возвращает.несколько. сообщений,.после.чего.потребителю.приходится.тратить.время.на.их.обработку,. прежде.чем.извлечь.новые..Главное,.чтобы.потребители.в.конце.концов.наверстали. упущенное,.а.не.отставали.все.больше.и.больше..Из-за.ожидаемых.колебаний.за- держки.потребителя.задание.уведомлений.на.основе.этого.показателя.представляет. собой.непростую.задачу..Упростить.ее.может.утилита.проверки.задержки.Burrow. от.LinkedIn.( https://github.com/linkedin/Burrow ). Мониторинг.потока.данных.означает.также.проверку.того,.чтобы.все.сформиро- ванные.производителями.данные.были.потреблены.своевременно.(смысл.слова. «своевременно».определяется.вашими.требованиями)..Для.обеспечения.этого.нуж- но.знать,.когда.данные.поступили.от.производителей..Для.облегчения.этого.Kafka,. начиная.с.версии.0.10.0,.включает.во.все.сообщения.метку.даты/времени..Если. ваши.клиенты.работают.с.более.ранней.версией.Kafka,.рекомендуем.для.каждого. события.регистрировать.метку.даты/времени,.имя.приложения-производителя. и.имя.хоста,.на.котором.было.создано.сообщение..Это.поможет.в.дальнейшем.при. выяснении.причин.различных.проблем. Чтобы.убедиться.в.том,.что.все.сформированные.производителями.сообщения. были.потреблены.за.приемлемое.время,.производители.должны.регистрировать. число.сгенерированных.сообщений.(обычно.в.виде.количества.событий.в.секунду).. Потребители.должны.будут.регистрировать.как.число.потребленных.сообщений. (также.в.виде.количества.событий.в.секунду),.так.и.информацию.о.задержках. между.генерацией.сообщений.и.их.потреблением.на.основе.меток.даты/времени. событий..Далее.вам.понадобится.система.для.сверки.количества.событий.в.секунду. от.производителей.и.потребителей,.чтобы.гарантировать,.что.никакие.сообще- ния.не.потерялись.по.дороге,.а.также.чтобы.убедиться,.что.промежутки.времени. между.генерацией.и.потреблением.не.слишком.велики..Для.более.продвинутого. мониторинга.можете.добавить.специальный.потребитель,.подписав.его.на.наибо- 160 Глава 6 • Надежная доставка данных лее.важные.темы,.который.бы.подсчитывал.события.и.сравнивал.их.количество. с.информацией.от.производителей.с.целью.точного.мониторинга.производителей. даже.в.случае,.когда.в.конкретный.момент.времени.никто.не.получает.исходящие. от.них.события..Реализация.подобных.систем.сквозного.мониторинга.непроста. и.требует.значительных.затрат.времени..Насколько.нам.известно,.подобных.систем. с.открытым.исходным.кодом.не.существует,.но.Confluent.предлагает.коммерческую. реализацию.как.часть.продукта.Confluent.Control.Center.( http://www.confluent.io/ product/control-center ). Резюме Как.мы.говорили.в.начале.главы,.надежность.—.вопрос.не.только.конкретных. возможностей.Kafka..Необходимо.сделать.надежной.систему.в.целом,.включая. архитектуру.вашего.приложения,.методы.применения.приложением.API.произво- дителей.и.потребителей,.настройки.производителей.и.потребителей,.настройки.тем. и.брокеров..Обеспечение.надежности.приложения.всегда.означает.определенный. компромисс.между.сложностью.приложения,.его.производительностью,.доступно- стью.и.использованием.дискового.пространства..Понимая.все.доступные.варианты,. распространенные.схемы.действий.и.требования.для.конкретных.сценариев,.можно. принимать.разумные.решения.по.поводу.нужной.степени.надежности.вашего.при- ложения.и.развернутого.Kafka,.а.также.того,.на.какие.компромиссы.имеет.смысл. пойти.в.конкретном.случае. 7 Создание конвейеров данных При.обсуждении.создания.конвейеров.данных.с.помощью.Apache.Kafka.обычно. подразумевают.несколько.сценариев.использования..Первый.—.создание.конвейера. данных,.в.котором.Apache.Kafka.представляет.собой.одну.из.двух.конечных.точек.. Например,.перемещение.данных.из.Kafka.в.S3.или.из.MongoDB.в.Kafka..Второй. сценарий.включает.создание.конвейера.данных.между.двумя.различными.систе- мами.с.Kafka.в.качестве.промежуточной..Примером.может.служить.перемещение. данных.из.Twitter.в.Elasticsearch.путем.отправки.их.сначала.в.Kafka,.а.затем.из. Kafka.в.Elasticsearch. Увидев,.что.Kafka.задействуется.в.обоих.этих.сценариях.в.LinkedIn.и.других.круп- ных.компаниях,.мы.добавили.в.Apache.Kafka.фреймворк.Kafka.Connect..Мы.обра- тили.внимание.на.специфические.задачи.по.интеграции.Kafka.в.конвейеры.данных,. которые.приходилось.решать.каждой.из.этих.компаний,.и.решили.добавить.в.Kafka. API,.которые.решали.бы.некоторые.из.этих.задач,.вместо.того.чтобы.заставлять. всех.делать.это.с.нуля. Главная.ценность.Kafka.для.конвейеров.данных.состоит.в.том,.что.она.может.слу- жить.очень.большим.надежным.буфером.между.различными.этапами.конвейера,. разделяя.внутри.конвейера.производители.данных.и.их.потребителей..Благодаря. этому,.а.также.своим.надежности.и.эффективности.Kafka.очень.хорошо.подходит. для.большинства.конвейеров.данных. Учет интеграции данных Некоторые компании рассматривают Kafka как конечную точку конвейера. Они формулируют свою задачу так: «Как мне передать данные из Kafka в Elastic?» Это вполне резонный вопрос, особенно если данные, находящиеся сейчас в Kafka, 162 Глава 7 • Создание конвейеров данных нужны вам в Elastic, и мы рассмотрим способы добиться этого. Но начнем с обсуждения использования Kafka в более широком контексте, включающем по крайней мере две (а может, и намного больше) конечные точки, не считая Kafka. Рекомендуем каждому, кто столкнулся с задачей интеграции данных, исходить из более широкой картины, а не зацикливаться на непосредственных конечных точках. Сосредоточить усилия только на текущих задачах интеграции — верный способ в итоге получить сложную и дорогостоящую в поддержке мешанину вместо системы. В.этой.главе.мы.обсудим.некоторые.распространенные.нюансы,.которые.необходи- мо.учитывать.при.создании.конвейеров.данных..Они.представляют.собой.не.нечто. специфичное.для.Kafka,.а.скорее.общие.проблемы.интеграции.данных..Однако. мы.покажем,.что.Kafka.отлично.подходит.для.связанных.с.интеграцией.данных. сценариев.использования.и.продемонстрируем.решение.многих.из.этих.проблем. с.ее.помощью..Мы.обсудим.отличия.API.Kafka.Connect.от.обычных.клиентов- производителей.и.клиентов-потребителей,.а.также.обстоятельства,.при.которых. должен.применяться.каждый.из.типов.клиентов..Хотя.полномасштабное.изучение. Kafka.Connect.выходит.за.рамки.данной.главы,.мы.продемонстрируем.простейшие. примеры.использования.этого.фреймворка,.чтобы.познакомить.вас.с.ним,.и.ука- жем,.где.искать.более.детальную.информацию..Наконец,.обсудим.другие.системы. интеграции.данных.и.их.объединение.с.Kafka. Соображения по поводу создания конвейеров данных Здесь.у.нас.нет.возможности.углубляться.во.все.нюансы.создания.конвейеров. данных,.однако.хотелось.бы.подчеркнуть.некоторые.детали,.которые.важно.учесть. при.проектировании.архитектур.программного.обеспечения,.нацеленных.на.инте- грацию.нескольких.систем. Своевременность В.части.систем.ожидается,.что.данные.будут.поступать.большими.порциями. раз.в.день,.в.других.данные.должны.доставляться.через.несколько.миллисекунд. после.генерации..Большинство.конвейеров.данных.представляют.собой.что-то. среднее.между.этими.двумя.крайностями..Хорошие.системы.интеграции.данных. способны.соответствовать.различным.требованиям.к.своевременности.для.разных. конвейеров,.а.также.переходить.от.одного.графика.к.другому.при.изменении.биз- нес-требований..Kafka.как.платформу.потоковой.обработки.с.масштабируемым. и.надежным.хранилищем.можно.использовать.для.поддержки.чего.угодно,.начиная. Соображения по поводу создания конвейеров данных 163 от.конвейеров,.работающих.практически.в.режиме.реального.времени,.до.пакетов,. поступающих.раз.в.час..Производители.могут.записывать.данные.в.Kafka.с.такой. частотой,.как.требуется,.а.потребители.могут.читать.и.доставлять.самые.свежие. события.по.мере.их.поступления..Возможна.также.реализация.пакетного.режима. работы.потребителей.с.запуском.раз.в.час,.подключением.к.Kafka.и.чтением.на- копившихся.за.этот.час.событий. В.этом.контексте.удобно.рассматривать.Kafka.как.гигантский.буфер,.который.раз- деляет.требования.к.интервалам.времени,.относящимся.к.производителям.и.потре- бителям..Производители.могут.записывать.события.в.режиме.реального.времени,. а.потребители.—.обрабатывать.пакеты.событий,.или.наоборот..Появляется.также. возможность.приостановки.процесса.—.Kafka.сама.контролирует.обратный.поток. в.производителях.за.счет.отсрочки.подтверждений.при.необходимости,.поскольку. скорость.получения.данных.целиком.зависит.от.потребителей. Надежность Нам.хотелось.бы.избежать.отдельных.критических.точек.и.обеспечить.быстрое. автоматическое.восстановление.после.разнообразных.сбоев..Данные.часто.по- ступают.по.конвейерам.в.критичные.для.бизнеса.системы,.и.сбой.длительностью. более.нескольких.секунд.может.иметь.разрушительные.последствия,.особенно. если.в.требованиях.к.своевременности.упоминаются.величины.порядка.несколь- ких.миллисекунд..Еще.один.важный.фактор.надежности.—.гарантии.доставки. данных..Хотя.в.некоторых.системах.потери.данных.допустимы,.чаще.всего.требу- ется.как минимум однократная.их.доставка..Это.означает,.что.все.события,.отправ- ленные.из.системы-источника,.должны.достичь.пункта.назначения,.хотя.иногда. возможно.появление.дубликатов.из-за.повторной.отправки..Часто.выдвигается. даже.требование.строго однократной.доставки.—.все.события,.отправленные.из. системы-источника,.должны.достичь.пункта.назначения.без.каких-либо.потерь. или.дублирования. Доступность.и.гарантии.надежности.Kafka.подробно.обсуждались.в.главе.6..Как.мы. говорили,.самостоятельно.Kafka.способна.обеспечить.как.минимум.однократную. доставку,.а.в.сочетании.с.внешним.хранилищем.с.поддержкой.транзакционной. модели.или.уникальных.ключей.—.и.строго.однократную..Поскольку.многие.из. конечных.точек.представляют.собой.хранилища.данных,.обеспечивающие.возмож- ность.строго.однократной.доставки,.то.конвейер.на.основе.Kafka.можно.сделать. строго.однократным..Стоит.упомянуть,.что.API.Kafka.Connect.при.обработке.сме- щений.предоставляет.API.для.интеграции.с.внешними.системами,.упрощающие. построение.сквозных.конвейеров.строго.однократной.доставки..Разумеется,.многие. из.существующих.коннекторов.с.открытым.исходным.кодом.поддерживают.строго. однократную.доставку. 164 Глава 7 • Создание конвейеров данных Высокая/переменная нагрузка Создаваемые.конвейеры.данных.должны.масштабироваться.до.очень.высокой.про- изводительности,.часто.необходимой.в.современных.информационных.системах.. И,.что.еще.важнее,.они.должны.уметь.приспосабливаться.к.внезапному.повышению. нагрузки. Благодаря.Kafka,.служащей.буфером.между.производителями.и.потребителями,. теперь.не.требуется.связывать.производительность.потребителей.с.производитель- ностью.производителей..Больше.не.нужен.сложный.механизм.контроля.обратного. потока.данных,.поскольку,.если.производительность.производителя.превышает. производительность.потребителя,.данные.будут.просто.накапливаться.в.Kafka.до. тех.пор,.пока.потребитель.не.догонит.производитель..Умение.Kafka.масштабиро- ваться.за.счет.независимого.добавления.производителей.и.потребителей.дает.воз- можность.динамически.и.независимо.масштабировать.любую.из.сторон.конвейера,. чтобы.приспособиться.к.меняющимся.требованиям. Kafka.—.распределенная.система.с.высокой.пропускной.способностью,.которая.в.со- стоянии.обрабатывать.сотни.мегабайт.данных.в.секунду.даже.на.не.очень.мощных. кластерах,.так.что.можно.не.бояться,.что.конвейер.не.сможет.масштабироваться. в.соответствии.с.растущими.требованиями..Кроме.того,.API.Kafka.Connect.наце- лены.не.просто.на.масштабирование,.а.на.распараллеливание.работы..В.следующем. разделе.мы.опишем,.как.платформа.Kafka.дает.возможность.источникам.и.приемни- кам.данных.распределять.работы.по.нескольким.потокам.выполнения.и.задейство- вать.доступные.ресурсы.процессора.даже.при.работе.на.отдельной.машине. Kafka.также.поддерживает.несколько.типов.сжатия,.благодаря.чему.пользователи. и.администраторы.могут.контролировать.использование.ресурсов.сети.и.устройств. хранения.при.росте.нагрузки. Форматы данных Одна.из.важнейших.задач.конвейеров.данных.—.согласование.их.форматов.и.ти- пов..Различные.базы.данных.и.другие.системы.хранения.поддерживают.разные. форматы.данных..Вам.может.потребоваться.загрузить.в.Kafka.данные.в.формате. XML.и.реляционные.данные,.использовать.внутри.Kafka.формат.Avro,.а.затем.пре- образовать.данные.в.формат.JSON.для.записи.в.Elasticsearch,.или.в.формат.Parquet. для.записи.в.HDFS,.или.в.CSV.при.записи.в.S3. Самой.Kafka.и.API.Kafka.Connect.форматы.данных.совершенно.не.важны..Как.мы. видели.в.предыдущих.главах,.производители.и.потребители.могут.применить. любой.сериализатор.для.представления.данных.в.любом.формате..Хранящиеся. в.оперативной.памяти.собственные.объекты.Kafka.Connect.включают.типы.и.схе- мы.данных,.но,.как.мы.скоро.узнаем,.Kafka.Connect.позволяет.использовать.под- ключаемые.преобразователи.формата.для.хранения.этих.записей.в.произвольном. Соображения по поводу создания конвейеров данных 165 формате..Это.значит,.что.вне.зависимости.от.задействованного.в.ней.формата. данных.Kafka.не.ограничивает.выбор.преобразователей. У.многих.источников.и.приемников.данных.есть.схемы:.можно.прочитать.схему. из.источника.вместе.с.данными,.сохранить.ее.и.воспользоваться.ею.в.дальнейшем. для.проверки.совместимости.или.даже.обновить.ее.в.базе.данных.приемника.. Классический.пример.—.конвейер.данных.из.MySQL.в.Hive..Хороший.конвейер. данных.при.добавлении.столбца.в.MySQL.обеспечивает.добавление.его.и.в.Hive,. чтобы.можно.было.загрузить.туда.новые.данные. Кроме.того,.при.записи.данных.из.Kafka.во.внешние.системы.коннекторы.приемни- ков.данных.отвечают.за.формат.записываемых.данных..Некоторые.из.них.делают. этот.формат.подключаемым..Например,.коннектор.HDFS.позволяет.выбирать. между.форматами.Avro.и.Parquet. Просто.поддерживать.различные.типы.данных.недостаточно.—.универсальный. фреймворк.интеграции.данных.должен.также.решать.проблемы.различия.пове- дения.разных.источников.и.приемников.данных..Например,.Syslog.представляет. собой.источник,.«проталкивающий».данные,.а.реляционные.базы.данных.требу- ют,.чтобы.фреймворк.извлекал.данные.из.них..HDFS.—.это.файловая.система,. предназначенная.только.для.добавления.данных,.так.что.их.в.нее.можно.только. записывать,.в.то.время.как.большинство.систем.дают.возможность.как.дописывать. данные,.так.и.обновлять.существующие.записи. Преобразования Преобразования.—.самые.неоднозначные.из.всех.требований..Существуют.две. парадигмы.создания.конвейеров.данных:.ETL.и.ELT..ETL.(расшифровывается. как.Extract.—.Transform.—.Load.—.«извлечь,.преобразовать,.загрузить»).означает,. что.конвейер.данных.отвечает.за.изменение.проходящих.через.него.данных..Это.дает. ощутимую.экономию.времени.и.места,.поскольку.не.требуется.сохранять.данные,. менять.их.и.сохранять.снова..В.зависимости.от.преобразований.иногда.это.преиму- щество.реально,.а.иногда.просто.перекладывает.бремя.вычислений.и.хранения.на. сам.конвейер.данных,.что.может.быть.нежелательным..Основной.недостаток.тако- го.подхода.заключается.в.том,.что.производимые.в.конвейере.данных.преобразо- вания.могут.лишить.нас.возможности.обрабатывать.данные.в.дальнейшем.. Если.создатель.конвейера.между.MongoDB.и.MySQL.решил.отфильтровать.часть. событий.или.убрать.из.записей.некоторые.поля,.то.у.всех.обращающихся.к.данным. в.MySQL.пользователей.и.приложений.окажется.доступ.лишь.к.части.данных..Если. им.потребуется.доступ.к.отсутствующим.полям,.придется.перестраивать.конвейер. и.повторно.обрабатывать.уже.обработанные.данные.(если.они.еще.доступны). ELT.расшифровывается.как.«извлечь,.загрузить,.преобразовать».(Extract.—.Load.—. Transform).и.означает,.что.конвейер.лишь.минимально.преобразует.данные.(в.ос- новном.это.касается.преобразования.типов.данных).с.тем,.чтобы.попадающие.по. 166 Глава 7 • Создание конвейеров данных месту.назначения.данные.как.можно.меньше.отличались.от.исходных..Такие.кон- вейеры.называют.также.высокоточными.конвейерами.(high-fidelity.pipeline).или. архитектурой.озер.данных.(data-lake.architecture)..В.них.целевая.система.собирает. «сырые».данные.и.обрабатывает.их.должным.образом..Их.преимущество.заклю- чается.в.максимальной.гибкости:.у.пользователей.целевой.системы.есть.доступ.ко. всем.данным..В.этих.системах.также.проще.искать.причины.проблем,.поскольку. вся.обработка.данных.выполняется.в.одной.системе,.а.не.распределяется.между. конвейером.и.дополнительными.приложениями..Недостаток.—.в.расходе.ресурсов. CPU.и.хранилища.в.целевой.системе..В.некоторых.случаях.ресурсы.обходятся.не- дешево,.и.желательно.по.возможности.вынести.обработку.из.этих.систем. Безопасность Безопасность.важна.всегда..В.терминологии.конвейеров.данных.основные.про- блемы.безопасности.состоят.в.следующем. Можем.ли.мы.гарантировать.шифрование.проходящих.через.конвейер.данных?. В.основном.это.важно.для.конвейеров,.проходящих.через.границы.ЦОД. Кому.разрешено.вносить.в.конвейер.изменения? Может.ли.конвейер.при.чтении.им.данных.из.мест.с.контролируемым.доступом. обеспечить.должную.аутентификацию? Kafka.предоставляет.возможность.шифрования.данных.при.передаче,.когда.она. встроена.в.конвейер.между.источниками.и.приемниками.данных..Она.также.под- держивает.аутентификацию.(через.SASL).и.авторизацию,.так.что.вы.можете.быть. спокойны:.если.тема.содержит.конфиденциальную.информацию,.никто.не.упол- номоченный.на.это.не.передаст.ее.в.менее.защищенные.системы..В.Kafka.также. имеется.журнал.аудита.для.отслеживания.доступа.—.санкционированного.и.не- санкционированного..Написав.немного.дополнительного.кода,.можно.отследить,. откуда.поступили.события.в.каждой.теме.и.кто.их.менял,.и.таким.образом.получить. полную.историю.каждой.записи. Обработка сбоев Считать,.что.все.данные.всегда.будут.в.полном.порядке,.очень.опасно..Важно.за- ранее.предусмотреть.обработку.сбоев..Можно.ли.сделать.так,.чтобы.дефектные. записи.никогда.не.попадали.в.конвейер?.Можно.ли.восстановить.работу.системы. после.обработки.не.поддающихся.разбору.записей?.Можно.ли.исправить.«плохие». записи.(возможно,.при.вмешательстве.оператора).и.обработать.их.заново?.Что.если. «плохая».запись.выглядит.точно.так.же,.как.нормальная,.и.проблема.вскроется. лишь.через.несколько.дней? Благодаря.тому,.что.Kafka.долго.хранит.все.события,.можно.при.необходимости. вернуться.назад.во.времени.и.ликвидировать.последствия.ошибок. |