Skip to content

Apache Kafka

Apache Kafka — это распределённая платформа для обработки потоков данных в реальном времени. Она разработана для обработки больших объёмов данных с высокой пропускной способностью и низкой задержкой. Kafka используется для создания систем обмена сообщениями и потоковой обработки данных. Вот основные компоненты и характеристики Kafka:

Основные компоненты

  1. Producer: Это приложение или компонент, который отправляет (публикует) сообщения в Kafka. Producers могут отправлять данные в один или несколько топиков.

  2. Consumer: Это приложение или компонент, который получает (подписывается на) сообщения из Kafka. Consumers могут читать данные из одного или нескольких топиков.

  3. Broker: Это сервер Kafka, который хранит данные и обрабатывает запросы от producers и consumers. Kafka может состоять из нескольких брокеров, что обеспечивает отказоустойчивость и масштабируемость.

  4. Topic: Это категория или имя канала, в который producers отправляют сообщения. Каждый топик может иметь несколько партиций, что позволяет распределять данные и обрабатывать их параллельно.

  5. Partition: Это подмножество данных в топике. Каждая партиция упорядочена и может быть реплицирована для обеспечения надежности.

Основные характеристики

  • Высокая производительность: Kafka может обрабатывать миллионы сообщений в секунду, что делает его подходящим для приложений с высокими требованиями к производительности.

  • Отказоустойчивость: Данные в Kafka могут быть реплицированы на несколько брокеров, что обеспечивает защиту от потери данных.

  • Гибкость: Kafka поддерживает различные модели обработки данных, включая потоковую обработку и пакетную обработку.

  • Масштабируемость: Kafka легко масштабируется, добавляя новые брокеры и партиции.

  • Долговременное хранение: Kafka может хранить данные на диске в течение длительного времени, что позволяет повторно обрабатывать данные при необходимости.

Kafka широко используется в различных областях, включая обработку логов, мониторинг, интеграцию данных и построение систем реального времени.


не проверял

Конечно! Давайте создадим пример приложения на Java с использованием Apache Kafka и Maven. Мы создадим простое приложение, которое будет отправлять и получать сообщения из Kafka.

Шаг 1: Настройка Maven проекта

  1. Создайте новый Maven проект. В вашем pom.xml добавьте зависимости для Kafka:
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>kafka-example</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>3.5.1</version> <!-- Убедитесь, что версия актуальна -->
        </dependency>
    </dependencies>
</project>

Шаг 2: Создание Producer

Создайте класс KafkaProducerExample.java для отправки сообщений:

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;

import java.util.Properties;

public class KafkaProducerExample {
    public static void main(String[] args) {
        // Настройки для Kafka Producer
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        // Создаем Producer
        try (KafkaProducer<String, String> producer = new KafkaProducer<>(props)) {
            for (int i = 0; i < 10; i++) {
                String message = "Message " + i;
                ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", message);

                // Отправляем сообщение
                producer.send(record, (RecordMetadata metadata, Exception exception) -> {
                    if (exception != null) {
                        exception.printStackTrace();
                    } else {
                        System.out.printf("Sent: %s, Offset: %d%n", message, metadata.offset());
                    }
                });
            }
        }
    }
}

Шаг 3: Создание Consumer

Создайте класс KafkaConsumerExample.java для получения сообщений:

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecords;

import java.time.Duration;
import java.util.Collections;
import java.util.Properties;

public class KafkaConsumerExample {
    public static void main(String[] args) {
        // Настройки для Kafka Consumer
        Properties props = new Properties();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");

        // Создаем Consumer
        try (KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props)) {
            consumer.subscribe(Collections.singletonList("my-topic"));

            while (true) {
                ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
                for (ConsumerRecord<String, String> record : records) {
                    System.out.printf("Received: %s, Offset: %d%n", record.value(), record.offset());
                }
            }
        }
    }
}

Шаг 4: Запуск

  1. Убедитесь, что Kafka и ZooKeeper запущены.
  2. Создайте топик my-topic, если он еще не создан:
bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
  1. Запустите KafkaProducerExample для отправки сообщений.
  2. Запустите KafkaConsumerExample для получения сообщений.

Результат

Вы должны увидеть, как producer отправляет сообщения, а consumer их получает и выводит на экран.

Этот пример демонстрирует базовую функциональность Kafka с использованием Java и Maven, включая создание producer и consumer. Вы можете расширить этот пример, добавив обработку ошибок, конфигурацию и другие функции в зависимости от ваших потребностей.