Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
14 Оглавление Приложение..Установка.Kafka.на.других.операционных.системах.................................315 Установка.на.Windows...............................................................................................................315 Использование.Windows.Subsystem.для.Linux...........................................................315 Использование.Java.естественным.образом.................................................................316 Установка.на.MacOS...................................................................................................................318 Использование.Homebrew..................................................................................................319 Установка.вручную...............................................................................................................319 Предисловие Сегодня.платформу.Apache.Kafka.используют.в.тысячах.компаний,.в.том.числе. более.чем.в.трети.компаний.из.списка.Fortune.500..Kafka.входит.в.число.самых. быстрорастущих.проектов.с.открытым.исходным.кодом.и.уже.породила.обширную. экосистему..Она.находится.в.самом.эпицентре.управления.потоками.данных.и.их. обработки. Откуда.же.появился.проект.Kafka?.Почему.он.возник?.И.что.это.вообще.такое? Начало.Kafka.положила.внутренняя.инфраструктурная.система,.которую.мы.созда- вали.в.LinkedIn..Мы.заметили.простую.вещь:.в.нашей.архитектуре.было.множество. баз.данных.и.других.систем,.предназначенных.для.хранения.данных,.но.ничего. не.было.для.обработки.непрерывных.потоков.данных..Прежде.чем.создать.Kafka,. мы.перепробовали.всевозможные.готовые.решения,.начиная.от.систем.обмена.со- общениями.и.заканчивая.агрегированием.журналов.и.ETL-утилитами,.но.ни.одно. из.них.не.подошло. В.конце.концов.договорились.создать.нужное.решение.с.нуля..Идея.состояла.в.том,. чтобы.не.ставить.во.главу.угла.хранение.больших.объемов.данных,.как.в.реля- ционных.базах.данных,.хранилищах.пар.«ключ/значение»,.поисковых.индексах. или.кэшах,.а.рассматривать.данные.как.непрерывно.развивающийся.и.постоянно. растущий.их.поток.и.проектировать.информационные.системы.—.и,.конечно,.ар- хитектуру.данных.—.на.этой.основе. Эта.идея.нашла.даже.более.широкое.применение,.чем.мы.ожидали..Хотя.первым. назначением.Kafka.было.обеспечение.функционирования.работающих.в.реальном. масштабе.времени.приложений.и.потоков.данных.социальной.сети,.сейчас.она. лежит.в.основе.самых.передовых.архитектур.во.всех.отраслях.промышленности.. Крупные.розничные.торговцы.пересматривают.свои.основные.бизнес-процессы. с.точки.зрения.непрерывных.потоков.данных,.автомобильные.компании.собирают. и.обрабатывают.в.режиме.реального.времени.потоки.данных,.получаемые.от.под- ключенных.к.Интернету.автомобилей,.и.также.пересматривают.свои.фундамен- тальные.процессы.и.системы.с.ориентацией.на.Kafka.и.банки. Так.что.же.это.такое,.Kafka?.Чем.она.отличается.от.хорошо.знакомых.вам.систем,. которые.сейчас.используются? 16 Предисловие Мы.рассматриваем.Kafka.как.потоковую платформу.(streaming.platform).—.си- стему,.которая.дает.возможность.публикации.потоков.данных.и.подписки.на. них,.их.хранения.и.обработки..Именно.для.этого.Apache.Kafka.и.создавалась.. Рассматривать.данные.с.этой.точки.зрения.может.оказаться.непривычно,.но.эта. абстракция.предоставляет.исключительно.широкие.возможности.создания.при- ложений.и.архитектур..Kafka.часто.сравнивают.с.несколькими.существующими. типами.технологий:.корпоративными.системами.обмена.сообщениями,.большими. информационными.системами.вроде.Hadoop,.утилитами.интеграции.данных.или. ETL..Каждое.из.этих.сравнений.в.чем-то.обоснованно,.но.не.вполне.правомерно. Kafka.напоминает.систему.обмена.сообщениями.тем,.что.обеспечивает.возмож- ность.публикации.и.подписки.на.потоки.сообщений..В.этом.она.похожа.на.такие. продукты,.как.ActiveMQ,.RabbitMQ,.MQSeries.компании.IBM.и.др..Но.несмотря. на.это.сходство,.у.Kafka.есть.несколько.существенных.различий.с.традиционными. системами.обмена.сообщениями..Вот.три.основных:.во-первых,.Kafka.ведет.себя. как.современная.распределенная.кластерная.система,.способная.масштабировать- ся.в.пределах,.достаточных.для.всех.приложений.даже.самой.крупной.компании.. Вместо.запуска.десятков.отдельных.брокеров.сообщений,.вручную.привязывае- мых.к.различным.приложениям,.Kafka.предоставляет.централизованную.платфор- му,.гибко.масштабирующуюся.под.обработку.всех.потоков.данных.компании.. Во-вторых,.Kafka.способна.хранить.данные.столько.времени,.сколько.нужно.. Это.дает.колоссальные.преимущества.при.ее.использовании.в.качестве.соедини- тельного.слоя,.а.благодаря.реальным.гарантиям.доставки.обеспечиваются.репли- кация,.целостность.и.хранение.данных.в.течение.любого.промежутка.времени.. В-третьих,.потоковая.обработка.весьма.существенно.повышает.уровень.абстракции.. Системы.обмена.сообщениями.чаще.всего.просто.передают.сообщения..Возмож- ности.потоковой.обработки.в.Kafka.позволяют.на.основе.потоков.данных.вычис- лять.производные.потоки.и.наборы.данных.динамически,.причем.при.гораздо. меньшем.количестве.кода..Эти.отличия.ставят.Kafka.довольно.обособленно. Kafka.можно.также.рассматривать.как.предназначенную.для.реального.времени. версию.Hadoop,.и.это.была.одна.из.причин,.побудивших.нас.создать.ее..С.помо- щью.Hadoop.можно.хранить.и.периодически.обрабатывать.очень.большие.объемы. файловых.данных..С.помощью.Kafka.также.можно.в.очень.больших.масштабах. хранить.и.непрерывно.обрабатывать.потоки.данных..С.технической.точки.зрения. определенное.сходство.между.ними,.безусловно,.есть,.и.многие.рассматривают.раз- вивающуюся.сферу.потоковой.обработки.как.надмножество.пакетной.обработки,. подобной.той,.которая.выполняется.с.помощью.Hadoop.и.различных.его.слоев. обработки..Делая.такое.сравнение,.упускают.из.виду.факт,.что.сценарии.исполь- зования,.возможные.при.непрерывной,.с.низким.значением.задержки.обработке,. сильно.отличаются.от.естественных.сценариев.для.систем.пакетной.обработки.. В.то.время.как.Hadoop.и.большие.данные.ориентированы.на.аналитические.при- ложения,.зачастую.используемые.в.сфере.складирования.данных,.присущее.Kafka. низкое.значение.задержки.делает.ее.подходящей.для.тех.базовых.приложений,. которые.непосредственно.обеспечивают.функционирование.бизнеса..Это.вполне. Предисловие 17 логично:.события.в.бизнесе.происходят.непрерывно,.и.возможность.сразу.же.ре- агировать.на.них.значительно.облегчает.построение.сервисов,.непосредственно. обеспечивающих.работу.бизнеса,.а.также.возможность.дать.ответ.на.отзывы.поль- зователей.и.т..д. Еще.одна.категория,.с.которой.сравнивают.Kafka,.—.ETL.и.утилиты.интеграции. данных..Эти.утилиты.занимаются.перемещением.данных,.и.Kafka.делает.то.же.са- мое..Это.в.некоторой.степени.справедливо,.но.мне.кажется,.что.коренное.отличие. состоит.в.том,.что.Kafka.перевернула.эту.задачу.вверх.ногами..Kafka.—.не.просто. утилита.для.извлечения.данных.из.одной.системы.и.добавления.их.в.другую,. а.платформа,.основанная.на.концепции.потоков.событий.в.режиме.реального.вре- мени..Это.значит,.что.она.может.не.только.стыковать.стандартные.приложения. с.информационными.системами,.но.и.обеспечивать.функционирование.пользова- тельских.приложений,.создаваемых.для.порождения.этих.самых.потоков.данных.. Нам.представляется,.что.подобная.архитектура,.в.основу.которой.положены.потоки. событий,.—.действительно.важная.вещь..В.некотором.смысле.эти.потоки.данных.—. центральный.аспект.современной.«цифровой».компании,.ничуть.не.менее.важный,. чем.отражаемые.в.финансовых.ведомостях.потоки.наличных.денег. Именно.объединение.этих.трех.сфер.—.сведение.всех.потоков.данных.воедино.во. всех.сценариях.использования.—.делает.идею.потоковой.платформы.столь.при- тягательной. Однако.все.несколько.отличается.от.традиционного.представления,.и.создание. приложений,.ориентированных.на.работу.с.непрерывными.потоками.данных,.тре- бует.существенной.смены.парадигмы.мышления.разработчиков,.пришедших.из. вселенной.приложений.в.стиле.«запрос.—.ответ».и.реляционных.баз.данных..Эта. книга.—.однозначно.лучший.способ.выучить.Kafka.от.внутреннего.устройства.до. API,.написанная.теми,.кто.знаком.с.ней.лучше.всего..Я.надеюсь,.что.вы.насладитесь. ее.чтением.не.меньше,.чем.я! Джей Крепс, соучредитель и CEO компании Confluent Введение Величайший.комплимент,.который.только.могут.сделать.автору.технической.кни- ги:.«Я.захотел,.чтобы.эта.книга.была.у.меня,.как.только.познакомился.с.описанной. в.ней.темой»..Именно.с.такой.установкой.мы.и.начали.писать..Мы.вспомнили. опыт,.полученный.при.разработке.Kafka,.запуске.ее.в.промышленную.эксплуа- тацию.и.поддержке.множества.компаний.при.создании.на.ее.основе.архитектур. программного.обеспечения.и.управления.их.конвейерами.данных,.и.спросили. себя:.«Чем.по-настоящему.полезным.мы.можем.поделиться.с.нашими.читателями,. чтобы.сделать.из.новичков.экспертов?».Эта.книга.отражает.нашу.каждодневную. работу:.мы.запускаем.Apache.Kafka.и.помогаем.людям.использовать.ее.наилуч- шим.образом. Мы.включили.сюда.то,.что.считаем.необходимым.для.успешной.работы.Apache. Kafka.при.промышленной.эксплуатации.и.создании.на.ее.основе.устойчивых. к.ошибкам.высокопроизводительных.приложений..Уделили.особое.внимание. популярным.сценариям.использования:.шине.сообщений.для.событийно.управ- ляемых.микросервисов,.приложениям,.обрабатывающим.потоки,.а.также.широ- комасштабным.конвейерам.данных..Мы.также.постарались.сделать.книгу.доста- точно.универсальной.и.всеобъемлющей,.чтобы.она.оказалась.полезной.всем,.кто. применяет.Kafka,.вне.зависимости.от.сценария.использования.или.архитектуры.. Мы.охватили.в.ней.практические.вопросы,.например,.установку.и.конфигурацию. Kafka,.применение.API.Kafka,.и.уделили.определенное.внимание.принципам.по- строения.платформы.и.гарантиям.ее.надежности..Рассмотрели.также.несколько. потрясающих.нюансов.архитектуры.Kafka:.протокол.репликации,.контроллер. и.слой.хранения..Полагаем,.что.знание.внутреннего.устройства.Kafka.—.не.только. интересное.чтение.для.интересующихся.распределенными.системами..Оно.чрез- вычайно.полезно.для.принятия.взвешенных.решений.при.развертывании.Kafka. в.промышленной.эксплуатации.и.проектировании.использующих.ее.приложений.. Чем.лучше.вы.понимаете,.как.работает.Kafka,.тем.более.обоснованно.можете.вы- брать.необходимые.при.программировании.компромиссы. Одна.из.проблем.инженерии.разработки.ПО.—.наличие.нескольких.вариантов.ре- шения.одной.задачи..Такие.платформы,.как.Apache.Kafka,.обеспечивают.большую. гибкость,.что.замечательно.для.специалистов,.но.усложняет.обучение.новичков.. Зачастую.Apache.Kafka.показывает,.как.использовать.ту.или.иную.возможность,. но.не.почему.следует.или.не.следует.делать.это..Мы.старались.пояснять,.какие. Введение 19 в.конкретном.случае.существуют.варианты,.каково.соотношение.выгод.и.потерь. и.то,.когда.следует.и.не.следует.использовать.различные.возможности.Apache. Kafka. Для кого предназначена эта книга «Apache.Kafka..Потоковая.обработка.и.анализ.данных».написана.для.разработ- чиков,.использующих.в.своей.работе.API.Kafka,.а.также.инженеров-технологов. (именуемых.также.SRE,.DevOps.или.системными.администраторами),.занима- ющихся.установкой,.конфигурацией,.настройкой.и.мониторингом.ее.работы.при. промышленной.эксплуатации..Мы.не.забывали.также.об.архитекторах.данных. и.инженерах-аналитиках.—.тех,.кто.отвечает.за.проектирование.и.создание.всей. инфраструктуры.данных.компании..Некоторые.главы,.в.частности.3,.4.и.11,.ори- ентированы.на.Java-разработчиков..Для.их.усвоения.важно,.чтобы.читатель.был. знаком.с.основами.языка.программирования.Java,.включая.такие.вопросы,.как. обработка.исключений.и.конкурентность..В.других.главах,.особенно.2,.8,.9.и.10,. предполагается,.что.у.читателя.есть.опыт.работы.с.Linux.и.он.знаком.с.настройкой. сети.и.хранилищ.данных.на.Linux..В.оставшейся.части.книги.Kafka.и.архитектуры. программного.обеспечения.обсуждаются.в.более.общих.чертах,.поэтому.каких-то. специальных.познаний.от.читателей.не.требуется. Еще.одна.категория.людей,.которых.может.заинтересовать.данная.книга,.—.руко- водители.и.архитекторы,.работающие.не.непосредственно.с.Kafka,.а.с.теми,.кто. работает.с.ней..Ничуть.не.менее.важно,.чтобы.они.понимали,.каковы.предоставля- емые.платформой.гарантии.и.в.чем.могут.заключаться.компромиссы,.на.которые. придется.идти.их.подчиненным.и.сослуживцам.при.создании.основанных.на.Kafka. систем..Эта.книга.будет.полезна.тем.руководителям,.которые.хотели.бы.обучить. своих.сотрудников.работе.с.Kafka.или.убедиться,.что.команда.разработчиков.вла- деет.нужной.информацией. Условные обозначения В.данной.книге.используются.следующие.типографские.соглашения. Курсив Обозначает.новые.термины. Рубленый шрифт Им.набраны.URL,.адреса.электронной.почты. Моноширинный шрифт Используется.для.листингов.программ,.а.также.внутри.абзацев.—.для.ссылки. на.элементы.программ,.такие.как.переменные.или.имена.функций,.переменные. окружения,.операторы.и.ключевые.слова. 20 Введение Полужирный моноширинный шрифт Представляет.собой.команды.или.другой.текст,.который.должен.быть.в.точ- ности.набран.пользователем. Моноширинный курсив Отмечает.текст,.который.необходимо.заменить.пользовательскими.значениями. или.значениями,.определяемыми.контекстом. Данный рисунок означает совет или указание. Этот рисунок означает общее примечание. Данный рисунок указывает на предупреждение или предостережение. Использование примеров кода Эта.книга.создана.для.того,.чтобы.помочь.вам.в.работе..В.целом.приведенные.при- меры.кода.вы.можете.использовать.в.своих.программах.и.документации..Обращать- ся.к.нам.за.разрешением.нет.необходимости,.если.только.вы.не.копируете.значи- тельную.часть.кода..Например,.написание.программы,.использующей.несколько. фрагментов.кода.из.этой.книги,.не.требует.отдельного.разрешения..Для.продажи. или.распространения.компакт-диска.с.примерами.из.книг.O’Reilly,.конечно,.раз- решение.нужно..Ответ.на.вопрос.путем.цитирования.этой.книги,.в.том.числе.при- меров.кода,.не.требует.разрешения..Включение.значительного.количества.кода. примеров.из.этой.книги.в.документацию.к.вашему.продукту.может.потребовать. разрешения. Мы.ценим,.хотя.и.не.требуем,.ссылки.на.первоисточник..Ссылка.на.первоисточник. включает.название,.автора,.издательство.и.ISBN..Например:.«Нархид.Н.,.Шапира.Г.,. Палино.Т..Apache.Kafka..Потоковая.обработка.и.анализ.данных..—.СПб.:.Питер,. 2018..—.ISBN.978-1-491-93616-0». Если.вам.кажется,.что.заимствование.примеров.кода.выходит.за.рамки.правомер- ного.использования.или.данного.ранее.разрешения,.не.стесняясь,.связывайтесь. с.нами.по.адресу:. permissions@oreilly.com Введение 21 Благодарности Мы.хотели.бы.поблагодарить.множество.людей,.вложивших.свой.труд.в.Apache. Kafka.и.ее.экосистему..Без.их.труда.этой.книги.не.существовало.бы..Особая.бла- годарность.Джею.Крепсу.(Jay.Kreps),.Ние.Нархид.(Neha.Narkhede).и.Чжану.Рао. (Jun.Rao),.а.также.их.коллегам.и.руководству.в.компании.LinkedIn.за.участие.в.соз- дании.Kafka.и.передаче.его.в.фонд.программного.обеспечения.Apache.(Apache. Software.Foundation). Множество.людей.прислали.свои.замечания.по.черновикам.книги,.и.мы.ценим.их. знания.и.затраченное.ими.время..Это.Апурва.Мехта.(Apurva.Mehta),.Арсений. Ташоян.(Arseniy.Tashoyan),.Дилан.Скотт.(Dylan.Scott),.Ивен.Чеслак-Постава. (Ewen.Cheslack-Postava),.Грант.Хенке.(Grant.Henke),.Ишмаэль.Джума.(Ismael. Juma),.Джеймс.Чен.(James.Cheng),.Джейсон.Густафсон.(Jason.Gustafson),.Jeff. Holoman.(Джеф.Холомен),.Джоэль.Коши.(Joel.Koshy),.Джонатан.Сейдмэн. (Jonathan.Seidman),.Матиас.Сакс.(Matthias.Sax),.Майкл.Нолл.(Michael.Noll),. Паоло.Кастанья.(Paolo.Castagna).и.Джесси.Андерсон.(Jesse.Anderson)..Мы.также. хотели.бы.поблагодарить.множество.читателей,.оставивших.комментарии.и.отзывы. на.сайте.обратной.связи.черновых.версий.книги. Многие.из.рецензентов.очень.нам.помогли.и.значительно.повысили.качество.из- дания,.так.что.вина.за.все.оставшиеся.ошибки.лежит.исключительно.на.нас. Мы.хотели.бы.поблагодарить.редактора.издательства.O’Reilly.Шеннон.Катт. (Shannon.Cutt).за.терпение,.поддержку.и.гораздо.лучший.по.сравнению.с.нашим. контроль.ситуации..Работа.с.издательством.O’Reilly.—.замечательный.опыт.для. любого.автора:.предоставляемая.ими.поддержка,.начиная.с.утилит.и.заканчивая. автограф-сессиями,.беспрецедентна..Мы.благодарны.всем,.кто.сделал.выпуск.этой. книги.возможным,.и.ценим.то,.что.они.захотели.с.нами.работать. И.мы.хотели.бы.поблагодарить.свое.руководство.и.коллег.за.помощь.и.содействие,. которые.получили.при.написании.этой.книги. Гвен.также.хотела.бы.поблагодарить.своего.супруга,.Омера.Шапира.(Omer.Shapira),. за.терпение.и.поддержку.на.протяжении.многих.месяцев,.потраченных.на.написа- ние.еще.одной.книги,.а.также.кошек.Люка.и.Лею.за.то,.что.они.такие.милые,.и.отца,. Лиора.Шапира,.за.то,.что.научил.ее.всегда.хвататься.за.возможности,.какими.бы. пугающими.они.ни.были. Тодд.ничего.не.сделал.бы.без.своей.жены.Марси.и.дочерей.Беллы.и.Кайли,.все. время.ободрявших.его..Их.поддержка,.не.ослабевавшая.несмотря.на.то,.что.напи- сание.книги.потребовало.дополнительного.времени,.и.долгие.часы.пробежек.для. освежения.головы.помогали.ему.работать. 1 Знакомьтесь: Kafka Деятельность.любого.предприятия.питается.данными..Мы.получаем.информацию,. анализируем.ее,.выполняем.над.ней.какие-либо.действия.и.создаем.новые.данные. в.качестве.результатов..Все.приложения.создают.данные.—.журнальные.сообщения,. показатели,.информацию.об.операциях.пользователей,.исходящие.сообщения.или. что-то.еще..Каждый.байт.данных.что-нибудь.да.значит.—.что-нибудь,.определя- ющее.дальнейшие.действия..А.чтобы.понять,.что.именно,.нам.нужно.переместить. данные.из.места.создания.туда,.где.их.можно.проанализировать..Это.мы.каждый. день.наблюдаем.на.таких.сайтах,.как.Amazon,.где.щелчки.мышью.на.интересующих. нас.товарах.превращаются.в.демонстрируемые.нам.же.чуть.позже.рекомендации. От.скорости.этого.процесса.зависят.адаптивность.и.быстрота.реакции.нашего.пред- приятия..Чем.меньше.усилий.мы.тратим.на.перемещение.данных,.тем.больше.мо- жем.уделить.внимания.основной.деятельности..Именно.поэтому.конвейер.—.клю- чевой.компонент.в.ориентированном.на.работу.с.данными.предприятии..Способ. перемещения.данных.оказывается.практически.столь.же.важен,.как.и.сами.данные. Первопричиной всякого спора ученых является нехватка данных. Постепенно мы приходим к согласию относительно того, какие данные нужны, получаем эти дан- ные, и данные решают проблему. Или я оказываюсь прав, или вы, или мы оба оши- баемся. И можно двигаться дальше. Нил Деграсс Тайсон Обмен сообщениями по типу «публикация/подписка» Прежде.чем.перейти.к.обсуждению.нюансов.Apache.Kafka,.важно.разобраться. в.обмене.сообщениями.по.типу.«публикация/подписка».и.причине,.по.которой. оно.столь.важно..Обмен сообщениями по типу «публикация/подписка».(publish/ subscribe.messaging).—.паттерн.проектирования,.отличающийся.тем,.что.отпра- витель.(издатель).элемента.данных.(сообщения).не.направляет.его.конкретному. потребителю..Вместо.этого.он.каким-то.образом.классифицирует.сообщения,. |