Ответ
Apache Kafka — это распределённая система потоковой обработки событий (event streaming platform). Её основные применения:
1. Асинхронная межсервисная коммуникация
- Связь микросервисов через публикацию/подписку на события (например,
order.created,payment.processed). - Устранение жёстких зависимостей и повышение отказоустойчивости.
2. Сбор и агрегация данных в реальном времени
- Централизованный сбор логов, метрик и телеметрии.
- Потоковая передача данных в системы мониторинга (Prometheus) или аналитики (Spark, Flink).
3. Обработка событий (Event Sourcing / CQRS)
- Хранение неизменяемой последовательности событий как источника истины.
- Построение проекций (read models) для разных потребителей.
4. Change Data Capture (CDC)
- Захват изменений из базы данных (через Debezium) и репликация в другие системы.
- Синхронизация данных между разными хранилищами.
Пример публикации сообщения (Java Producer API):
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
try (Producer<String, String> producer = new KafkaProducer<>(props)) {
ProducerRecord<String, String> record =
new ProducerRecord<>("orders", "order-123", "{ "status": "created" }");
producer.send(record); // Асинхронная отправка
}
Ключевые преимущества: отказоустойчивость (репликация), горизонтальная масштабируемость, сохранение сообщений с настраиваемым сроком хранения и низкая задержка.