Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
35 перезапускаться.и.продолжать.обработку.сообщений.с.того.места,.на.котором.они. остановились,.без.потери.данных. Масштабируемость Гибко.масштабируемая.Kafka.позволяет.обрабатывать.любые.объемы.данных.. Можно.начать.работу.с.одного.брокера.в.качестве.пробной.версии,.расширить. систему.до.небольшого.кластера.из.трех.брокеров,.предназначенного.для.разра- ботки,.а.затем.перейти.к.промышленной.эксплуатации.с.большим.кластером.из. десятков.или.даже.сотен.брокеров,.растущим.по.мере.увеличения.объемов.данных.. При.этом.можно.расширять.систему.во.время.работы.кластера,.что.не.повлияет. на.доступность.системы.в.целом..Это.означает.также,.что.кластеру.из.множества. брокеров.не.страшен.сбой.одного.из.них.—.обслуживание.клиентов.таким.образом. не.прервется..Кластеры,.которые.должны.выдерживать.одновременные.отказы. нескольких.брокеров,.можно.настроить,.увеличив.коэффициенты.репликации.. Подробнее.репликация.обсуждается.в.главе.6. Высокое быстродействие Благодаря.рассмотренным.особенностям.Apache.Kafka.как.система.обмена.со- общениями.по.типу.«публикация/подписка».отличается.прекрасной.производи- тельностью.при.высокой.нагрузке..Производители,.потребители.и.брокеры.можно. масштабировать.для.легкой.обработки.очень.больших.потоков.сообщений..Причем. это.можно.делать.параллельно.с.обеспечением.менее.чем.секундной.задержки.со- общений.по.пути.от.производителя.к.потребителю. Экосистема данных В.средах,.создаваемых.нами.для.обработки.данных,.задействуется.множество. приложений..Производители.данных.представляют.собой.приложения,.которые. создают.данные.или.как-либо.еще.вводят.их.в.систему..Выходные.данные.имеют. форму.показателей,.отчетов.и.других.результатов.обработки..Мы.создаем.циклы,. в.которых.одни.компоненты.читают.данные.из.системы,.преобразуют.их.с.помощью. данных.от.других.производителей,.после.чего.возвращают.обратно.в.инфраструк- туру.данных.для.использования..Это.происходит.со.множеством.типов.данных,. у.каждого.из.которых.свои.особенности.в.плане.содержимого,.размера.и.способа. использования. Apache.Kafka.—.своего.рода.кровеносная.система.для.экосистемы.данных.(рис..1.9).. Она.обеспечивает.перенос.сообщений.между.разными.членами.инфраструктуры,. предлагая.единообразный.интерфейс.для.всех.клиентов..В.сочетании.с.систе- мой,.предоставляющей.схемы.сообщений,.производители.и.потребители.более. 36 Глава 1 • Знакомьтесь: Kafka не.требуют.сильного.сцепления.или.прямого.соединения..По.мере.возникновения. и.исчезновения.бизнес-моделей.можно.добавлять.и.удалять.компоненты,.причем. производители.не.должно.волновать.то,.какие.приложения.потребляют.данные. и.сколько.их. Рис. 1.9. Большая экосистема данных Сценарии использования Отслеживание действий пользователей Первоначальный.сценарий.использования.платформы.Kafka,.разработанный.при. ее.создании.в.компании.LinkedIn,.состоял.в.отслеживании.действий.пользовате- лей..Пользователи.сайтов.взаимодействуют.с.приложениями.клиентской.части,. генерирующими.сообщения.о.предпринятых.пользователями.действиях..Это. может.быть.пассивная.информация,.например,.сведения.о.просмотрах.страниц.или. отслеживание.щелчков.кнопкой.мыши,.или.информация.о.более.сложных.действи- ях,.например,.добавлении.пользователем.данных.в.свой.профиль.. Сообщения.публикуются.в.одной.или.нескольких.темах,.потребителями.которых. становятся.приложения.в.прикладной.части..Эти.приложения.могут.генерировать. отчеты,.служить.производителем.данных.для.систем.машинного.обучения,.обнов- лять.результаты.поиска.или.выполнять.другие.операции,.необходимые.для.повы- шения.удобства.использования. Экосистема данных 37 Обмен сообщениями Kafka.используется.также.для.обмена.сообщениями,.при.котором.приложения. должны.отправлять.пользователям.уведомления,.например,.сообщения.элек- тронной.почты..Эти.приложения.могут.создавать.сообщения,.не.беспокоясь.об. их.форматировании.или.фактической.отправке..После.этого.одно-единственное. приложение.сможет.читать.все.отправленные.сообщения.и.обрабатывать.их.еди- нообразно,.включая: единообразное.форматирование.сообщений,.называемое.также.декорирова- нием; объединение.нескольких.сообщений.в.одно.уведомление.для.отправки; учет.предпочтений.пользователя.относительно.способа.получения.сообщений. Использование.для.этого.единого.приложения.позволяет.избежать.дублирования. функциональности.в.нескольких.приложениях,.а.также.дает.возможность.вы- полнять.такие.операции,.как.агрегирование,.которые.в.противном.случае.были.бы. невозможны. Показатели и журналирование Kafka.также.идеально.подходит.для.сбора.показателей.и.журналов.приложения. и.системы..В.случае.реализации.этого.сценария.использования.особенно.ярко. проявляется.вероятность.наличия.нескольких.приложений,.генерирующих.одно- типные.сообщения..Приложения.регулярно.публикуют.в.темах.Kafka.показатели,. потребителями.которых.становятся.системы.мониторинга.и.оповещения..Их. также.можно.использовать.в.таких.офлайн-системах,.как.Hadoop,.для.долгосроч- ного.анализа,.например,.прогноза.роста..Журнальные.сообщения.можно.публи- ковать.аналогичным.образом.с.маршрутизацией.их.на.выделенные.системы.поис- ка.по.журналам,.например,.Elasticsearch.или.системы.анализа.безопасности..Еще. одно.достоинство.Kafka:.в.случае.необходимости.изменения.целевой.системы. (например,.при.наступлении.времени.обновления.системы.хранения.журналов). не.нужно.менять.приложения.клиентской.части.или.способ.агрегирования. Журнал фиксации Поскольку.в.основе.Kafka.лежит.понятие.журнала.фиксации,.можно.с.легкостью. публиковать.в.ней.изменения.базы.данных.и.организовывать.мониторинг.прило- жениями.этого.потока.данных.с.целью.получения.изменений.сразу.же.после.их.вы- полнения..Этот.поток.журнала.изменений.можно.использовать.и.для.репликации. изменений.базы.данных.в.удаленной.системе.или.для.объединения.изменений.из. нескольких.систем.в.единое.представление.базы.данных..Долгосрочное.сохране- ние.оказывается.удобным.для.создания.буфера.для.этого.журнала.изменений,. 38 Глава 1 • Знакомьтесь: Kafka поскольку.дает.возможность.повторного.выполнения.в.случае.сбоя.приложений- потребителей..В.качестве.альтернативы.можно.воспользоваться.темами.со.сжа- тыми.журналами.для.более.длительного.хранения.за.счет.хранения.лишь.одного. изменения.для.каждого.ключа. Потоковая обработка Еще.одна.область.потенциального.применения.Kafka.—.потоковая.обработка..Хотя. практически.любой.вид.использования.платформы.можно.рассматривать.как. потоковую.обработку,.этот.термин.обычно.относится.к.приложениям.с.такой.же. функциональностью,.как.отображение/свертка.в.Hadoop..Hadoop.обычно.работает. с.агрегированием.данных.на.длительном.интервале.времени.—.несколько.часов.или. дней..Потоковая.же.обработка.работает.с.данными.в.режиме.реального.времени.со. скоростью.генерации.сообщений..Потоковые.фреймворки.позволяют.пользовате- лям.писать.маленькие.приложения.для.работы.с.сообщениями.Kafka,.выполняя. такие.задачи,.как.расчет.показателей,.секционирование.(разбиение.на.разделы). сообщений.для.повышения.эффективности.обработки.другими.приложениями. и.преобразование.сообщений.с.использованием.данных.из.нескольких.произво- дителей..Мы.рассмотрим.потоковую.обработку.в.главе.11. История создания Kafka Платформа.Kafka.была.создана.для.решения.задачи.организации.конвейеров. данных.в.компании.LinkedIn..Она.была.нацелена.на.обеспечение.высокопроизво- дительной.системы.обмена.сообщениями,.способной.работать.со.множеством.типов. данных.и.выдавать.в.режиме.реального.времени.очищенную.и.структурированную. информацию.о.действиях.пользователей.и.системных.показателях. Данные — истинный движитель всех наших начинаний. Джефф Вейнер, генеральный директор LinkedIn Проблема LinkedIn Как.и.в.описанном.в.начале.этой.главы.примере,.в.LinkedIn.была.система.для.сбора. показателей.(как.системных,.так.и.относящихся.к.приложениям),.в.которой.приме- нялись.пользовательские.средства.сбора.данных.и.утилиты.с.открытым.исходным. кодом.для.хранения.и.внутреннего.представления.данных..Помимо.возможности. фиксации.обычных.показателей,.например,.коэффициента.загрузки.CPU.и.бы- стродействия.приложения,.в.ней.была.продвинутая.возможность.отслеживания. запросов,.использовавшая.систему.мониторинга.и.позволявшая.анализировать. прохождение.запроса.пользователя.по.внутренним.приложениям..У.системы. История создания Kafka 39 мониторинга,.однако,.было.немало.недостатков,.в.частности.сбор.показателей.на. основе.опросов,.большие.промежутки.между.значениями.и.то,.что.владельцам. приложений.невозможно.было.управлять.своими.показателями..Эта.система.была. слабо.автоматизированной,.требовала.вмешательства.операторов.для.решения. большинства.простых.задач,.была.неоднородной.(одни.и.те.же.показатели.по- разному.назывались.в.разных.подсистемах). В.то.же.время.в.LinkedIn.существовала.система,.предназначенная.для.отслежива- ния.информации.о.действиях.пользователей..Серверы.клиентской.части.периоди- чески.подключались.к.HTTP-сервису.для.публикации.в.нем.пакетов.сообщений. (в.формате.XML)..Эти.пакеты.затем.передавались.на.офлайн-обработку,.в.ходе. которой.производились.синтаксический.разбор.и.объединение.файлов..Эта.система. тоже.имела.немало.недостатков..Форматирование.XML.было.несогласованным,. а.синтаксический.разбор.—.дорогостоящим.в.вычислительном.отношении..Смена. типа.отслеживаемых.действий.пользователя.требовала.значительной.слаженной. работы.клиентских.частей.и.офлайн-обработки..К.тому.же.в.системе.постоянно. происходили.сбои.из-за.изменения.схем..Отслеживание.было.основано.на.пере- даче.пакетов.каждый.час,.так.что.использовать.его.в.режиме.реального.времени. было.невозможно. Системы.мониторинга.и.отслеживания.не.могли.использовать.один.и.тот.же.сервис. прикладной.части..Сервис.мониторинга.был.слишком.неуклюжим,.формат.данных. не.подходил.для.отслеживания.действий,.а.модель.опросов.для.мониторинга.была. несовместима.с.моделью.проталкивания.для.отслеживания..В.то.же.время.сервис. отслеживания.был.недостаточно.стабильным.для.использования.его.для.показа- телей,.а.модель.пакетной.обработки.не.подходила.для.мониторинга.и.оповещения. в.режиме.реального.времени..Однако.у.данных.мониторинга.и.отслеживания. было.много.общих.черт,.а.выявление.взаимосвязей.этой.информации.(например,. влияния.конкретных.типов.действий.пользователя.на.производительность.прило- жения).—.крайне.желательным..Уменьшение.частоты.конкретных.видов.действий. пользователя.могло.указывать.на.проблемы.с.обслуживающим.их.приложением,. но.часовая.задержка.обработки.пакетов.с.действиями.пользователей.означала,.что. реакция.на.подобные.проблемы.слишком.медленная. Прежде.всего.были.тщательно.изучены.уже.существующие.готовые.решения. с.открытым.исходным.кодом.с.целью.нахождения.новой.системы,.которая.бы. обеспечивала.доступ.к.данным.в.режиме.реального.времени.и.масштабировалась. настолько,.чтобы.справиться.с.требуемым.объемом.потока.сообщений..Были.соз- даны.экспериментальные.системы.на.основе.брокера.сообщений.ActiveMQ,.но.на. тот.момент.он.не.был.способен.справиться.с.таким.объемом.сообщений..К.тому.же,. когда.это.решение.работало.так,.как.требовалось.LinkedIn,.оно.было.нестабильным,. в.ActiveMQ.обнаружилось.множество.изъянов,.приводивших.к.приостановке.бро- керов,.в.результате.чего.возникали.заторы.в.соединениях.с.клиентами.и.ограничи- вались.возможности.приложений.по.выдаче.результатов.запросов.пользователям.. Было.принято.решение.перейти.на.свою.инфраструктуру.конвейеров.данных. 40 Глава 1 • Знакомьтесь: Kafka Рождение Kafka Команду.разработчиков.в.LinkedIn.возглавлял.Джей.Крепс.(Jay.Kreps),.ведущий. разработчик,.ранее.отвечавший.за.создание.и.выпуск.распределенной.системы. хранения.данных.типа.«ключ.—.значение».Voldemort.с.открытым.исходным.ко- дом..Первоначально.в.команду.входили.также.Ния.Нархид,.а.позднее.Чжан.Рао.. Вместе.они.решили.создать.систему.обмена.сообщениями,.которая.отвечала.бы. требованиям.как.к.мониторингу,.так.и.к.отслеживанию.и.которую.в.дальнейшем. можно.было.бы.масштабировать..Основные.цели: расцепить.производители.и.потребители.с.помощью.модели.проталкивания/ извлечения; обеспечить.сохраняемость.сообщений.в.системе.обмена.сообщениями,.чтобы. можно.было.работать.с.несколькими.потребителями; оптимизировать.систему.для.обеспечения.высокой.пропускной.способности. по.сообщениям; обеспечить.горизонтальное.масштабирование.системы.по.мере.роста.потоков. данных. В.результате.была.создана.система.публикации.сообщений.и.подписки.на.них.с.ти- пичными.для.систем.обмена.сообщениями.интерфейсом.и.слоем.хранения,.более. напоминающим.систему.агрегирования.журналов..В.сочетании.с.использованием. Apache.Avro.для.сериализации.сообщений.Kafka.позволяла.эффективно.обраба- тывать.как.показатели,.так.и.информацию.о.действиях.пользователей.в.масштабе. миллиардов.сообщений.в.день..Масштабируемость.Kafka.сыграла.свою.роль.в.том,. что.объем.использования.LinkedIn.вырос.до.более.чем.триллиона.сообщений. и.петабайта.потребляемых.данных.ежедневно.(по.состоянию.на.август.2015.года). Открытый исходный код Kafka.была.выпущена.в.виде.проекта.с.открытым.исходным.кодом.на.GitHub. в.конце.2010.года..По.мере.того.как.сообщество.разработчиков.ПО.с.открытым. исходным.кодом.стало.обращать.на.нее.все.больше.внимания,.было.предложено. (и.предложение.принято).внести.Kafka.в.число.проектов.из.инкубатора.Apache. Software.Foundation.(это.произошло.в.июле.2011.года)..В.октябре.2012-го.Apache. Kafka.была.переведена.из.инкубатора.и.стала.полноправным.проектом..С.этого.вре- мени.сформировалось.постоянное.сообщество.участников.и.коммитеров.проекта. Kafka.вне.компании.LinkedIn,.постоянно.работавших.над.ней..Осенью.2014.года. Джей.Крепс,.Ния.Нархид.и.Чжан.Рао.покинули.LinkedIn.и.основали.Confluent.—. компанию,.сосредоточившую.усилия.на.обеспечении.разработки,.коммерческой. поддержки.и.обучения.Apache.Kafka..Эти.две.компании.продолжают.разрабатывать. и.сопровождать.Kafka,.превращая.ее.в.оптимальное.средство.создания.больших. конвейеров.данных..В.этом.им.помогает.сообщество.других.разработчиков.откры- того.ПО,.чей.вклад.в.работу.постоянно.растет. Приступаем к работе с Kafka 41 Название Часто.можно.услышать.вопрос:.почему.Kafka.получила.такое.название?.Джей.Крепс. рассказал.следующее:.«Мне показалось, что раз уж Kafka — система, оптимизиро- ванная для записи, имеет смысл воспользоваться именем писателя. В колледже я по- сещал очень много литературных курсов, и мне нравился Франц Кафка. Кроме того, такое название для проекта с открытым исходным кодом звучит очень круто». Приступаем к работе с Kafka Теперь,.когда.мы.знаем.все.о.платформе.Kafka.и.ее.истории,.можно.установить.ее. и.создать.собственный.конвейер.данных..В.следующей.главе.обсудим.установку. и.настройку.Kafka..Затронем.выбор.подходящего.для.Kafka.аппаратного.обеспече- ния.и.некоторые.нюансы,.которые.стоит.учитывать.при.переходе.к.промышленной. эксплуатации. 2 Установка Kafka Эта.глава.описывает.начало.работы.с.брокером.Apache.Kafka,.включая.установку. Apache.ZooKeeper,.применяемого.платформой.для.хранения.метаданных.бро- керов..Здесь.также.рассматриваются.основные.параметры.конфигурации.для. развертывания.Kafka.и.критерии.выбора.аппаратного.обеспечения,.подходящего. для.работы.брокеров..Наконец,.мы.расскажем,.как.установить.несколько.брокеров. Kafka.в.виде.единого.кластера,.и.обсудим.некоторые.нюансы.ее.промышленной. эксплуатации. Обо всем по порядку Прежде.чем.использовать.Kafka,.необходимо.проделать.несколько.вещей..В.следу- ющих.разделах.расскажем.о.них. Выбрать операционную систему Apache.Kafka.представляет.собой.Java-приложение,.которое.может.работать.на. множестве.операционных.систем,.в.числе.которых.Windows,.MacOS,.Linux.и.др.. В.этой.главе.мы.сосредоточимся.на.установке.Kafka.в.среде.Linux,.поскольку. именно.на.этой.операционной.системе.платформу.устанавливают.чаще.всего..Linux. также.является.рекомендуемой.операционной.системой.для.развертывания.Kafka. общего.назначения..Информацию.по.установке.Kafka.на.Windows.и.MacOS.вы. найдете.в.приложении.A. Установить Java Прежде.чем.установить.ZooKeeper.или.Kafka,.необходимо.установить.и.настроить. среду.Java..Рекомендуется.использовать.Java.8,.причем.это.может.быть.версия,.как. включенная.в.вашу.операционную.систему,.так.и.непосредственно.загруженная. Обо всем по порядку 43 с.сайта. java.com ..Хотя.ZooKeeper.и.Kafka.будут.работать.с.Java.Runtime.Edition,.при. разработке.утилит.и.приложений.удобнее.использовать.полный.Java.Development. Kit.(JDK)..Приведенные.шаги.установки.предполагают,.что.у.вас.в.каталоге. /usr/ java/jdk1.8.0_51 .установлен.JDK.версии.8.0.51. Установить ZooKeeper Apache.Kafka.использует.ZooKeeper.для.хранения.метаданных.о.кластере.Kafka,. а.также.подробностей.о.клиентах-потребителях.(рис..2.1)..Хотя.ZooKeeper.можно. запустить.и.с.помощью.сценариев,.включенных.в.дистрибутив.Kafka,.установка. полной.версии.хранилища.ZooKeeper.из.дистрибутива.очень.проста. Рис. 2.1. Kafka и ZooKeeper Kafka.была.тщательно.протестирована.со.стабильной.версией.3.4.6.хранилища. ZooKeeper,.которую.можно.скачать.с.сайта. apache.org .по.адресу. http://bit.ly/2sDWSgJ Автономный сервер Следующий.пример.демонстрирует.установку.ZooKeeper.с.базовыми.настройка- ми.в.каталог. /usr/local/zookeeper .с.сохранением.данных.в.каталоге. /var/lib/ zookeeper : # tar -zxf zookeeper-3.4.6.tar.gz # mv zookeeper-3.4.6 /usr/local/zookeeper # mkdir -p /var/lib/zookeeper # cat > /usr/local/zookeeper/conf/zoo.cfg << EOF > tickTime=2000 > dataDir=/var/lib/zookeeper > clientPort=2181 > EOF # export JAVA_HOME=/usr/java/jdk1.8.0_51 44 Глава 2 • Установка Kafka # /usr/local/zookeeper/bin/zkServer.sh start JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED # Теперь.можете.проверить,.что.ZooKeeper.как.полагается.работает.в.автономном. режиме,.подключившись.к.порту.клиента.и.отправив.четырехбуквенную.коман- ду. srvr : # telnet localhost 2181 Trying ::1... Connected to localhost. Escape character is '^]'. srvr Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT Latency min/avg/max: 0/0/0 Received: 1 Sent: 0 Connections: 1 Outstanding: 0 Zxid: 0x0 Mode: standalone Node count: 4 Connection closed by foreign host. # Ансамбль ZooKeeper Кластер.ZooKeeper.называется.ансамблем.(ensemble)..Из-за.особенностей.самого. алгоритма.рекомендуется,.чтобы.ансамбль.включал.нечетное.число.серверов,.на- пример,.3,.5.и.т..д.,.поскольку.для.того,.чтобы.ZooKeeper.мог.отвечать.на.запросы,. должно.функционировать.большинство.членов.ансамбля.(кворум)..Это.значит,. что.ансамбль.из.трех.узлов.может.работать.и.при.одном.неработающем.узле.. Если.в.ансамбле.три.узла,.таких.может.быть.два. |