Kafka Streams в действии. Приложения и микросервисы для работы в реальном времени - Билл Беджек - E-Book

Kafka Streams в действии. Приложения и микросервисы для работы в реальном времени E-Book

Билл Беджек

0,0

Beschreibung

Узнайте как реализовать потоковую обработку на платформе Kafka! В этой книге рассмотрены реальные примеры сбора, преобразования и агрегации данных. Показана работа со множественными процессорами, обработка событий в режиме реального времени. Вы узнаете даже о потоковом SQL с KSQL! Эксплуатация и тестирование, мониторинг и отладка современных распределенных систем - вы получите всю необходимую информацию о самых сложных аспектах потоковой обработки. Kafka Streams API - ключ к эффективному применению Kafka на практике. Темы, рассматриваемые в книге: •Использование KStreams API •Фильтрация, преобразование и дробление данных •Работа с Processor API •Интеграция с внешними системами

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 294

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Билл Беджек
Kafka Streams в действии. Приложения и микросервисы для работы в реальном времени
2021

Научный редактор И. Пальти

Переводчик И. Пальти

Технические редакторы Н. Гринчик, Е. Рафалюк-Бузовская

Литературный редактор Е. Рафалюк-Бузовская

Художник Н. Гринчик

Корректоры Е. Павлович, Т. Радецкая

Верстка Г. Блинов

Билл Беджек

Kafka Streams в действии. Приложения и микросервисы для работы в реальном времени. — СПб.: Питер, 2021.

ISBN 978-5-4461-1201-2

© ООО Издательство "Питер", 2021

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Оглавление

Предисловие
Введение
Благодарности
Об этой книге
Кому стоит прочитать эту книгу
Структура издания
О коде
Другие онлайн-ресурсы
Об авторе
Часть I. Знакомство с Kafka Streams
1. Добро пожаловать в Kafka Streams
1.1. Движение больших данных, и как оно повлияло на программирование
1.2. Знакомство с потоковой обработкой
1.3. Обработка транзакции покупки товара
1.4. Транзакция покупки с другой точки зрения
1.5. Kafka Streams как граф узлов обработки
1.6. Использование Kafka Streams для потока данных транзакций покупок
Резюме
2. Kafka в двух словах
2.1. Проблема данных
2.2. Использование Kafka для обработки данных
2.3. Архитектура Kafka
2.4. Отправка сообщений с помощью генераторов
2.5. Чтение сообщений с помощью потребителей
2.6. Установка и запуск Kafka
Резюме
Часть II. Разработка с помощью Kafka Streams
3. Разработка приложений Kafka Streams
3.1. API потоковых узлов-обработчиков
3.2. Программа Hello World для Kafka Streams
3.3. Работа с данными покупателей
3.4. Интерактивная разработка
3.5. Дальнейшие шаги
Резюме
4. Потоки данных и состояние
4.1. Обработка событий
4.2. Операции с сохранением состояния в Kafka Streams
4.3. Использование хранилищ состояния для поиска и ранее просмотренные данные
4.4. Получение дополнительной информации путем соединения потоков данных
4.5. Метки даты/времени в Kafka Streams
Резюме
5. API KTable
5.1. Взаимосвязь между потоками данных и таблицами
5.2. Обновления записей и настройки KTable
5.3. Агрегирование и оконные операции
Резюме
6. API узлов-обработчиков
6.1. Компромисс между повышением уровня абстракции и расширением возможностей контроля
6.2. Создание топологии с использованием источников, узлов-обработчиков и стоков
6.3. Углубляемся в API узлов-обработчиков на примере узла биржевой аналитики
6.4. Узел совместной группировки
6.5. Интеграция API узлов-обработчиков и API Kafka Streams
Резюме
Часть III. Администрирование Kafka Streams
7. Мониторинг и производительность
7.1. Основы мониторинга Kafka
7.2. Метрики приложения
7.3. Дополнительные методики отладки Kafka Streams
Резюме
8. Тестирование приложения Kafka Streams
8.1. Тестирование топологии
8.2. Комплексное тестирование
Резюме
Часть IV. Передовые возможности Kafka Streams
9. Создание продвинутых приложений с помощью Kafka Streams
9.1. Интеграция Kafka с другими источниками данных
9.2. Выбрасываем базу данных за борт
9.3. KSQL
Резюме
Приложения
A. Дополнительная информация о настройках
А.1. Ограничение количества перебалансировок при запуске приложения
А.2. Устойчивость к отказам брокеров
А.3. Обработка ошибок десериализации
А.4. Масштабирование приложения
А.5. Конфигурация RocksDB
А.6. Заблаговременное создание топиков повторного секционирования
А.7. Настройка внутренних топиков
А.8. Перезапуск приложения Kafka Streams
А.9. Очистка локального состояния
Б. Строго однократная доставка

