Назовите и опишите ключевые абстракции в Apache Kafka.

Ответ

Apache Kafka — это распределённая стриминговая платформа, которая оперирует следующими ключевыми абстракциями:

  1. Topic (Топик) — именованный поток сообщений. Продюсеры отправляют сообщения в топики, а консьюмеры их оттуда читают. Например, топик user-registrations или order-updates.

  2. Partition (Партиция/Раздел) — основная единица параллелизма в Kafka. Каждый топик делится на одну или несколько партиций. Сообщения внутри одной партиции упорядочены и неизменяемы, но порядок между разными партициями не гарантируется. Каждое сообщение в партиции имеет свой offset.

  3. Offset (Смещение) — уникальный последовательный номер, который Kafka присваивает каждому сообщению в партиции. Он идентифицирует позицию сообщения. Консьюмеры отслеживают свой offset, чтобы знать, какие сообщения они уже прочитали.

  4. Producer (Продюсер) — приложение, которое публикует (отправляет) сообщения в топики Kafka. Пример отправки сообщения с использованием библиотеки sarama в Go:

    producer, err := sarama.NewSyncProducer(brokers, config)
    // ...
    msg := &sarama.ProducerMessage{
        Topic: "orders",
        Key:   sarama.StringEncoder("order_id_123"),
        Value: sarama.StringEncoder("{"status": "created"}"),
    }
    partition, offset, err := producer.SendMessage(msg)
  5. Consumer (Консьюмер) — приложение, которое подписывается на один или несколько топиков и читает из них сообщения.

  6. Consumer Group (Группа потребителей) — одна или несколько консьюмеров, которые совместно обрабатывают сообщения из топика. Kafka гарантирует, что каждая партиция топика будет обрабатываться только одним консьюмером из группы. Это позволяет масштабировать обработку сообщений, запуская больше экземпляров консьюмера в одной группе.

  7. Broker (Брокер) — сервер Kafka. Кластер Kafka состоит из одного или нескольких брокеров. Брокеры хранят данные (партиции топиков) и обслуживают запросы от продюсеров и консьюмеров.

  8. Replica (Реплика) — копия партиции, хранящаяся на другом брокере для обеспечения отказоустойчивости. Для каждой партиции есть одна leader-реплика (обслуживает все запросы на чтение и запись) и ноль или более follower-реплик (пассивно копируют данные с лидера). Если лидер выходит из строя, один из фолловеров становится новым лидером.