Ответ
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 агрегации.
Ответ 18+ 🔞
Да ты посмотри, какой зверь этот Apache Kafka! Это ж не просто брокер, это, блядь, настоящий монстр для передачи событий между микросервисами, как по магической трубе, только асинхронно и с гарантиями, что ни одна хуйня не потеряется.
Вот тебе классика жанра, прямо в точку: Система уведомлений. Один сервис, допустим, по заказам, создал заказ и такой: "О, слушай, я тут событие OrderCreated сгенерил, держи!" А другой сервис, по уведомлениям, уже дежурит, подхватывает эту радость и — бац! — письмо пользователю на почту. Красота, ёпта!
Смотри, как продюсер на 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 можно в реальном времени данные агрегировать, трансформировать — вообще, волшебство, а не инструмент.