Предисловие

Я считаю, что в будущем архитектуры, ориентированные на потоки событий и обработку их в режиме реального времени, будут встречаться повсеместно. Технически продвинутые компании, например Netflix, Uber, Goldman Sachs, Bloomberg и др., уже настроили масштабную работу подобных больших платформ потоковой обработки событий. Как бы громко это ни прозвучало, но я считаю, что появление потоковой обработки и событийно-управляемых архитектур повлияет на модель использования компаниями данных так же сильно, как повлияли в свое время реляционные базы данных.

Событийно-ориентированный образ мыслей и создание событийно-управляемых приложений, ориентированных на потоковую обработку, требует определенной смены мировоззрения от тех, кто привык к приложениям в стиле «запрос/ответ» и к реляционным базам данных. Именно тут и пригодится книга Kafka Streams.

Потоковая обработка влечет фундаментальный переход от командно-ориентированного мышления к мышлению событийно-ориентированному — это перемена, позволяющая создавать быстро реагирующие, событийно-управляемые, расширя­емые, гибкие приложения для работы в режиме реального времени. С точки зрения бизнеса событийно-ориентированное мышление открывает организациям дорогу к принятию решений и операциям в реальном времени с учетом контекста. С точки зрения технологии событийно-ориентированное мышление дает возможность создания более автономных и расцепленных приложений и, следовательно, адаптивно масштабируемых и расширяемых систем.

В обоих случаях конечной целью является увеличение скорости адаптации (agility) — как для бизнеса, так и для облегчающих его задачи технологий. В основе событийно-ориентированной архитектуры лежит внедрение событийно-ориентированного мышления в масштабах всей организации. А технологией, делающей возможным этот переход, выступает потоковая обработка.

Kafka Streams — нативная библиотека потоковой обработки Apache Kafka, предназначенная для создания событийно-управляемых приложений на языке Java. Kafka Streams позволяет приложениям выполнять сложные преобразования потоков данных, причем автоматически обеспечивает их отказоустойчивость и прозрачность, а также адаптивное распределение по экземплярам приложения. С момента ее появления в 2016 году, в версии 0.10 Apache Kafka, множество компаний начало промышленную эксплуатацию Kafka Streams, включая Pinterest, «Нью-Йорк Таймс», Rabobank, LINE.

Наша цель относительно Kafka Streams и KSQL — упростить потоковую обработку до такой степени, чтобы создание событийно-управляемых приложений, реагирующих на события, стало естественным и не пришлось использовать тяжеловесные фреймворки для обработки больших данных. В нашей модели основной сущностью является не код, выполняющий обработку, а потоки данных в Kafka.

Руководство Kafka Streams — прекрасный способ изучить библиотеку Kafka Streams, а также понять, почему она представляет собой ключевое средство создания событийно-ориентированных приложений. Надеюсь, вы получите от прочтения этой книги не меньшее удовольствие, чем я!

