Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

В процессе доклада напишем приложение, использующее Kafka Streams и Spring, в реальном времени обрабатывающее данные датчика погоды Raspberry Pi. Разберёмся как течёт время в Kafka Streams и почему это грозит вам бессонными ночами debug’a. Вы узнаете как обрабатывать потоки данных в Kafka c помощью библиотеки Kafka Streams и абстракций Spring Cloud. Мы обсудим окна, агрегации, графы обработки данных и топологии. Напоследок, обсудим нюансы деплоя Kafka Streams приложений.

  • Be the first to comment

  • Be the first to like this

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

  1. 1. Kafka Streams В мире облачной Весны Kafka Streams В мире облачной Весны
  2. 2. Обо мне, кратко • 7 лет мучаю спину в IT • 100% из них работаю с IoT и Java • Увлекаюсь урбанистикой и созданием продуктов
  3. 3. Почему “Kafka”?
  4. 4. О чём поговорим: • Что вообще такое эти ваши Kafka Streams? • Архитектура приложения со стримами • Live coding: Streams, Spring, RaspberryPi и IoT • Stateful & stateless обработка • Окна и агрегация • А как всё это работает со Спрингом? • Как течёт время • Как правильно деплоить
  5. 5. Что вообще такое эти ваши Kafka Streams? Kafka Streams - это клиентская библиотека для обработки и анализа данных, хранящихся в Kafka. Она основана на важных концепциях потоковой обработки, таких как правильное различие между временем события и временем обработки, поддержка окон, а также простое, но эффективное управление запросами состояния приложения в режиме реального времени… TL;DR: • Kafka Streams – это просто библиотека живущая в твоём приложении; • API для обработки данных в Kafka; • Содержит решения проблем потоковой обработки: агрегации, состояния, восстановление, масштабирование и т.д.
  6. 6. Use cases • Анализ активности на сайте, в приложении и т.д. • Обработка и агрегация логов • Потоковая генерация контента • You name it! Логи
  7. 7. Из коробки: • Fault-tolerance • Scaling • Exactly-once processing semantics (default is at-least-once) • Операции агрегации: windowing, count, … • Late-arrival records handling
  8. 8. Архитектура • Processor topology – граф (DAG) задающий логику обработки • Stream – последовательность сообщений в топике Kafka • Processor – узел графа topology обрабатывающий сообщения Kafka topic Kafka topic Kafka topic Kafkatopic
  9. 9. Топологии? Где тут мой сервис на Spring Boot?!
  10. 10. Топологии? Где тут мой сервис на Spring Boot?! Orange frame = topology and microservice boundaries
  11. 11. Как-то сложно, требуем starter!
  12. 12. Spring Cloud Stream Kafka Streams • Есть starter! • Под капотом: библиотеки Kafka Streams и Spring for Kafka • Самостоятельно создаёт и настраивает Topology • С недавних пор умеет в функциональщину
  13. 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. 14. Start coding: bootstrap the project
  15. 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. 16. Duality of Streams and Tables
  17. 17. Back to code: writing ”average” processorBack to code: writing ”average” processor
  18. 18. Windows
  19. 19. Data processing types Два вида обработки данных: • Stateless: • Отравить сообщение в другую систему • Записать лог • Примеры операторов: filter, map, forEach, print • Stateful: • Посчитать количество сообщений • Объедение нескольких стримов • В целом любая операция в которой нужно «запомнить» что-то вне границ одного сообщения • Примеры операторов: aggregate, count, reduce • Хранят состояние в state store
  20. 20. State stores • Хранятся в локальной файловой системе используя RocksDB, по умолчанию в папке /tmp • Дублируются в «changelog topic» в Kafka чтобы восстановить локальную копию после падения • State store идентифицируются приложением используя параметр “application.id”
  21. 21. Back to code: finishing up - Заканчиваем ”average” processor - Пишем “alerts” processor - Запускаем!
  22. 22. The different concepts of time in Kafka Streams Подходы к заданию времени сообщения: • Event time – момент времени когда событие произошло на источнике (e.g. например время сбора показаний на сенсоре ) • Processing time – момент времени когда сообщение получено приложением-обработчиком • Ingestion time – момент времени когда сообщение попало в топик Kafka В Kafka Streams, вы выбираете подход реализуя интерфейс TimestampExtractor
  23. 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. 24. Testing the offline scenario The data collected from the IoT sensor during a loss of connectivity must be processed correctly!
  25. 25. Expired window, why? • Stream time is tracked per partition not per key! • There is KIP-540 to address this problem
  26. 26. So Kafka Streams doesn’t work for IoT?* * and other cases when we need to process offline-generated data
  27. 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. 28. Expired window: ещё одно решение Create as many partitions as there are keys and make sure your partitioning strategy is one-to-one
  29. 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. 30. Thanks J My Telegram channelUseful Kafka Streams links GitHub project

×