Kafka Streams в действии. Приложения и микросервисы для работы в реальном времени
Узнайте как реализовать потоковую обработку на платформе Kafka! В этой книге рассмотрены реальные примеры сбора, преобразования и агрегации данных. Показана работа со множественными процессорами, обработка событий в режиме реального времени. Вы узнаете даже о потоковом SQL с KSQL! Эксплуатация и тестирование, мониторинг и отладка современных распределенных систем - вы получите всю необходимую информацию о самых сложных аспектах потоковой обработки. Kafka Streams API - ключ к эффективному применению Kafka на практике.
Темы, рассматриваемые в книге:
- Использование KStreams API
- Фильтрация, преобразование и дробление данных
- Работа с Processor API
- Интеграция с внешними системами
Предисловие...........................................................................................................15
Введение................................................................................................................17
Благодарности........................................................................................................18
Об этой книге.........................................................................................................19
Кому стоит прочитать эту книгу..............................................................................19
Структура издания..................................................................................................19
О коде....................................................................................................................21
Другие онлайн-ресурсы..........................................................................................21
Об авторе...............................................................................................................22
ЧАСТЬ I. ЗНАКОМСТВО С KAFKA STREAMS
Глава 1. Добро пожаловать в Kafka Streams..........................................................24
1.1. Движение больших данных, и как оно повлияло
на программирование......................................................................................24
1.1.1. Возникновение больших данных.............................................................25
1.1.2. Важнейшие понятия парадигмы MapReduce............................................26
1.1.3. Одной пакетной обработки недостаточно...............................................30
1.2. Знакомство с потоковой обработкой................................................................31
1.3. Обработка транзакции покупки товара............................................................32
1.3.1. Рассматриваем вариант с потоковой обработкой....................................32
1.3.2. Представление требований в виде графа...............................................33
1.4. Транзакция покупки с другой точки зрения......................................................34
1.4.1. Узел-источник.........................................................................................34
1.4.2. Узел маскирования номеров платежных карт..........................................35
1.4.3. Узел паттернов.......................................................................................35
1.4.4. Узел поощрений.....................................................................................35
1.4.5. Узел хранения........................................................................................37
1.5. Kafka Streams как граф узлов обработки..........................................................37
1.6. Использование Kafka Streams для потока данных транзакций покупок.............39
1.6.1. Задаем источник.....................................................................................40
1.6.2. Первый узел-обработчик: маскирование номеров
платежных карт......................................................................................40
1.6.3. Второй узел-обработчик: паттерны покупок...........................................41
1.6.4. Третий узел-обработчик: поощрение покупателей..................................43
1.6.5. Четвертый узел-обработчик: запись данных о покупках.........................44
Резюме...................................................................................................................45
Глава 2. Kafka в двух словах.................................................................................46
2.1. Проблема данных.............................................................................................46
2.2. Использование Kafka для обработки данных....................................................47
2.2.1. Первоначальная платформа данных компании ZMart..............................47
2.2.2. Концентратор информации о транзакциях продаж
на основе Kafka.......................................................................................48
2.3. Архитектура Kafka............................................................................................50
2.3.1. Kafka — это брокер сообщений...............................................................50
2.3.2. Kafka — это журнал................................................................................51
2.3.3. Функционирование журналов в Kafka......................................................52
2.3.4. Kafka и секции........................................................................................53
2.3.5. Секции группируют данные по ключу.....................................................54
2.3.6. Написание пользовательского класса секционирования..........................55
2.3.7. Настройка пользовательского секционирования.....................................56
2.3.8. Выбор правильного числа секций...........................................................57
2.3.9. Распределенный журнал.........................................................................57
2.3.10. ZooKeeper: ведущие/ведомые брокеры и репликация............................58
2.3.11. Apache ZooKeeper..................................................................................59
2.3.12. Выборы контроллера............................................................................59
2.3.13. Репликация...........................................................................................60
2.3.14. Обязанности контроллера.....................................................................61
2.3.15. Управление журналами.........................................................................62
2.3.16. Удаление журналов..............................................................................62
2.3.17. Сжатие журналов..................................................................................64
2.4. Отправка сообщений с помощью генераторов..................................................65
2.4.1. Свойства генераторов.............................................................................68
2.4.2. Указание секции или метки даты/времени..............................................69
2.4.3. Указание секции.....................................................................................69
2.4.4. Метки даты/времени в Kafka...................................................................70
2.5. Чтение сообщений с помощью потребителей...................................................70
2.5.1. Управление смещениями........................................................................71
2.5.2. Автоматическая фиксация смещений......................................................73
2.5.3. Фиксация смещения вручную..................................................................73
2.5.4. Создание потребителя............................................................................73
2.5.5. Потребители и секции............................................................................74
2.5.6. Перебалансировка..................................................................................74
2.5.7. Более точное назначение топиков/секций потребителям........................75
2.5.8. Пример потребителя...............................................................................75
2.6. Установка и запуск Kafka.................................................................................76
2.6.1. Локальные настройки Kafka....................................................................77
2.6.2. Запуск Kafka...........................................................................................77
2.6.3. Отправляем наше первое сообщение......................................................79
Резюме...................................................................................................................81
ЧАСТЬ II. РАЗРАБОТКА С ПОМОЩЬЮ KAFKA STREAMS
Глава 3. Разработка приложений Kafka Streams....................................................84
3.1. API потоковых узлов-обработчиков..................................................................84
3.2. Программа Hello World для Kafka Streams.........................................................85
3.2.1. Создание топологии для Yelling...............................................................86
3.2.2. Настройка Kafka Streams.........................................................................90
3.2.3. Создание объектов Serde........................................................................91
3.3. Работа с данными покупателей........................................................................93
3.3.1. Конструирование топологии...................................................................94
3.3.2. Создание пользовательского объекта Serde..........................................101
3.4. Интерактивная разработка.............................................................................103
3.5. Дальнейшие шаги..........................................................................................105
3.5.1. Новые требования................................................................................105
3.5.2. Сохранение записей вне Kafka..............................................................112
Резюме.................................................................................................................114
Глава 4. Потоки данных и состояние...................................................................115
4.1. Обработка событий........................................................................................116
4.2. Операции с сохранением состояния в Kafka Streams......................................117
4.2.1. Узел-обработчик transformValues..........................................................118
4.2.2. Поощрения покупателей с сохранением состояния...............................119
4.2.3. Инициализация преобразователя значений..........................................121
4.2.4. Отображение объекта Purchase в объект RewardAccumulator
на основе состояния.............................................................................121
4.2.5. Обновление узла-обработчика поощрений............................................126
4.3. Использование хранилищ состояния для поиска и ранее
просмотренные данные..................................................................................128
4.3.1. Локальность данных.............................................................................128
4.3.2. Восстановление после сбоя и отказоустойчивость................................130
4.3.3. Использование хранилищ состояния в Kafka Streams............................131
4.3.4. Другие поставщики хранилищ пар «ключ/значение»............................132
4.3.5. Отказоустойчивость StateStore..............................................................132
4.3.6. Настройки топиков журналов изменений..............................................132
4.4. Получение дополнительной информации путем соединения
потоков данных.............................................................................................134
4.4.1. Подготовка данных...............................................................................136
4.4.2. Генерация ключей с идентификаторами покупателей
для соединения....................................................................................137
4.4.3. Конструирование соединения...............................................................139
4.4.4. Другие варианты соединений...............................................................144
4.5. Метки даты/времени в Kafka Streams.............................................................146
4.5.1. Готовые реализации интерфейса TimestampExtractor............................149
4.5.2. Класс WallclockTimestampExtractor.........................................................150
4.5.3. Пользовательская реализация интерфейса
TimestampExtractor................................................................................150
4.5.4. Указываем, какой TimestampExtractor использовать..............................151
Резюме.................................................................................................................152
Глава 5. API KTable..............................................................................................153
5.1. Взаимосвязь между потоками данных и таблицами........................................154
5.1.1. Поток записей.......................................................................................154
5.1.2. Обновления записей (журнал изменений).............................................156
5.1.3. Поток событий по сравнению с потоком обновлений............................158
5.2. Обновления записей и настройки KTable........................................................160
5.2.1. Задание размера буфера кэша..............................................................161
5.2.2. Задание интервала фиксации...............................................................162
5.3. Агрегирование и оконные операции...............................................................163
5.3.1. Агрегирование объема продаж акций по отраслям
промышленности..................................................................................164
5.3.2. Оконные операции................................................................................169
5.3.3. Соединение объектов KStream и KTable.................................................176
5.3.4. Объекты GlobalKTable............................................................................179
5.3.5. Доступное для запросов состояние.......................................................181
Резюме.................................................................................................................182
Глава 6. API узлов-обработчиков.........................................................................184
6.1. Компромисс между повышением уровня абстракции и расширением возможностей контроля.................................................................................184
6.2. Создание топологии с использованием источников,
узлов-обработчиков и стоков.........................................................................185
6.2.1. Добавление узла-источника..................................................................186
6.2.2. Добавление узла-обработчика..............................................................187
6.2.3. Добавление узла-стока.........................................................................190
6.3. Углубляемся в API узлов-обработчиков на примере узла
биржевой аналитики......................................................................................191
6.3.1. Узел-обработчик показателей акций.....................................................193
6.3.2. Метод process().....................................................................................196
6.3.3. Выполнение пунктуатора......................................................................198
6.4. Узел совместной группировки........................................................................199
6.4.1. Создание узла совместной группировки................................................201
6.5. Интеграция API узлов-обработчиков и API Kafka Streams...............................211
Резюме.................................................................................................................212
ЧАСТЬ III. АДМИНИСТРИРОВАНИЕ KAFKA STREAMS
Глава 7. Мониторинг и производительность........................................................214
7.1. Основы мониторинга Kafka.............................................................................214
7.1.1. Оценка производительности потребителей и генераторов....................215
7.1.2. Проверка отставания потребителя........................................................217
7.1.3. Перехват информации о поведении генераторов
и потребителей.....................................................................................218
7.2. Метрики приложения.....................................................................................222
7.2.1. Настройки метрик.................................................................................224
7.2.2. Как получить доступ к собранным метрикам.........................................225
7.2.3. Использование JMX...............................................................................225
7.2.4. Просмотр метрик...................................................................................230
7.3. Дополнительные методики отладки Kafka Streams..........................................231
7.3.1. Просмотр структуры приложения..........................................................231
7.3.2. Получение уведомлений о различных состояниях
приложения..........................................................................................233
7.3.3. Использование интерфейса StateListener...............................................234
7.3.4. Прослушиватель восстановления состояния..........................................236
7.3.5. Обработчик неперехваченных исключений...........................................239
Резюме.................................................................................................................240
Глава 8. Тестирование приложения Kafka Streams...............................................241
8.1. Тестирование топологии................................................................................242
8.1.1. Создание теста.....................................................................................245
8.1.2. Тестирование хранилища состояния в топологии..................................247
8.1.3. Тестирование узлов-обработчиков и преобразователей........................248
8.2. Комплексное тестирование............................................................................251
8.2.1. Создание комплексного теста...............................................................252
Резюме.................................................................................................................257
ЧАСТЬ IV. ПЕРЕДОВЫЕ ВОЗМОЖНОСТИ KAFKA STREAMS
Глава 9. Создание продвинутых приложений с помощью Kafka Streams..............260
9.1. Интеграция Kafka с другими источниками данных..........................................261
9.1.1. Интеграция данных с помощью Kafka Connect.......................................262
9.1.2. Настройка Kafka Connect.......................................................................263
9.1.3. Преобразование данных.......................................................................265
9.2. Выбрасываем базу данных за борт.................................................................269
9.2.1. Как работают интерактивные запросы..................................................272
9.2.2. Распределение хранилищ состояния.....................................................273
9.2.3. Настройка и обнаружение распределенного хранилища
состояния.............................................................................................274
9.2.4. Написание кода для интерактивных запросов.......................................276
9.2.5. Внутри сервера запросов......................................................................278
9.3. KSQL..............................................................................................................282
9.3.1. Потоки и таблицы KSQL........................................................................283
9.3.2. Архитектура KSQL.................................................................................283
9.3.3. Установка и запуск KSQL.......................................................................285
9.3.4. Создание потока данных KSQL..............................................................286
9.3.5. Написание KSQL-запроса.......................................................................288
9.3.6. Создание таблицы KSQL........................................................................288
9.3.7 Настройка KSQL.....................................................................................289
Резюме.................................................................................................................290
ПРИЛОЖЕНИЯ
Приложение A. Дополнительная информация о настройках...............................292
А.1. Ограничение количества перебалансировок при запуске приложения...........292
А.2. Устойчивость к отказам брокеров..................................................................293
А.3. Обработка ошибок десериализации...............................................................293
А.4. Масштабирование приложения......................................................................294
А.5. Конфигурация RocksDB..................................................................................295
А.6. Заблаговременное создание топиков повторного секционирования...............295
А.7. Настройка внутренних топиков......................................................................296
А.8. Перезапуск приложения Kafka Streams..........................................................297
А.9. Очистка локального состояния......................................................................298
Приложение Б. Строго однократная доставка....................................................299