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

Что такое Kafka?

2.0 Middle🔥 211 комментариев
#Брокеры сообщений и очереди

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

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

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

Apache Kafka — это распределенная система обработки потоков данных (distributed event streaming platform), разработанная LinkedIn и ставшая отличным решением для высоконагруженных систем, требующих обработки больших объемов данных в реальном времени.

Основная концепция

Kafka работает на основе модели pub-sub (издатель-подписчик), но с ключевым отличием от традиционных message brokers — она хранит все сообщения на диске и позволяет подписчикам читать их когда угодно.

Ключевые компоненты

Producer (издатель) — отправляет сообщения в Kafka

const producer = kafka.producer();
await producer.connect();
await producer.send({
  topic: 'user-events',
  messages: [
    { key: 'user-123', value: JSON.stringify({ action: 'login' }) }
  ]
});

Consumer (подписчик) — получает сообщения из Kafka

const consumer = kafka.consumer({ groupId: 'analytics-group' });
await consumer.subscribe({ topic: 'user-events' });
await consumer.run({
  eachMessage: async ({ message }) => {
    console.log(message.value.toString());
  }
});

Topic (тема) — логическое разделение потока данных. Один producer может отправлять в несколько topics, несколько consumers могут читать из одного topic.

Partition (раздел) — физическое разделение темы на разные узлы для масштабируемости и параллелизма.

Broker (брокер) — сервер Kafka, который хранит данные и управляет topics.

Отличие от других message brokers

RabbitMQ/Redis:

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

Kafka:

  • Сообщения хранятся на диске (configurable retention)
  • Идеальна для потоков данных и event sourcing
  • Горизонтальная масштабируемость
  • Может обрабатывать миллионы сообщений в секунду

Гарантии доставки

Kafka предоставляет три уровня гарантий:

  1. At most once — может потеряться, но дублирований не будет
  2. At least once — гарантированно доставится, но может быть дубль
  3. Exactly once — идеальный сценарий (использует трансакции)

Практический пример: микросервисная архитектура

const userProducer = kafka.producer();
await userProducer.send({
  topic: 'user-events',
  messages: [{
    key: 'user-123',
    value: JSON.stringify({
      type: 'user.created',
      userId: 'user-123',
      email: 'user@example.com'
    })
  }]
});

const emailConsumer = kafka.consumer({ groupId: 'email-service' });
await emailConsumer.subscribe({ topic: 'user-events' });
await emailConsumer.run({
  eachMessage: async ({ message }) => {
    const event = JSON.parse(message.value.toString());
    if (event.type === 'user.created') {
      await sendWelcomeEmail(event.email);
    }
  }
});

Когда использовать Kafka?

  • Event sourcing — ведение лога всех событий
  • Real-time analytics — обработка данных в реальном времени
  • Log aggregation — сбор логов из разных сервисов
  • Stream processing — обработка потоков данных
  • Микросервисная архитектура — асинхронная коммуникация между сервисами

Недостатки

  • Сложнее в настройке и операции, чем RabbitMQ
  • Требует больше ресурсов (хранение на диске)
  • Оверкилл для простых задач

Kafka стала стандартом для компаний, работающих с большими объемами данных и требующих высокой надежности и масштабируемости.