SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Kafka Streams
В мире облачной Весны
Kafka Streams
В мире облачной Весны
Обо мне, кратко
• 7 лет мучаю спину в IT
• 100% из них работаю с IoT и Java
• Увлекаюсь урбанистикой и созданием продуктов
Почему “Kafka”?
О чём поговорим:
• Что вообще такое эти ваши Kafka Streams?
• Архитектура приложения со стримами
• Live coding: Streams, Spring, RaspberryPi и IoT
• Stateful & stateless обработка
• Окна и агрегация
• А как всё это работает со Спрингом?
• Как течёт время
• Как правильно деплоить
Что вообще такое эти ваши Kafka Streams?
Kafka Streams - это клиентская библиотека для обработки и анализа
данных, хранящихся в Kafka. Она основана на важных концепциях
потоковой обработки, таких как правильное различие между временем
события и временем обработки, поддержка окон, а также простое, но
эффективное управление запросами состояния приложения в режиме
реального времени…
TL;DR:
• Kafka Streams – это просто библиотека живущая в твоём приложении;
• API для обработки данных в Kafka;
• Содержит решения проблем потоковой обработки: агрегации,
состояния, восстановление, масштабирование и т.д.
Use cases
• Анализ активности на сайте, в приложении и т.д.
• Обработка и агрегация логов
• Потоковая генерация контента
• You name it!
Логи
Из коробки:
• Fault-tolerance
• Scaling
• Exactly-once processing semantics (default is at-least-once)
• Операции агрегации: windowing, count, …
• Late-arrival records handling
Архитектура
• Processor topology – граф (DAG) задающий логику обработки
• Stream – последовательность сообщений в топике Kafka
• Processor – узел графа topology обрабатывающий сообщения
Kafka topic Kafka topic
Kafka topic
Kafkatopic
Топологии? Где тут мой сервис на Spring Boot?!
Топологии? Где тут мой сервис на Spring Boot?!
Orange frame = topology and microservice boundaries
Как-то сложно, требуем starter!
Spring Cloud Stream Kafka Streams
• Есть starter!
• Под капотом: библиотеки Kafka Streams и Spring for Kafka
• Самостоятельно создаёт и настраивает Topology
• С недавних пор умеет в функциональщину
Stop talking, start coding!
Weather
sensors
REST API
application1
Kafka Streams
application
HTTP
Kafka
Собирает температуру
и влажность.
Отправляет
измерения по REST API
Собирает измерения и
отправляет в Кафку
(потенциально делает
AAA, enrichment и т.п.)
1Возможно убрать это звено и писать сразу в Kafka но эта архитектура ещё покрывает сбор метрик с фронта
Обрабатывает данные
и триггерит алерты
More in a while
Start coding: bootstrap the project
Kafka Streams application zoomed in
Weather
sensor
REST API
Kafka Streams
application
Calculate average for
5 seconds
Fire alert if threshold
reached
KStream
KStream
KTable
Duality of Streams and Tables
Back to code: writing ”average” processorBack to code: writing ”average” processor
Windows
Data processing types
Два вида обработки данных:
• Stateless:
• Отравить сообщение в другую систему
• Записать лог
• Примеры операторов: filter, map, forEach, print
• Stateful:
• Посчитать количество сообщений
• Объедение нескольких стримов
• В целом любая операция в которой нужно «запомнить» что-то вне границ одного
сообщения
• Примеры операторов: aggregate, count, reduce
• Хранят состояние в state store
State stores
• Хранятся в локальной файловой системе используя RocksDB, по
умолчанию в папке /tmp
• Дублируются в «changelog topic» в Kafka чтобы восстановить
локальную копию после падения
• State store идентифицируются приложением используя параметр
“application.id”
Back to code: finishing up
- Заканчиваем ”average” processor
- Пишем “alerts” processor
- Запускаем!
The different concepts of time in Kafka Streams
Подходы к заданию времени сообщения:
• Event time – момент времени когда событие произошло на
источнике (e.g. например время сбора показаний на сенсоре )
• Processing time – момент времени когда сообщение получено
приложением-обработчиком
• Ingestion time – момент времени когда сообщение попало в
топик Kafka
В Kafka Streams, вы выбираете подход реализуя интерфейс
TimestampExtractor
Stream time
As a result, time will only advance when a new record arrives at the
processor. This concept is called Stream time.
Testing the offline scenario
The data collected from the IoT sensor during a loss of connectivity must be processed correctly!
Expired window, why?
• Stream time is tracked per partition not per key!
• There is KIP-540 to address this problem
So Kafka Streams doesn’t work for IoT?*
* and other cases when we need to process offline-generated data
Expired window: solutions
• Custom operator that implements enhanced window
expiration/suppress logic
• Wait for the solution from the Kafka team (see KIP-540)
Expired window: ещё
одно решение
Create as many partitions as there are
keys and make sure your partitioning
strategy is one-to-one
Things to know when deploying to cloud
• Spring Cloud Actuator’s /health endpoint tracks Kafka Streams
threads liveness starting from version 3.0.0 only
• Better to have a same persistent /tmp folder between application
redeploys as it help Kafka Streams to recreate state stores
immediately as opposed to a rebuild from the changelog topic
• Consider deploying to the same node
• Use StatefulSet in Kubernetes
Thanks J
My Telegram channelUseful Kafka Streams links GitHub project

