Kafka Streams

kafka, apache kafka, курсы администраторов spark, apache kafka для начинающих, Big Data, Data Science, kafka streaming, Kafka, брокер kafka, avro, kafka cluster

Kafka Streams — это клиентская библиотека, которая позволяет брокеру Kafka работать в многопоточной среде. Эта библиотека отвечает за обработку данных с сохранением или без сохранения состояния в режиме реального времени с помощью потоков (процессов, которые выполняются параллельно) [1].

Что такое Kafka Streams: основные особенности архитектуры библиотеки потоковой обработки

Kafka Streams — это библиотека для потоковой обработки данных, отвечающая за соединение потоков по специальным ключам соединения. Ключи соединения потоков — это ключи потоков событий, которые присваиваются им в момент времени их происхождения. Следовательно, если события происходят в один момент времени, они получают один и тот же ключ соединения. Как и любая библиотека, работающая в многопоточной среде, Кафка Стримс реализует топологию DAG (directed acyclic graph, ориентированный ациклический граф), которая представляет собой набор операций и преобразований, через которые проходят все события на пути от входных данных до результатов. Таким образом архитектура Kafka Streams состоит из следующих элементов [1].:

  • узлы графа DAG — отвечают за реализацию таких операций над данными, как: фильтрация, отображение и агрегирование;
  • узлы-источники — потребляют из топиков и передают их узлам-приемникам;
  • узлы-приемники — получают данные их узлов-источников и генерируют их в топик.

Как появилась Kafka Streams: краткая история

Кафка Стримс создавалась в рамках проекта Apache Kafka как библиотека для работы в многопоточной среде. Kafka первоначально создавалась в Linkedin разработчиками Джеем Крепсом, Нехой Нархедой и Джуном Рао. Название Kafka проекту решил дать Джей Крепс в честь автора Франца Кафки, так как по мнению Крепса эта система была «оптимизирована для письма», и ее работа была направлена на обработку данных в социальных сетях. 23 октября 2012 года состоялось включение Kafka в Apache Incubator (шлюз для идей, которые в будущем становятся полноценными проектами Apache Software Foundation). Первый выпуск проекта Kafka c входящей в него библиотекой Kafka Streams состоялся 12 апреля 2014 года. Последняя версия Kafka 3.0.0 была выпущена 21 сентября 2021 года [1].

Пример настройки Kafka Streams

Для того, чтобы подключить Kafka Streams к проекту, необходимо настроить Maven-зависимости для подключения модулей Kafka Streams [2]:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-streams</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.8.0</version>
</dependency>

Далее необходимо задать параметр APPLICATION_ID_CONFIG, который отвечает за задание имени приложения [2]:

Properties streamsConfiguration = new Properties();
streamsConfiguration.put(
  StreamsConfig.APPLICATION_ID_CONFIG,
  "wordcount-live-test");

Затем необходимо определить базовую конфигурацию для подключения к серверу Kafka [2]:

private String bootstrapServers = "localhost:9092";
streamsConfiguration.put(
  StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,
  bootstrapServers);
streamsConfiguration.put(
  StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,
  Serdes.String().getClass().getName());
streamsConfiguration.put(
  StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,
  Serdes.String().getClass().getName());

За базовую конфигурацию отвечают следующие параметры [2]:

  • BOOTSTRAP_SERVERS_CONFIG — параметр для задания URL-адреса запущенного Kafka-сервера;
  • DEFAULT_KEY_SERDE_CLASS_CONFIG — параметр, определяющий класс для сериализации и десериализации ключей сообщений;
  • DEFAULT_VALUE_SERDE_CLASS_CONFIG — параметр для задания класса, выполняющего сериализацию и десериализацию значений сообщений.

Потоковая обработка обычно выполняется с сохранением состояния. Для того, чтобы сохранять промежуточные результаты, необходимо указать параметр STATE_DIR_CONFIG и указать директорию для созранения промежуточных результатов [2]:

this.stateDirectory = Files.createTempDirectory("kafka-streams");
streamsConfiguration.put(
  StreamsConfig.STATE_DIR_CONFIG, this.stateDirectory.toAbsolutePath().toString());

Для построения потоковой топологии в Kafka Streams используется класс KStream [2]:

//создание поточной среды
StreamsBuilder builder = new StreamsBuilder();
//создание топологии потоков Kafka Streams
KStream<String, String> textLines = builder.stream(inputTopic);

Администрирование кластера Kafka

Код курса
KAFKA
Ближайшая дата курса
24 января, 2022
Длительность обучения
24 ак.часов
Стоимость обучения
54 000 руб.

Таким образом, благодаря библиотеке Кафка Стримс, брокер Kafka имеет возможность вести параллельную обработку Big Data, что значительно повышает производительность. Это позволяет аналитикам и разработчикам активно использовать эту Big Data платформу потоковой обработки в задачах Data Science.

Записаться на курс

Смотреть раcписание

Источники

  1. Н.Нархид, Г.Шапира, Т.Палино. Apache Kafka. Потоковая обработка и анализ данных
  2. https://www.baeldung.com/java-kafka-streams

Поиск по сайту