Sobes.tech
Back to questions
Middle+
4

Расскажите про Kafka: топики, партиции, консьюмер-группы, гарантии доставки.

Companies where asked
Servicepipi

Answer from AI

sobes.tech AI

Apache Kafka — это распределённая платформа потоковой передачи данных, которая позволяет публиковать, хранить и обрабатывать потоки записей в реальном времени.

  • Топики (Topics) — логические каналы, куда продюсеры отправляют сообщения. Топик можно представить как категорию или имя потока данных.

  • Партиции (Partitions) — каждый топик разбивается на несколько партиций для масштабирования и параллельной обработки. Каждая партиция — это упорядоченный, неизменяемый журнал сообщений.

  • Консьюмер-группы (Consumer Groups) — группа консьюмеров, которые совместно читают данные из топика. Каждая партиция в топике назначается ровно одному консьюмеру в группе, что обеспечивает параллельную обработку без дублирования.

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

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

Пример на Go с использованием библиотеки sarama для отправки сообщения:

package main

import (
    "github.com/Shopify/sarama"
    "log"
)

func main() {
    producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer producer.Close()

    msg := &sarama.ProducerMessage{
        Topic: "example-topic",
        Value: sarama.StringEncoder("Hello Kafka"),
    }

    partition, offset, err := producer.SendMessage(msg)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Message is stored in partition %d, offset %d\n", partition, offset)
}