Weitere ähnliche Inhalte

Was ist angesagt?

Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"railsclub
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Uptime Community
 
Потоковая обработка событий клиентов и их отображение на интерактивной карте
Потоковая обработка событий клиентов и их отображение на интерактивной картеПотоковая обработка событий клиентов и их отображение на интерактивной карте
Потоковая обработка событий клиентов и их отображение на интерактивной картеVoximplant
 
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС2ГИС Технологии
 
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".Badoo Development
 
Rambler.iOS #2: Практика применения BaaS в мобильных сервисах
Rambler.iOS #2: Практика применения BaaS в мобильных сервисахRambler.iOS #2: Практика применения BaaS в мобильных сервисах
Rambler.iOS #2: Практика применения BaaS в мобильных сервисахRAMBLER&Co
 
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...Ontico
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...AvitoTech
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks ServerLevon Avakyan
 
Rambler.iOS #2: Введение в RestKit
Rambler.iOS #2: Введение в RestKitRambler.iOS #2: Введение в RestKit
Rambler.iOS #2: Введение в RestKitRAMBLER&Co
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Ontico
 
Onliner development workflow
Onliner development workflowOnliner development workflow
Onliner development workflowAlexander Katynia
 
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
Apache Kafka Cluster - Russian
Apache Kafka Cluster - RussianApache Kafka Cluster - Russian
Apache Kafka Cluster - Russianconfluent
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonSlach
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)Ontico
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Ontico
 
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...Yehor Herasymchuk
 
Как справиться с микросервисом
Как справиться с микросервисомКак справиться с микросервисом
Как справиться с микросервисомmimikadze
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Ontico
 

Was ist angesagt? (20)

Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
 
Потоковая обработка событий клиентов и их отображение на интерактивной карте
Потоковая обработка событий клиентов и их отображение на интерактивной картеПотоковая обработка событий клиентов и их отображение на интерактивной карте
Потоковая обработка событий клиентов и их отображение на интерактивной карте
 
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
 
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
 
Rambler.iOS #2: Практика применения BaaS в мобильных сервисах
Rambler.iOS #2: Практика применения BaaS в мобильных сервисахRambler.iOS #2: Практика применения BaaS в мобильных сервисах
Rambler.iOS #2: Практика применения BaaS в мобильных сервисах
 
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
Lambda architecture для realtime-аналитики — риски и преимущества / Николай Г...
 
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
Кортунов Никита. Как ускорить разработку приложений или есть ли жизнь после P...
 