Ния Нархид (Neha Narkhede), соучредитель и технический директор компании Confluent, одна из создателей Apache Kafka

Введение

В бытность разработчиком программного обеспечения мне посчастливилось работать с современным ПО над интересными проектами. Поначалу я работал как над клиентскими, так и над серверными приложениями, но обнаружил, что мне больше нравится взаимодействовать исключительно с прикладной частью, так что этим я и занялся. Со временем я перешел к распределенным системам, начиная с Hadoop (тогда еще версии до 1.0). В очередном новом проекте я столкнулся с платформой Kafka. Сначала меня поразила простота работы с ней, а также ее возможности и гибкость. С каждым разом я находил все новые способы интеграции Kafka в процесс доставки данных проекта. Написание генераторов и потребителей оказалось элементарной задачей, а качество системы благодаря Kafka значительно улучшилось.

Затем я узнал о Kafka Streams. Я сразу сообразил: «Зачем мне лишний кластер для чтения данных из Kafka и немедленной их записи обратно?» Внимательно посмотрев на доступные API, я нашел все, что только нужно было для потоковой обработки: соединения, ассоциативные массивы, операции свертки и группировки. Но что важнее, подход Kafka Streams к добавлению состояния превосходил все решения, с которыми мне только приходилось работать.

Мне всегда нравилось объяснять что-то другим просто и понятно. Так что, когда появилась возможность написать о Kafka Streams, я знал, что эта сложная работа стоит того. Я надеюсь, что мой труд принесет свои плоды и в данной книге мне удастся продемонстрировать, что Kafka Streams — простой и в то же время изящный и эффективный способ осуществления потоковой обработки.

Благодарности

Прежде всего мне хотелось бы поблагодарить свою жену Бет и выразить ей признательность за всю поддержку, которую она мне оказывала в процессе написания книги. Написание книги — задача, занимающая немало времени, и без ее содействия мне никогда бы это не удалось. Бет, ты потрясающая, и я очень рад, что ты — моя жена. Я хотел бы также поблагодарить моих детей, которые терпеливо переносили сидение папы в офисе все выходные напролет, удовлетворяясь туманным ответом «скоро» на вопрос о том, когда же я закончу.

Далее я благодарю Гочжена Вана (Guozhang Wang), Маттиаса Сакса (Matthias Sax), Дэмиана Гая (Damian Guy) и Ино Терезку (Eno Thereska) — основных разработчиков библиотеки Kafka Streams. Без их гениальных озарений и упорного труда библиотека Kafka Streams просто не появилась бы и у меня не было бы возможности написать об этом революционном инструменте.

Я благодарю моего редактора из издательства «Мэннинг», Фрэнсис Лефковиц (Frances Lefkowitz), чьи советы эксперта и бесконечное терпение превратили написание данной книги почти в развлечение. Я также благодарен Джону Хайдаку (John Hyaduck) за меткие технические замечания и Валентину Креттазу (Valentin Crettaz), техническому корректору, за великолепную работу по анализу исходного кода. Кроме того, я говорю спасибо рецензентам, благодаря которым читатели этой книги получили продукт намного лучшего качества, за их непростую работу и бесценные отзывы — это Александер Кутмос (Alexander Koutmos), Боян Джуркович (Bojan Djurkovic), Дилан Скотт (Dylan Scott), Hamish Dickson (Хэмиш Диксон), Джеймс Фроннхофер (James Frohnhofer), Джим Мэнтили (Jim Manthely), Хосе Сан Лиандро (Jose San Leandro), Кэрри Коич (Kerry Koitzsch), Ласло Хегедюш (La'szlo' Hegedu..s), Мэтт Беланже (Matt Belanger), Мишель Аддучи (Michele Adduci), Николас Уайтхед (Nicholas Whitehead), Рикардо Хорхе Перейра Мано (Ricardo Jorge Pereira Mano), Робин Коу (Robin Coe), Сумант Тамбе (Sumant Tambe) и Венката Марапу (Venkata Marrapu).

