Мы уже рассказывали про Apache Kafka Streams API. В продолжение этой темы, сегодня отметим ключевые преимущества этой технологии, особенно важные для DevOps-инженера и разработчика Big Data систем, а также поговорим про некоторые недостатки и возможные альтернативы Кафка Стримс API.
5 главных достоинств Apache Kafka Streams API
Для DevOps-инженера Big Data систем наиболее значимыми являются следующие преимущества Apache Kafka Streams API [1]:
- Мощность
- масштабируемость, эластичность и отказоустойчивость распределенных приложений;
- поддержка семантики однократной обработки (exactly-once);
- обработка с сохранением (statefull) и без сохранения состояний (stateless);
- обработка событий во времени с использованием окон, объединений, агрегаций;
- поддержка интерактивных запросов для объединения потоков и баз данных;
- сочетание максимального контроля и гибкости: наличие декларативного и функционального API высокого уровня (DSL, Domain Specific Language, похожего на разработку в Spark), а также императивного API более низкого уровня абстракции, напоминающий Apache Storm.
- Легковесность
- низкий барьер входа;
- одинаково высокая приспособленность к задачам малых, средних, крупных и очень масштабных случаев;
- локальная (внекластерная) обработка;
- масштабирование от локальной разработки до крупных production-систем;
- отсутствие внешних зависимостей – не требуется дополнительных сред обработки информации, кроме самой Apache Kafka.
- Полная интеграция
- 100%-ная совместимость с Apache Kafka11.0 и 1.0.0;
- легкая интеграция со сторонними приложениями и микросервисами;
- отсутствие строгих правил упаковки, развертывания и мониторинга приложений;
- универсальность среды исполнения и разработки: локальные, публичные и частные облака, контейнеры и пр.;
- интеграция с базами данных через CDC-технологию (change data capture), позволяющую отслеживать изменения в базе данных с помощью Kafka Connect.
- Real-time
- задержка обработки всего 1 миллисекунда;
- единоразовая запись (без разбиения на микропакеты);
- обработка опоздавших и неупорядоченных данные;
- высокая производительность.
- Безопасность
- шифрование передаваемых данных;
- аутентификация и авторизация.
Пара недостатков и альтернативы API-интерфейса Кафка Стримс
Все вышеперечисленные достоинства дополняются следующими минусами [2]:
- отсутствие автоматизированных средств рефакторинга кода, что увеличивает нагрузку на DevOps-инженера и разработчика, которые хотят писать простые для понимания программы;
- автоматическая генерация внутренних хранилищ для состояний приложения в топиках Кафка, что может привести к увеличению объема обрабатываемых данных. Однако, при этом stateless-приложения остаются полностью устойчивыми.
Таким образом, несмотря на отмеченные недостатки, API-интерфейс Kafka Streams – это отличный инструмент для создания критически важных приложений для обработки потоков и микросервисов.
Отметим, что альтернативой API-интерфейса Кафка Стримс может выступать KSQL – SQL-подобный интерфейс потоковой обработки данных, хранящихся Kafka. KSQL позволяет реализовать аналитические запросы к данным (фильтрация, преобразование, агрегация, соединение, оконные операции и сессии) в режиме онлайн без использования языков программирования. Однако, при необходимости постоянного выполнения сложных по своей логике и структуре действий с информационными потоками, рационально использовать Apache Kafka Streams API [2]. С помощью каких абстракций Кафка Стримс позволяет распараллелить потоковую обработку Big Data, читайте в нашей следующей статье.
Как Apache Kafka Streams API поможет быстро и эффективно обработать на лету ваши большие данные, узнайте на специализированных курсах для руководителей, архитекторов, инженеров, администраторов, аналитиков Big Data и Data Scientist’ов в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
Источники
- https://docs.confluent.io/current/streams/introduction.html#the-kstreams-api-in-a-nutshell
- https://medium.com/@stephane.maarek/the-kafka-api-battle-producer-vs-consumer-vs-kafka-connect-vs-kafka-streams-vs-ksql-ef584274c1e