Надежность World of Tanks Server
Надежность World of Tanks ServerНадежность World of Tanks Server
Надежность World of Tanks Server
 
Rambler.iOS #2: Введение в RestKit
Rambler.iOS #2: Введение в RestKitRambler.iOS #2: Введение в RestKit
Rambler.iOS #2: Введение в RestKit
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
 
Onliner development workflow
Onliner development workflowOnliner development workflow
Onliner development workflow
 
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
Apache Kafka Cluster - Russian
Apache Kafka Cluster - RussianApache Kafka Cluster - Russian
Apache Kafka Cluster - Russian
 
мониторинг производительности Web приложений на python
мониторинг производительности Web приложений на pythonмониторинг производительности Web приложений на python
мониторинг производительности Web приложений на python
 
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
BigПочта: как мы строили DataLake в Почте России / Алексей Вовченко (Luxoft)
 
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
Gobblin как ETL-фреймворк / Иван Ахлестин (Rambler&Co)
 
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
2021.09.04 PHP FWDays. Our experience of transferring Laravel microservices t...
 
Как справиться с микросервисом
Как справиться с микросервисомКак справиться с микросервисом
Как справиться с микросервисом
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
 

Ähnlich wie JavaFest. Дмитрий Сергеев. Data processing with Kafka Streams and Spring Framework

Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковMaxim Zinal
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Ontico
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Эпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияЭпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияVitebsk Miniq
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийАлександр Ежов
 
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Ontico
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Построение облачных процессов с помощью Mistral
Построение облачных процессов с помощью MistralПостроение облачных процессов с помощью Mistral
Построение облачных процессов с помощью MistralCodeFest
 
Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...
Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...
Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...Cisco Russia
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBASlach
 
Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАндрей Федоровский
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Fwdays
 

Ähnlich wie JavaFest. Дмитрий Сергеев. Data processing with Kafka Streams and Spring Framework (20)

Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаковIBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
IBM Cloudant и Apache CouchDB: NoSQL базы данных эпохи облаков
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Эпохи в разработке программного обеспечения
Эпохи в разработке программного обеспеченияЭпохи в разработке программного обеспечения
Эпохи в разработке программного обеспечения
 
Sivko
SivkoSivko
Sivko
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
 
Middleware
MiddlewareMiddleware
Middleware
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
Гетерогенные сервисы для highload-проектов на примере Imhonet.ru и 4talk.im, ...
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Построение облачных процессов с помощью Mistral
Построение облачных процессов с помощью MistralПостроение облачных процессов с помощью Mistral
Построение облачных процессов с помощью Mistral
 
Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...
Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...
Применение WAN Automation Engine для предоставления новых услуг и онлайн-опт...
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
 
Асинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, CometАсинхронная обработка данных: RabbitMQ, Comet
Асинхронная обработка данных: RabbitMQ, Comet
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
 

Mehr von FestGroup

JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)
JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)
JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)FestGroup
 
JavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонкеJavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонкеFestGroup
 
JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...
JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...
JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...FestGroup
 
JavaFest. Philipp Krenn. Scale Elasticsearch for Your Java Applications
JavaFest. Philipp Krenn. Scale Elasticsearch for Your Java ApplicationsJavaFest. Philipp Krenn. Scale Elasticsearch for Your Java Applications
JavaFest. Philipp Krenn. Scale Elasticsearch for Your Java ApplicationsFestGroup
 
JavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s Guide
JavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s GuideJavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s Guide
JavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s GuideFestGroup
 
JavaFest. Денис Макогон. 6 заблуждений относительно современной Java
JavaFest. Денис Макогон. 6 заблуждений относительно современной JavaJavaFest. Денис Макогон. 6 заблуждений относительно современной Java
JavaFest. Денис Макогон. 6 заблуждений относительно современной JavaFestGroup
 
JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...
JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...
JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...FestGroup
 
JavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVM
JavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVMJavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVM
JavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVMFestGroup
 