Наконец, я хотел бы поблагодарить всех разработчиков фреймворка Kafka за создание столь превосходного программного продукта, особенно Джея Крепса (Jay Kreps), Нию Нархид (Neha Narkhede) и Дзюна Рао (Jun Rao), не только за саму идею Kafka в первую очередь, но и за основание компании Confluent — потряса­ющего и вдохновляющего места для работы.

Об этой книге

Я написал книгу Kafka Streams, чтобы познакомить вас с Kafka Streams и, в меньшей степени, вообще научить применять потоковую обработку. Я писал эту книгу с точки зрения парного программирования, представляя, что сижу рядом с вами, пока вы пишете код и изучаете API. Мы начнем с создания простого приложения и будем добавлять в него новый функционал по мере погружения в Kafka Streams. Вы узнаете, как выполнять тестирование и мониторинг, и, наконец, мы завершим книгу созданием продвинутого приложения Kafka Streams.

Кому стоит прочитать эту книгу

Эта книга подойдет для любого разработчика, который хочет разобраться в потоковой обработке. Понимание распределенного программирования поможет лучше изучить Kafka и Kafka Streams. Было бы неплохо знать и сам фреймворк Kafka, но это не обязательно: я расскажу вам все, что нужно. Опытные разработчики Kafka, как и новички, благодаря этой книге освоят создание интересных приложений для потоковой обработки с помощью библиотеки Kafka Streams. Java-разработчики среднего и высокого уровня, уже привычные к таким понятиям, как сериализация, научатся применять свои навыки для создания приложений Kafka Streams. Исходный код книги написан на Java 8 и существенно использует синтаксис лямбда-выражений Java 8, так что умение работать с лямбда-функциями (даже на другом языке программирования) вам пригодится.

Структура издания

Книга состоит из четырех частей, разбитых на девять глав. Часть I познакомит вас с ментальной моделью библиотеки Kafka Streams, чтобы дать комплексное представление о ее функционировании. В этих главах также приводятся основы Kafka для тех, кто ничего о ней не знает или хотел бы освежить свои знания.

• Глава 1 описывает историю вопроса: как и почему потоковая обработка стала необходимым элементом широкомасштабной обработки данных в режиме реального времени. В ней также приводится ментальная модель Kafka Streams. Вместо демонстрации кода я просто опишу в ней, как работает Kafka Streams.

• Глава 2 — руководство для разработчиков, еще не имевших дела с Kafka. Те, у кого уже есть опыт работы с ней, могут эту главу пропустить и перейти непосредственно к Kafka Streams.

В части II я расскажу о Kafka Streams: начну с основ API и постепенно перейду к более продвинутым возможностям.

• В главе 3 вы найдете приложение типа Hello World, а далее и более реалистичный пример: разработку приложения для вымышленного розничного торговца, включая продвинутые возможности.

• В главе 4 обсуждается понятие состояния и объясняется, почему оно иногда необходимо для потоковых приложений. Вы узнаете из нее про реализации хранилищ состояния, а также выполнение соединений в Kafka Streams.

• Глава 5 посвящена дуализму таблиц и потоков, в ней вы познакомитесь с новым понятием: интерфейсом KTable. Если KStream представляет собой поток событий, то KTable — это поток взаимосвязанных событий или поток, предназначенный для обновления записей.

• В главе 6 мы углубимся в низкоуровневый API узлов-обработчиков (Processor API). До сих пор вы имели дело с высокоуровневым предметно-ориентированным языком (Domain Specific Language, DSL), а здесь научитесь использовать API узлов обработки на случай, если вам понадобится писать адаптированные к конкретной задаче части приложения.

В части III мы перейдем от разработки приложений Kafka Streams к управлению библиотекой Kafka Streams.

