Apache Kafka — распределенный программный брокер сообщений поддерживающий транзакционность при работе с потребителями и поставщиками событий:
- публикует и подписывается на поток записей подобно очереди сообщений и корпоративной системе сообщений
- хранит поток записей (событий) обеспечивая отказоустойчивость и надежность
- обрабатывает поток записей (событий) по мере поступления
Apache Kafka обычно используется как Event Processing System (система обработки событий) для двух классов приложений:
- построение потоков каналов данных в режиме реального времени (real-time streaming data pipelines) с надежностью получения данных между системами и приложениями;
- построение потоковых приложений работающих в режиме реального времени (real-time streaming applications) которые трансформируют или реагируют на данные потока.
или более красочно от Confluent
Kafka-продюсеры и потребители: особенности работы
Продюсеры в Kafka отвечают за отправку сообщений в темы (topics). Топики — это основные каналы для передачи данных в Kafka. Продюсеры не беспокоятся о том, кто и как будет потреблять данные, их основная задача — поместить данные в топик. Это делает систему гибкой и распределенной, позволяя множеству продюсеров вносить свои данные независимо друг от друга. Следующий пример отвечает за создание продюсера:
import org.apache.kafka.clients.producer.*; import java.util.Properties; public class KafkaProducerExample { public static void main(String[] args) { // Настройка свойств продюсера Properties properties = new Properties(); properties.put("bootstrap.servers", "localhost:9092"); properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // Создание продюсера Producer<String, String> producer = new KafkaProducer<>(properties); // Отправка сообщения в тему "example-topic" producer.send(new ProducerRecord<>("example-topic", "key1", "Hello, Kafka!")); // Закрытие продюсера producer.close(); } }
В приведенном выше примере кода мы создаем продюсера, задаем необходимые свойства (например, адрес сервера Kafka) и отправляем сообщение в топик «example-topic».
Потребители в Kafka слушают темы и обрабатывают полученные сообщения. Они могут быть организованы в группы, что обеспечивает масштабируемость и отказоустойчивость. Потребители читают данные в порядке, в котором они были записаны в теме, обеспечивая сохранность порядка событий. Потребители могут быть организованы в группы, где каждая группа получает копию данных из топика. Это обеспечивает отказоустойчивость и распределенность обработки данных. Следующий пример отвечает за создание потребителя:
import org.apache.kafka.clients.consumer.*; import java.time.Duration; import java.util.Collections; import java.util.Properties; public class KafkaConsumerExample { public static void main(String[] args) { // Настройка свойств потребителя Properties properties = new Properties(); properties.put("bootstrap.servers", "localhost:9092"); properties.put("group.id", "example-group"); properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); // Создание потребителя Consumer<String, String> consumer = new KafkaConsumer<>(properties); // Подписка на тему "example-topic" consumer.subscribe(Collections.singletonList("example-topic")); // Получение сообщений while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) { // Обработка полученного сообщения System.out.printf("Received message: key = %s, value = %s%n", record.key(), record.value()); } } } }
В данном примере кода потребитель подписывается на топик»example-topic» и ожидает получения сообщений. Полученные сообщения обрабатываются в цикле, выводя содержимое ключа и значения.
Ключевым моментом в архитектуре Kafka является асинхронное взаимодействие между продюсерами и потребителями. Продюсеры отправляют данные в темы, а потребители читают данные из тем, не блокируя друг друга. Это обеспечивает высокую производительность и масштабируемость системы, позволяя ей обрабатывать огромные объемы данных в режиме реального времени.
Apache Kafka, a Distributed Streaming Platform
- Проект Apache Kafka https://kafka.apache.org
- Почитать про Kafka и попробовать https://www.confluent.io/product/confluent-platform/
- Учебные курсы по Kafka на русском языке или курсы Kafka на английском