JavaFest. Антон Лемешко. Model-Driven Development in the Open Java Universe
JavaFest. Антон Лемешко. Model-Driven Development in the Open Java UniverseJavaFest. Антон Лемешко. Model-Driven Development in the Open Java Universe
JavaFest. Антон Лемешко. Model-Driven Development in the Open Java UniverseFestGroup
 
JavaFest. Nanne Baars. Web application security for developers
JavaFest. Nanne Baars. Web application security for developersJavaFest. Nanne Baars. Web application security for developers
JavaFest. Nanne Baars. Web application security for developersFestGroup
 

Mehr von FestGroup (10)

JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)
JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)
JavaFest. Барух Садогурский. DevOps для разработчиков (или против них?!)
 
JavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонкеJavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонке
 
JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...
JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...
JavaFest. Cedrick Lunven. Build APIS with SpringBoot - REST, GRPC, GRAPHQL wh...
 
JavaFest. Philipp Krenn. Scale Elasticsearch for Your Java Applications
JavaFest. Philipp Krenn. Scale Elasticsearch for Your Java ApplicationsJavaFest. Philipp Krenn. Scale Elasticsearch for Your Java Applications
JavaFest. Philipp Krenn. Scale Elasticsearch for Your Java Applications
 
JavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s Guide
JavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s GuideJavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s Guide
JavaFest. Grzegorz Piwowarek. Hazelcast - Hitchhiker’s Guide
 
JavaFest. Денис Макогон. 6 заблуждений относительно современной Java
JavaFest. Денис Макогон. 6 заблуждений относительно современной JavaJavaFest. Денис Макогон. 6 заблуждений относительно современной Java
JavaFest. Денис Макогон. 6 заблуждений относительно современной Java
 
JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...
JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...
JavaFest. Taras Boychuk. There is always a choice. Spring Data JDBC vs. Hiber...
 
JavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVM
JavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVMJavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVM
JavaFest. Вадим Казулькин. Projects Valhalla, Loom and GraalVM
 
JavaFest. Антон Лемешко. Model-Driven Development in the Open Java Universe
JavaFest. Антон Лемешко. Model-Driven Development in the Open Java UniverseJavaFest. Антон Лемешко. Model-Driven Development in the Open Java Universe
JavaFest. Антон Лемешко. Model-Driven Development in the Open Java Universe
 
JavaFest. Nanne Baars. Web application security for developers
JavaFest. Nanne Baars. Web application security for developersJavaFest. Nanne Baars. Web application security for developers
JavaFest. Nanne Baars. Web application security for developers
 

