Ответ
Kafka — это распределенный реплицированный журнал фиксации изменений (commit log) с высокой пропускной способностью и отказоустойчивостью. Работает по принципу publish-subscribe, храня сообщения в топиках (topics), разбитых на партиции (partitions) для параллельной обработки.
Журнал фиксации изменений, потому что сообщения хранятся в сегментированных, append-only журналах, которые называются топиками. Эта концепция журналирования является основным уникальным преимуществом Kafka’и.
Ключевые особенности:
- Устойчивость: сообщения хранятся на диске и реплицируются.
- Масштабируемость: горизонтальное масштабирование за счёт партиций.
- Обработка в реальном времени: поддерживает потоковую обработку.
Пример на Go (с библиотекой sarama):
producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, nil)
if err != nil {
log.Fatal(err)
}
defer producer.Close()
msg := &sarama.ProducerMessage{
Topic: "test-topic",
Value: sarama.StringEncoder("Hello Kafka!"),
}
partition, offset, err := producer.SendMessage(msg)
Используется для логов, событий, микросервисной коммуникации.