Вопрос проверяет знание экосистемы Kafka в Java, включая основные библиотеки и фреймворки для продюсеров и консюмеров.
Для взаимодействия с Apache Kafka в Java существует несколько ключевых библиотек, каждая из которых решает свои задачи. Наиболее популярными являются официальный Kafka Client, Spring Kafka и Kafka Streams. Они позволяют как отправлять и получать сообщения, так и выполнять сложную потоковую обработку.
Это официальная библиотека от Apache, предоставляющая низкоуровневые 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");
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("my-topic", "key", "value"));
producer.close();Библиотека, интегрирующая Kafka с Spring Boot. Она предоставляет шаблоны KafkaTemplate и аннотации @KafkaListener, что значительно упрощает разработку.
// Пример консюмера с Spring Kafka
@Component
public class MyConsumer {
@KafkaListener(topics = "my-topic")
public void listen(String message) {
System.out.println("Received: " + message);
}
}Библиотека для построения приложений потоковой обработки данных. Позволяет выполнять трансформации, агрегации и соединения потоков в реальном времени.
// Пример Kafka Streams
StreamsBuilder builder = new StreamsBuilder();
KStream<String, String> stream = builder.stream("input-topic");
stream.mapValues(value -> value.toUpperCase()).to("output-topic");
KafkaStreams streams = new KafkaStreams(builder.build(), props);
streams.start();Выбор инструмента зависит от задачи: для простой отправки/получения подойдёт Kafka Client, для микросервисов на Spring — Spring Kafka, а для сложной обработки данных — Kafka Streams.