Ответ
Да, безусловно. Apache Kafka — это распределённый брокер сообщений, и любое приложение, способное работать по сетевому протоколу, может быть продюсером или консьюмером. Архитектура приложения (монолит или микросервисы) не является ограничением для интеграции с Kafka.
Практические аспекты:
- Интеграция: Монолит подключает клиентскую библиотеку Kafka (например,
kafka-clientsдля Java) и взаимодействует с кластером Kafka через брокеры. -
Пример продюсера (Java):
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)) { producer.send(new ProducerRecord<>("orders", "order-123", "{...}")); } -
Пример консьюмера (Java):
Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "monolith-service"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); try (Consumer<String, String> consumer = new KafkaConsumer<>(props)) { consumer.subscribe(List.of("notifications")); while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) { // Обработка сообщения System.out.println("Received: " + record.value()); } } }Важное замечание: При использовании в монолите необходимо учитывать влияние на масштабируемость и отказоустойчивость, так как консьюмеры будут запущены в рамках одного экземпляра приложения.