← Назад к вопросам

Зачем нужны топики в Kafka?

2.3 Middle🔥 251 комментариев
#REST API и микросервисы#Брокеры сообщений

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Топики в Kafka: Назначение и Структура

Что такое топик?

Топик — это основная абстракция в Apache Kafka, представляющая канал распределённой очереди сообщений. Топик служит логической точкой публикации и подписки для потоков данных. Каждый топик содержит упорядоченную последовательность сообщений, которые могут быть прочитаны многими потребителями независимо друг от друга.

Основные назначения топиков

1. Разделение и масштабируемость

Топик разбивается на несколько партиций, распределённых по разным узлам кластера Kafka. Это позволяет:

  • Обрабатывать сообщения параллельно
  • Масштабировать пропускную способность горизонтально
  • Обеспечивать высокую доступность через репликацию
// Пример конфигурации топика с 3 партициями и фактором репликации 3
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");
props.put("retries", 3);

KafkaProducer<String, String> producer = new KafkaProducer<>(props);

2. Гарантия порядка сообщений

Сообщения в одной партиции упорядочены и гарантированно обрабатываются в порядке получения. Это критично для систем, где важна последовательность событий.

// Отправка в одну партицию обеспечивает порядок
ProducerRecord<String, String> record = new ProducerRecord<>(
    "user-events",    // топик
    userId,           // ключ (определяет партицию)
    eventData         // значение
);
producer.send(record);

3. Отделение производителей от потребителей

Топики обеспечивают полную развязку между системами:

  • Производители пишут в топик, не зная о потребителях
  • Потребители читают независимо от производителей
  • Многие системы могут одновременно консумировать данные

4. Персистентность и восстанавливаемость

Топики хранят сообщения на диск в течение настраиваемого периода. Это позволяет:

  • Восстанавливать данные после сбоев
  • Пересчитывать данные заново при необходимости
  • Реализовывать сложные сценарии обработки

Организация топиков

Партиции топика

Каждая партиция — это упорядоченный журнал сообщений. Фактор репликации (replica factor) определяет, на скольких узлах хранится копия данных.

Топик: "orders"
├── Partition 0 [Leader: Broker 1] → Replicas: [Broker 1, Broker 2]
├── Partition 1 [Leader: Broker 2] → Replicas: [Broker 2, Broker 3]
└── Partition 2 [Leader: Broker 3] → Replicas: [Broker 3, Broker 1]

Consumer Groups

Потребители организуются в группы. Каждая партиция читается только одним потребителем в группе:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "order-processing-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("orders"));

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

Топики vs очереди

В отличие от простых очередей (RabbitMQ, ActiveMQ), топики в Kafka:

  • Сохраняют сообщения длительное время
  • Поддерживают многих потребителей
  • Обеспечивают линейную масштабируемость
  • Гарантируют порядок в рамках партиции

Практическое применение

  1. Event Sourcing — всё событие системы записываются в топики
  2. Stream Processing — обработка потока данных в реальном времени
  3. Микросервисная архитектура — взаимодействие сервисов через топики
  4. Логирование — централизованное хранилище логов
  5. Метрики — сбор и обработка метрик системы

Топики в Kafka — основа для построения масштабируемых распределённых систем обработки потоков данных.

Зачем нужны топики в Kafka? | PrepBro