Ответ
Apache Kafka использовался как высокопроизводительный распределенный брокер событий (event bus) для асинхронной связи между микросервисами.
Типичный use case: Система уведомлений. Сервис-источник (например, order-service) публикует событие OrderCreated, а сервис-потребитель notification-service обрабатывает его и отправляет email.
Пример продюсера на Java:
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-broker1:9092,kafka-broker2:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class.getName()); // Для JSON
try (Producer<String, OrderEvent> producer = new KafkaProducer<>(props)) {
OrderEvent event = new OrderEvent(orderId, "CREATED");
ProducerRecord<String, OrderEvent> record =
new ProducerRecord<>("order-events", orderId.toString(), event);
producer.send(record); // Асинхронная отправка
}
Пример консьюмера (Spring Kafka):
@Component
public class NotificationConsumer {
@KafkaListener(topics = "order-events", groupId = "notification-group")
public void handleOrderEvent(OrderEvent event) {
// Логика отправки уведомления
sendEmail(event.getOrderId(), event.getStatus());
}
}
Почему Kafka?
- Высокая пропускная способность и низкая задержка.
- Надежность: Сообщения сохраняются на диске и реплицируются.
- Масштабируемость: Легко добавлять партиции топика и новых консьюмеров.
- Потоковая обработка: Возможность использовать Kafka Streams для real-time агрегации.