Apache Kafka — это распределенная система потоковой обработки данных, предназначенная для эффективной передачи и обработки потоков событий. Одним из ключевых понятий в Kafka является «поток событий» или «стрим событий» (event stream). В этой статье мы рассмотрим, что такое поток событий и как он работает в Kafka.
Поток событий: особенности работы с Big Data
Поток событий представляет собой непрерывный поток данных, который поступает в систему в режиме реального времени. В Kafka, событие представляет собой факт, описывающий изменение состояния объекта, такое как наполнение топика сообщениями или разбиение топика на разделы. Механизм регистрации событий в Kafka позволяет брокеру узнавать о новых событиях. Регистрация событий включает в себя считывание текущего состояния объекта и сравнение его с предыдущим состоянием. Если текущее состояние отличается от предыдущего, брокер Kafka автоматически регистрирует новое событие. Кроме того, создается поток событий, в который добавляются все события, зарегистрированные в данное время. Этот механизм позволяет эффективно отслеживать изменения в системе и реагировать на них. Нижепредстваленный код на языке Java отвечает за создание потока событий и помещение в него события (event) путем его сериализации (превращение объекта в последовательность битов) [1]:
KStreamBuilder builder = new KStreamBuilder() //создание нового потока Kafka ; //сериализация текущего события builder.stream(keySerde, valueSerde, "my_entity_events") .groupByKey(keySerde, valueSerde) // помещение сериализованного события в поток .reduce((currentState, event) keySerde, valueSerde,"my_entity_store").toStream(); return builder; //возвращение заполненного события
В Kafka потоки событий постоянно обогащаются. Обогащение потока событий в Kafka Streams представляет собой механизм, который позволяет расширить (добавить) информацию в текущий поток событий, соединяя его с другим потоком событий. Рассмотрим пример обогащения потока событий для улучшения информации о пользователях в процессе регистрации на сайте. Предположим, у нас есть два потока событий:
// Поток событий создания таблицы профилей пользователей во время регистрации на сайте KStream<String, UserProfileEvent> userProfileStream = builder.stream(keySerde, userProfileSerde, "user_profile_events"); // Поток событий перехода по ссылкам на сайте KStream<String, UserLinkClickEvent> linkClickStream = builder.stream(keySerde, linkClickSerde, "user_link_click_events");
Для обогащения потока событий создания таблицы профилей пользователей с информацией о переходах по ссылкам, мы можем использовать операцию leftJoin
. Эта операция соединяет два потока событий на основе ключа и, при наличии совпадений, обогащает один поток событий другим [2]:
KStream<String, EnrichedUserProfileEvent> enrichedProfileStream = userProfileStream .leftJoin(linkClickStream, (profileEvent, linkClickEvent) -> { if (linkClickEvent != null) { // Обогащение информации о пользователе данными из события перехода по ссылке return new EnrichedUserProfileEvent(profileEvent.getUserId(), profileEvent.getUserName(), linkClickEvent.getLinkClicked()); } else { // Если нет события перехода по ссылке, возвращаем исходное событие создания профиля пользователя return new EnrichedUserProfileEvent(profileEvent.getUserId(), profileEvent.getUserName(), "No Link Clicked"); } });
В данном примере EnrichedUserProfileEvent
представляет собой класс, содержащий обогащенную информацию о пользователе. Операция leftJoin обеспечивает соединение по ключу и передает функцию, которая выполняет обогащение.
Таким образом, благодаря механизму формирования потоков событий, брокер Kafka способен эффективно обрабатывать обширные объемы данных, объединяя их в единый поток выполнения. Это делает Apache Kafka многоцелевым инструментом для хранения и обмена обширными потоками данных, что открывает широкие перспективы для его использования в задачах Data Science и разработке распределенных приложений.
Освоить Apache Kafka на профессиональном уровне в качестве администратора Big Data кластеров, разработчика распределенных приложений и прочих прикладных областях Data Science вы сможете на практических курсах по Kafka в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- Администрирование кластера Kafka
- Apache Kafka для разработчиков
- Администрирование кластера Arenadata Streaming Kafka
Источники
- https://habr.com/ru/company/piter/blog/424739/
- Н.Нархид, Г.Шапира, Т.Палино. Apache Kafka. Потоковая обработка и анализ данных