JavaFest. Дмитрий Сергеев. Data processing with Kafka Streams and Spring Framework

  • 1. Kafka Streams В мире облачной Весны Kafka Streams В мире облачной Весны
  • 2. Обо мне, кратко • 7 лет мучаю спину в IT • 100% из них работаю с IoT и Java • Увлекаюсь урбанистикой и созданием продуктов
  • 4. О чём поговорим: • Что вообще такое эти ваши Kafka Streams? • Архитектура приложения со стримами • Live coding: Streams, Spring, RaspberryPi и IoT • Stateful & stateless обработка • Окна и агрегация • А как всё это работает со Спрингом? • Как течёт время • Как правильно деплоить
  • 5. Что вообще такое эти ваши Kafka Streams? Kafka Streams - это клиентская библиотека для обработки и анализа данных, хранящихся в Kafka. Она основана на важных концепциях потоковой обработки, таких как правильное различие между временем события и временем обработки, поддержка окон, а также простое, но эффективное управление запросами состояния приложения в режиме реального времени… TL;DR: • Kafka Streams – это просто библиотека живущая в твоём приложении; • API для обработки данных в Kafka; • Содержит решения проблем потоковой обработки: агрегации, состояния, восстановление, масштабирование и т.д.
  • 6. Use cases • Анализ активности на сайте, в приложении и т.д. • Обработка и агрегация логов • Потоковая генерация контента • You name it! Логи
  • 7. Из коробки: • Fault-tolerance • Scaling • Exactly-once processing semantics (default is at-least-once) • Операции агрегации: windowing, count, … • Late-arrival records handling
  • 8. Архитектура • Processor topology – граф (DAG) задающий логику обработки • Stream – последовательность сообщений в топике Kafka • Processor – узел графа topology обрабатывающий сообщения Kafka topic Kafka topic Kafka topic Kafkatopic
  • 9. Топологии? Где тут мой сервис на Spring Boot?!
  • 10. Топологии? Где тут мой сервис на Spring Boot?! Orange frame = topology and microservice boundaries
  • 12. Spring Cloud Stream Kafka Streams • Есть starter! • Под капотом: библиотеки Kafka Streams и Spring for Kafka • Самостоятельно создаёт и настраивает Topology • С недавних пор умеет в функциональщину
  • 13. Stop talking, start coding! Weather sensors REST API application1 Kafka Streams application HTTP Kafka Собирает температуру и влажность. Отправляет измерения по REST API Собирает измерения и отправляет в Кафку (потенциально делает AAA, enrichment и т.п.) 1Возможно убрать это звено и писать сразу в Kafka но эта архитектура ещё покрывает сбор метрик с фронта Обрабатывает данные и триггерит алерты More in a while
  • 14. Start coding: bootstrap the project
  • 15. Kafka Streams application zoomed in Weather sensor REST API Kafka Streams application Calculate average for 5 seconds Fire alert if threshold reached KStream KStream KTable
  • 16. Duality of Streams and Tables
  • 17. Back to code: writing ”average” processorBack to code: writing ”average” processor
  • 19. Data processing types Два вида обработки данных: • Stateless: • Отравить сообщение в другую систему • Записать лог • Примеры операторов: filter, map, forEach, print • Stateful: • Посчитать количество сообщений • Объедение нескольких стримов • В целом любая операция в которой нужно «запомнить» что-то вне границ одного сообщения • Примеры операторов: aggregate, count, reduce • Хранят состояние в state store
  • 20. State stores • Хранятся в локальной файловой системе используя RocksDB, по умолчанию в папке /tmp • Дублируются в «changelog topic» в Kafka чтобы восстановить локальную копию после падения • State store идентифицируются приложением используя параметр “application.id”
  • 21. Back to code: finishing up - Заканчиваем ”average” processor - Пишем “alerts” processor - Запускаем!
  • 22. The different concepts of time in Kafka Streams Подходы к заданию времени сообщения: • Event time – момент времени когда событие произошло на источнике (e.g. например время сбора показаний на сенсоре ) • Processing time – момент времени когда сообщение получено приложением-обработчиком • Ingestion time – момент времени когда сообщение попало в топик Kafka В Kafka Streams, вы выбираете подход реализуя интерфейс TimestampExtractor
  • 23. Stream time As a result, time will only advance when a new record arrives at the processor. This concept is called Stream time.
  • 24. Testing the offline scenario The data collected from the IoT sensor during a loss of connectivity must be processed correctly!
  • 25. Expired window, why? • Stream time is tracked per partition not per key! • There is KIP-540 to address this problem
  • 26. So Kafka Streams doesn’t work for IoT?* * and other cases when we need to process offline-generated data
  • 27. Expired window: solutions • Custom operator that implements enhanced window expiration/suppress logic • Wait for the solution from the Kafka team (see KIP-540)
  • 28. Expired window: ещё одно решение Create as many partitions as there are keys and make sure your partitioning strategy is one-to-one
  • 29. Things to know when deploying to cloud • Spring Cloud Actuator’s /health endpoint tracks Kafka Streams threads liveness starting from version 3.0.0 only • Better to have a same persistent /tmp folder between application redeploys as it help Kafka Streams to recreate state stores immediately as opposed to a rebuild from the changelog topic • Consider deploying to the same node • Use StatefulSet in Kubernetes
  • 30. Thanks J My Telegram channelUseful Kafka Streams links GitHub project