Apache Kafka. Потоковая обработка и анализ данных. Apache Kafka. Потоковая обработка и анализ данныхСерия Бестселлеры OReilly
Скачать 7.59 Mb.
|
311 числе.отдел.по.обслуживанию.клиентов,.сам.отель,.система.отправки.под- тверждений.по.электронной.почте,.сайт.и.т..д..Желательно.также,.чтобы.отдел. по.обслуживанию.клиентов.мог.сразу.же.извлечь.из.системы.все.подробности. ваших.предыдущих.визитов.в.любой.из.отелей.сети,.а.на.стойке.администратора. в.отеле.знали,.что.вы.—.постоянный.клиент,.и.сделали.на.этом.основании.вам. скидку..Создание.всех.этих.систем.на.основе.приложений.потоковой.обработки. позволяет.организовать.получение.и.обработку.обновлений.в.режиме.псевдоре- ального.времени,.благодаря.чему.ощущения.клиентов.от.сервиса.значительно. улучшатся..С.подобной.системой.я.бы.получал.подтверждение.по.электронной. почте.в.течение.нескольких.минут,.деньги.с.кредитной.карты.снимали.бы.во- время,.платежную.квитанцию.присылали.своевременно,.а.служба.поддержки. могла.бы.немедленно.ответить.на.любые.мои.вопросы.относительно.брони. Интернет вещей. Интернет.вещей.может.означать.самые.разные.сущности,. начиная.с.домашних.устройств.для.автоматической.регулировки.температуры. или.автоматического.пополнения.запасов.стирального.порошка.до.контроля.за. качеством.фармацевтической.продукции.в.режиме.реального.времени..Очень. распространенный.сценарий.—.применение.потоковой.обработки.к.датчи- кам.и.устройствам.для.прогнозирования.необходимости.профилактического. обслуживания..Это.чем-то.напоминает.мониторинг.приложений,.только.по. отношению.к.аппаратному.обеспечению,.и.встречается.во.множестве.отрас- лей.промышленности,.включая.фабричное.производство,.телекоммуникации. (определение.сбойных.сотовых.вышек),.кабельное.ТВ.(выявление.сбойных. тюнеров.до.того,.как.клиент.начнет.жаловаться).и.многое.другое..У.каждого. сценария.—.свой.паттерн,.но.цель.одна:.обработка.в.больших.объемах.посту- пающих.от.устройств.событий,.оповещающих.о.том,.что.устройства.требуют. техобслуживания..Такими.паттернами.могут.быть.потерянные.пакеты.в.случае. сетевого.коммутатора,.повышение.усилий,.необходимых.для.закручивания.гаек,. в.фабричном.производстве.или.частоты.перезагрузки.тюнера.кабельного.ТВ. Обнаружение мошенничества. Известно.также.под.названием.«обнаружение. аномалий»,.представляет.собой.очень.широкую.область,.связанную.с.поимкой. мошенников/нечестных.людей.в.системе..Примерами.могут.служить.прило- жения.для.обнаружения.мошенничества.с.кредитными.картами,.на.фондовом. рынке,.жульничества.в.видеоиграх,.а.также.система.кибербезопасности..Во.всех. этих.сферах.чем.раньше.будет.пойман.мошенник,.тем.лучше,.так.что.работаю- щая.в.режиме.реального.времени.система,.способная.быстро.реагировать.на. события,.например,.запретить.выполнение.подозрительной.транзакции.еще.до. ее.одобрения,.гораздо.предпочтительнее.пакетного.задания,.которое.обнаружит. мошенничество.через.три.дня.после.события,.когда.все.исправить.будет.гораздо. сложнее..Опять.же.речь.идет.о.задаче.распознавания.паттернов.в.крупномас- штабном.потоке.событий. В.сфере.кибербезопасности.существует.метод.под.названием.сигнализация. (beaconing)..Вредоносное.программное.обеспечение,.помещенное.хакером.в.сеть. организации,.будет.периодически.обращаться.наружу.для.получения.команд.. 312 Глава 11 • Потоковая обработка Обнаружить.эти.операции.непросто,.поскольку.они.могут.производиться. в.любое.время.и.с.любой.частотой..Обычно.сети.хорошо.защищены.от.внешних. атак,.но.более.уязвимы.к.троянским.коням.внутри.организации,.отправляющим. данные.наружу..Благодаря.обработке.большого.потока.событий.сетевых.под- ключений.и.распознавания.аномальности.паттерна.обмена.сообщениями.(на- пример,.обнаружения.того,.что.для.конкретной.машины.является.нетипичным. обращение.к.конкретным.IP-адресам).можно.организовать.раннее.оповещение. отдела.безопасности.—.до.того,.как.будет.нанесен.существенный.ущерб. Как выбрать фреймворк потоковой обработки При.выборе.фреймворка.потоковой.обработки.важно.учесть.тип.будущего.при- ложения..Для.различных.типов.приложений.подходят.различные.типы.потоковой. обработки. Система ввода и обработки данных. Подходит.для.случая,.когда.целью.являет- ся.ввод.данных.из.одной.системы.в.другую.с.внесением.некоторых.изменений. в.данные,.чтобы.они.подходили.для.целевой.системы. Система, реагирующая в течение нескольких миллисекунд. Любые.приложения,. требующие.практически.мгновенного.ответа..В.эту.категорию.попадают.и.не- которые.сценарии.обнаружения.мошенничества. Асинхронные микросервисы. Бо'льшие.бизнес-процессы.делегируют.подобным. микросервисам.выполнение.простых.действий,.например.обновление.инфор- мации.о.наличии.товара.в.магазине..Таким.приложениям.может.потребоваться. поддерживать.локальное.состояние,.кэшируя.события.для.повышения.произ- водительности. Анализ данных в режиме псевдореального времени. Подобные.потоковые.при- ложения.выполняют.сложные.группировку.и.соединение,.чтобы.сформировать. продольные.и.поперечные.срезы.данных,.позволяющие.почерпнуть.из.них.по- лезную.для.бизнеса.информацию. Выбор.системы.потоковой.обработки.в.значительной.степени.зависит.от.решаемой. задачи. Если.вы.пытаетесь.решить.задачу.ввода.и.обработки.данных,.лучше.подумать. еще.раз,.нужна.ли.вам.система.потоковой.обработки.или.подойдет.более.прими- тивная.система,.ориентированная.именно.на.ввод.и.обработку.данных,.например. Kafka.Connect..Если.вы.уверены,.что.нужна.именно.система.потоковой.обработ- ки,.убедитесь,.что.в.избранной.системе.есть.хороший.выбор.коннекторов,.в.том. числе.качественные.коннекторы.для.нужных.вам.систем. Если.вы.пытаетесь.решить.задачу,.требующую.реакции.в.течение.нескольких. миллисекунд,.лучше.также.еще.раз.подумать,.прежде.чем.выбрать.систему. потоковой.обработки..Для.этой.задачи.лучше.подходят.паттерны.типа.«за- Как выбрать фреймворк потоковой обработки 313 прос.—ответ»..Если.вы.уверены,.что.хотите.использовать.систему.потоковой. обработки,.выбирайте.такую,.которая.поддерживает.модель.обработки.по.от- дельным.событиям.с.низким.значением.задержки,.а.не.ориентированную.на. микропакетную.обработку. При.создании.асинхронных.микросервисов.вам.понадобится.система.потоковой. обработки,.хорошо.интегрируемая.с.выбранной.вами.шиной.сообщений.(наде- емся,.что.ею.будет.Kafka),.обладающая.возможностями.захвата.изменений.для. удобной.передачи.произошедших.далее.по.конвейеру.изменений.в.локальный. кэш.микросервиса,.а.также.обеспечивающая.поддержку.локального.хранилища,. которое.могло.бы.выступать.в.роли.кэша.или.материализованного.представле- ния.данных.микросервиса. При.создании.сложной.системы.для.аналитики.вам.также.понадобится.система. потоковой.обработки.с.хорошей.поддержкой.локального.хранилища.—.на.этот. раз.не.для.хранения.локальных.кэшей.и.материализованных.представлений,. а.для.выполнения.продвинутых.операций.агрегирования,.оконных.операций. и.соединений,.реализовать.которые.без.этого.непросто..API.такой.системы. должны.включать.поддержку.пользовательских.операций.агрегирования,.окон- ных.операций.и.разнообразных.типов.соединений. Помимо.соображений.по.поводу.сценариев.использования.следует.учитывать.не- сколько.общих. Удобство эксплуатации системы. Легко.ли.развертывать.систему.для.про- мышленной.эксплуатации?.Легко.ли.выполнять.мониторинг.и.искать.причины. проблем?.Хорошо.ли.она.масштабируется.в.обе.стороны.при.необходимости?. Хорошо.ли.она.интегрируется.с.уже.имеющейся.у.вас.инфраструктурой?.Что.де- лать.в.случае.ошибки.и.необходимости.повторной.обработки.данных? Простота использования API и легкость отладки. Я.сталкивался.с.ситуациями,. когда.написание.хорошего.приложения.для.другой.версии.того.же.фреймворка. занимает.на.порядок.больше.времени..Время.разработки.и.время.вывода.на.ры- нок.—.важные.факторы,.так.что.выбирайте.систему.в.расчете.на.максимальную. эффективность.своей.работы. Облегчение жизни. Почти.все.подобные.системы.декларируют.возможность. выполнения.продвинутых.операций.оконного.агрегирования.и.хранения.ло- кальных.кэшей,.но.вопрос.вот.в.чем:.упрощают.ли.они.жизнь.вам?.Берут.ли. они.на.себя.неприятные.нюансы,.связанные.с.масштабированием.и.восста- новлением,.или.дают.«дырявые».абстракции,.предоставляя.вам.разгребать.все. проблемы?.Чем.больше.чистых.API.и.абстракций.обеспечивает.система.и.чем. больше.неприятных.нюансов.она.берет.на.себя,.тем.выше.производительность. разработчиков. Помощь сообщества разработчиков. Многие.из.рассматриваемых.вами.потоко- вых.приложений.—.приложения.с.открытым.исходным.кодом,.так.что.активное. сообщество.разработчиков.очень.важно..Хорошее.сообщество.разработчиков. 314 Глава 11 • Потоковая обработка означает.регулярное.получение.новых.прекрасных.возможностей,.относительно. хорошее.качество.приложения.(никто.не.захочет.работать.с.плохим.ПО),.бы- строе.исправление.программных.ошибок.и.своевременные.ответы.на.вопросы. пользователей..Это.значит.также,.что.в.случае.какой-нибудь.загадочной.ошиб- ки.вы.сможете.найти.информацию.о.ней,.просто.поискав.в.Интернете,.так.как. пользователей.системы.много.и.все.они.сталкиваются.с.похожими.проблемами. Резюме Мы.начали.эту.главу.с.объяснения.того,.что.такое.потоковая.обработка..Мы.дали. формальное.ее.определение.и.обсудили.характерные.черты.парадигмы.потоковой. обработки..Мы.также.сравнили.ее.с.другими.парадигмами.программирования. Далее.мы.обсудили.важнейшие.понятия.потоковой.обработки.и.проиллюстрирова- ли.их.тремя.примерами,.написанными.с.применением.библиотеки.Kafka.Streams. После.обсуждения.всех.нюансов.примеров.мы.привели.обзор.архитектуры.фрейм- ворка.Kafka.Streams.и.рассказали.о.деталях.его.внутреннего.устройства..В.заверше- ние.главы.и.книги.в.целом.привели.примеры.сценариев.использования.потоковой. обработки.и.дали.несколько.советов.по.сравнению.различных.фреймворков.по- токовой.обработки. Приложение. Установка Kafka на других операционных системах Платформа.Apache.Kafka.—.по.большей.части.Java-приложение,.а.значит,.может. работать.на.любой.операционной.системе,.где.только.можно.установить.JRE.. Однако.она.была.оптимизирована.для.работы.в.Linux-подобных.операционных. системах,.так.что.наилучшую.производительность.демонстрирует.именно.там.. Поэтому.при.использовании.Kafka.для.разработки.или.тестирования.в.операци- онных.системах.для.настольных.компьютеров.имеет.смысл.запускать.ее.на.вирту- альной.машине,.соответствующей.среде.будущей.промышленной.эксплуатации. Установка на Windows В.Windows.10.можно.запускать.Kafka.двумя.способами..Традиционный.способ.—. применить.естественную.Java-установку..Пользователи.Windows.10.могут.вос- пользоваться.также.Windows.Subsystem.для.Linux..Настоятельно.рекомендуется. применять.именно.последний.метод,.поскольку.в.этом.случае.установка.намного. проще.и.среда.ближе.к.типичной.среде.промышленной.эксплуатации..Поэтому. сначала.мы.рассмотрим.именно.его. Использование Windows Subsystem для Linux Работая.под.Windows.10,.можно.установить.естественную.поддержку.операцион- ной.системы.Ubuntu.в.Windows,.воспользовавшись.Windows.Subsystem.для.Linux. (WSL)..На.момент.издания.данной.книги.компания.Microsoft.все.еще.рассматри- вала.WSL.как.экспериментальную.возможность..Хотя.WSL.и.работает.аналогично. виртуальной.машине,.ресурсов.для.нее.необходимо.меньше,.а.интеграция.с.опера- ционной.системой.Windows.у.нее.глубже. Для.установки.WSL.необходимо.следовать.указаниям,.которые.можно.найти. в.размещенной.в.Сети.документации.для.разработчиков.Microsoft.(MSDN). 316 Приложение. Установка Kafka на других операционных системах ( http://www.bit.ly/2r6HnN7 )..После.этого.необходимо.установить.JDK.с.помощью. утилиты.apt-get: $ sudo apt-get install openjdk-7-jre-headless [sudo] password for username: Reading package lists... Done Building dependency tree Reading state information... Done [...] done. $ После.установки.JDK.можно.перейти.к.установке.Kafka.в.соответствии.с.указани- ями,.приведенными.в.главе.2. Использование Java естественным образом В.более.старых.версиях.Windows.или.если.вам.не.хочется.задействовать.среду. WSL,.можно.запустить.Kafka.естественным.образом.с.помощью.среды.Java.для. Windows..Однако.будьте.осторожны,.это.может.привести.к.возникновению.оши- бок,.специфических.для.среды.Windows..Подобные.ошибки.могут.остаться.неза- меченными.сообществом.разработчиков.Apache.Kafka,.в.отличие.от.аналогичных. проблем.на.Linux. Перед.установкой.ZooKeeper.и.Kafka.необходимо.настроить.среду.Java..Устано- вите.последнюю.версию.Oracle.Java.8,.которую.можно.найти.на.странице.загрузки. Oracle.Java.SE.( http://www.bit.ly/TEA7iC )..Скачайте.полный.установочный.пакет.JDK,. чтобы.у.вас.были.все.утилиты.Java,.и.следуйте.указаниям.по.установке. Осторожнее с путями Мы настоятельно рекомендуем не использовать при установке Java и Kafka пути, содержащие пробелы. Windows разрешает применять в путях пробелы, однако предназначенные для Unix приложения настраиваются иначе, так что задание путей может вызвать проблемы. Учитывайте это при задании пути установки Java. Например, разумно будет при установке JDK 1.8 update 121 выбрать путь C:\Java\jdk1.8.0_121. После.установки.Java.необходимо.настроить.переменные.среды..Это.можно.сделать. в.панели.управления.Windows,.хотя.точное.место.зависит.от.используемой.вами. версии.Windows..В.Windows.10.нужно.выбрать. Система и безопасность .(System.and. Security),.затем. Система .(System),.после.чего.нажать.кнопку. Изменить параметры (Change.settings).в.разделе. Имя компьютера, имя домена и параметры рабочей группы (Computer.name,.domain.and.workgroup.settings)..При.этом.откроется.окно. Свой- ства системы .(System.Properties),.в.котором.нужно.выбрать.вкладку. Дополнительно (Advanced).и,.наконец,.нажать.кнопку. Переменные среды .(Environment.Variables).. Установка на Windows 317 В.этом.разделе.вы.сможете.добавить.новую.пользовательскую.переменную. JAVA_ HOME .(рис..П.1).и.задать.ее.значение.в.соответствии.с.путем,.по.которому.устано- вили.Java..Затем.поменяйте.значение.системной.переменной. Path ,.добавив.туда. новый.элемент. %JAVA_HOME%\bin ..Сохраните.эти.настройки.и.выйдите.из.панели. управления. Рис. П.1. Добавление переменной JAVA_HOME Теперь.можно.приступить.к.установке.Apache.Kafka..Установочный.пакет.вклю- чает.ZooKeeper,.так.что.устанавливать.его.отдельно.не.нужно..На.момент.выхода. данной.книги.актуальной.является.версия.0.10.2.0,.работающая.со.Scala.2.11.0 1 Файл,.который.вы.скачаете,.представляет.собой.GZip-архив,.заархивированный. и.упакованный.с.помощью.утилиты.tar,.так.что.для.его.распаковки.вам.понадо- бится.Windows-приложение,.например.8zip..Как.и.при.установке.на.операционной. системе.Linux,.у.вас.будет.возможность.выбрать,.куда.выполнять.разархивирование.. 1. Речь.идет.об.англоязычном.издании.книги..По.состоянию.на.июль.2018.года.новейшей. является.версия.1.1.1,.работающая.со.Scala.2.12.0.или.2.12.6..—.Примеч. пер. В.данном.примере.мы.будем.считать,.что.установочный.пакет.Kafka.разархивиро- ван.в.каталог. C:\kafka_2.11-0.10.1.0 Запуск.ZooKeeper.и.Kafka.под.операционной.системой.Windows.несколько.отли- чается.от.запуска.под.Linux,.поскольку.приходится.использовать.предназначенные. для.Windows.пакетные.файлы,.а.не.сценарии.командной.оболочки,.как.в.случае. других.платформ..Эти.пакетные.файлы.также.не.поддерживают.работу.приложе- ния.в.фоновом.режиме,.так.что.вам.понадобится.отдельная.командная.оболочка. для.каждого.приложения..Сначала.запустим.ZooKeeper: PS C:\> cd kafka_2.11-0.10.2.0 PS C:\kafka_2.11-0.10.2.0> bin/windows/zookeeper-server-start.bat C: \kafka_2.11-0.10.2.0\config\zookeeper.properties [2017-04-26 16:41:51,529] INFO Reading configuration from: C: \kafka_2.11-0.10.2.0\config\zookeeper.properties (org.apache.zoo keeper.server.quorum.QuorumPeerConfig) [...] [2017-04-26 16:41:51,595] INFO minSessionTimeout set to -1 (org.apache.zoo keeper.server.ZooKeeperServer) [2017-04-26 16:41:51,596] INFO maxSessionTimeout set to -1 (org.apache.zoo keeper.server.ZooKeeperServer) [2017-04-26 16:41:51,673] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory) После.успешного.запуска.ZooKeeper.можете.открыть.еще.одно.окно.для.запуска. Kafka: PS C:\> cd kafka_2.11-0.10.2.0 PS C:\kafka_2.11-0.10.2.0> .\bin\windows\kafka-server-start.bat C: \kafka_2.11-0.10.2.0\config\server.properties [2017-04-26 16:45:19,804] INFO KafkaConfig values: [...] [2017-04-26 16:45:20,697] INFO Kafka version : 0.10.2.0 (org.apache.kafka.com mon.utils.AppInfoParser) [2017-04-26 16:45:20,706] INFO Kafka commitId : 576d93a8dc0cf421 (org.apache.kafka.common.utils.AppInfoParser) [2017-04-26 16:45:20,717] INFO [Kafka Server 0], started (kafka.server.Kafka Server) Установка на MacOS MacOS.основан.на.Darwin.—.Unix-подобной.операционной.системе,.ведущей.свое. происхождение.в.том.числе.и.от.FreeBSD..Это.значит,.что.многое.из.того,.что.мы. можем.ожидать.от.нее,.можно.ожидать.и.от.любой.Unix-подобной.операционной. системы,.так.что.установка.на.нее.разработанных.для.Unix.приложений,.например. Apache.Kafka,.не.составляет.труда..Можно.или.выбрать.простейший.вариант.—.вос- пользоваться.системой.управления.пакетами,.например.Homebrew,.или.установить. Java.и.Kafka.вручную.ради.расширенного.контроля.версий. 318 Приложение. Установка Kafka на других операционных системах Установка на MacOS 319 Использование Homebrew Если.у.вас.уже.установлена.Homebrew.( https://brew.sh/ ).для.MacOS,.можете.восполь- зоваться.ею.для.установки.Kafka.за.один.шаг..При.этом.сначала.будет.произведена. установка.Java,.а.потом.установлена.Apache.Kafka.0.10.2.0.(версия.по.состоянию. на.момент.написания.данной.книги) 1 Если.вы.еще.не.установили.Homebrew,.сделайте.это,.следуя.указаниям,.приве- денным.на.странице.описания.установки.( http://docs.brew.sh/Installation.html )..Затем. можно.будет.установить.саму.Kafka..Система.управления.пакетами.Homebrew. гарантирует,.что.сначала.будут.установлены.все.зависимости,.включая.Java: $ brew install kafka ==> Installing kafka dependency: zookeeper [...] ==> Summary /usr/local/Cellar/kafka/0.10.2.0: 132 files, 37.2MB $ Homebrew.затем.установит.Kafka.в.каталог. /usr/local/Cellar ,.но.файлы.будут. привязаны.к.другим.каталогам: исполняемые.файлы.и.сценарии.будут.находиться.в.каталоге. /usr/local/bin ; настройки.Kafka.—.в. /usr/local/etc/kafka ; настройки.ZooKeeper.—.в. /usr/local/etc/zookeeper ; параметр.конфигурации. log.dirs .(расположение.данных.Kafka).будет.установ- лен.в.значение. /usr/local/var/lib/kafka-logs После.завершения.установки.можно.запустить.ZooKeeper.и.Kafka.(в.данном.при- мере.Kafka.запускается.в.фоновом.режиме): $ /usr/local/bin/zkServer start JMX enabled by default Using config: /usr/local/etc/zookeeper/zoo.cfg Starting zookeeper ... STARTED $ kafka-server-start.sh /usr/local/etc/kafka/server.properties [...] [2017-02-09 20:48:22,485] INFO [Kafka Server 0], started (kafka.server.Kafka Server) Установка вручную Аналогично.установке.вручную.на.операционной.системе.Windows,.при.установке. Kafka.на.MacOS.необходимо.сначала.установить.JDK..Для.получения.нужной.вер- сии.для.MacOS.можно.воспользоваться.той.же.страницей.загрузки.Oracle.Java.SE,. 1. См..предыдущую.сноску..—.Примеч. пер. а.затем.установить.Apache.Kafka,.опять.же.аналогично.Windows..В.данном.примере. будем.считать,.что.скачанный.установочный.пакет.Kafka.разархивируется.в.каталог. /usr/local/kafka_2.11-0.10.2.0 Запуск.ZooKeeper.и.Kafka.не.отличается.от.их.запуска.в.Linux,.хотя.сначала.нужно. убедиться,.что.задано.значение.переменной. JAVA_HOME : $ export JAVA_HOME=`/usr/libexec/java_home` $ echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0._131.jdk/Contents/Home $ /usr/local/kafka_2.11-0.10.2.0/bin/zookeeper-server-start.sh -daemon /usr/ local/kafka_2.11-0.10.2.0/config/zookeeper.properties $ /usr/local/kafka_2.11-0.10.2.0/bin/kafka-server-start.sh /usr/local/etc/kafka/ server.properties [2017-04-26 16:45:19,804] INFO KafkaConfig values: [...] [2017-04-26 16:45:20,697] INFO Kafka version : 0.10.2.0 (org.apache.kafka.com mon.utils.AppInfoParser) [2017-04-26 16:45:20,706] INFO Kafka commitId : 576d93a8dc0cf421 (org.apache.kafka.common.utils.AppInfoParser) [2017-04-26 16:45:20,717] INFO [Kafka Server 0], started (kafka.server.Kafka Server) 320 Приложение. Установка Kafka на других операционных системах |