• Глава 7 рассказывает о тестировании приложений Kafka Streams. Вы научитесь тестировать топологию приложения в целом, осуществлять модульное тестирование отдельного узла обработки, а также использовать встроенный брокер для комплексных тестов.

• Глава 8 охватывает вопросы мониторинга приложений Kafka Streams с целью как оценки времени обработки записей, так и обнаружения потенциальных узких мест.

Часть IV завершает эту книгу, в ней мы займемся разработкой продвинутого приложения на основе Kafka Streams.

• Глава 9 рассказывает об интеграции существующих источников данных с Kafka Streams с помощью фреймворка Kafka Connect. Вы узнаете, как включать таблицы базы данных в потоковое приложение, а затем и как использовать интерактивные запросы для создания визуализаций и приложений — информационных панелей на основе проходящих через Kafka Streams данных без необходимости применения реляционных баз данных. В этой главе вы также познакомитесь с механизмом KSQL, благодаря которому с помощью Kafka можно выполнять непрерывные запросы без написания кода, используя один SQL.

О коде

Эта книга содержит множество примеров исходного кода как в пронумерованных листингах, так и внутри обычного текста. В обоих случаях исходный код отформатирован с помощью такогомоноширинногошрифта, чтобы можно было отличить его от обычного текста.

Во многих случаях исходный код был переформатирован: добавлены разрывы строк и изменены отступы, чтобы оптимально использовать место на странице. В редких случаях даже этого было недостаточно и листинги содержат символы продолжения строки (). Кроме того, из исходного кода часто убраны комментарии, если он описывается в тексте. Многие листинги сопровождают пояснения к коду, подчеркивающие важные понятия.

Наконец, важно отметить, что многие из примеров кода несамодостаточны и содержат лишь фрагменты кода, наиболее важные для обсуждаемого вопроса. Все примеры из книги в их изначальном виде можно найти в прилагаемом к данной книге исходном коде. Он находится на GitHub по адресу https://github.com/bbejeck/kafka-streams-in-action или на сайте издательства: http://www.manning.com/books/kafka-streams-in-action.

Исходный код для книги представляет собой комплексный проект, использу­ющий утилиту сборки Gradle (https://gradle.org). Этот проект можно импортировать в среды разработки IntelliJ или Eclipse с помощью соответствующих команд. Полные инструкции по применению исходного кода и навигации по нему можно найти в прилагаемом файле README.md.

Другие онлайн-ресурсы

• Документация по фреймворку Apache Kafka: https://kafka.apache.org/.

• Документация по платформе Confluent: https://docs.confluent.io/current.

• Документация по библиотеке Kafka Streams: https://docs.confluent.io/current/streams/index.html#kafka-streams.

• Документация по движку KSQL: https://docs.confluent.io/current/ksql.html#ksql.

Об авторе

 

 

Билл Беджек (Bill Bejeck) — участник проекта Kafka, работает в компании Confluent, в команде разработчиков Kafka Streams. Разработкой программного обеспечения он занимается более 13 лет, шесть из которых посвятил исключительно прикладной части, а именно обработке больших объемов данных. Билл также работал в командах, занимающихся вводом и обработкой данных, где использовал Kafka для повышения качества информационных потоков, отправляемых конечным потребителям. Билл — автор книги Getting Started with Google Guava (издательство Packt). Кроме того, он регулярно ведет блог «Беспорядочные размышления о написании кода» (http://codingjunkie.net/).

Часть I. Знакомство с Kafka Streams

В части I этой книги мы поговорим об эре больших данных: как она началась, когда появилась необходимость обрабатывать большие объемы данных и постепенно выросла до принципа потоковой обработки — обработки данных по мере их доступности. Мы также обсудим, что представляет собой библиотека Kafka Streams, и я покажу вам ментальную модель ее функционирования, без какого-либо кода, чтобы вы могли сконцентрироваться на общей картине происходящего. Мы также вкратце рассмотрим платформу Kafka, чтобы ввести вас в курс работы с ней.