Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Spring: Kafka, Spring, Producer, Consumer, KafkaTemplate, KafkaListener

Как создаются Kafka Producer и Kafka Consumer в Spring?

Вопрос проверяет понимание настройки и использования Kafka Producer и Consumer в приложениях на Spring.

Короткий ответ

В Spring Kafka Producer создается через бин KafkaTemplate, который использует ProducerFactory. Consumer создается с помощью аннотации @KafkaListener, которая автоматически подписывается на указанные топики. Настройки производятся через application.yml или application.properties.

Длинный ответ

Создание Kafka Producer в Spring

Для отправки сообщений в Kafka используется класс KafkaTemplate, который является оберткой над стандартным Kafka Producer. Он создается как бин Spring и требует настройки через ProducerFactory. ProducerFactory определяет параметры подключения, сериализацию ключей и значений.

Пример конфигурации в application.yml:

spring:
  kafka:
    bootstrap-servers: localhost:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

Пример создания бина KafkaTemplate:

@Configuration
public class KafkaProducerConfig {
    @Bean
    public ProducerFactory<String, String> producerFactory() {
        Map<String, Object> config = new HashMap<>();
        config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return new DefaultKafkaProducerFactory<>(config);
    }

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }
}

После этого можно внедрить KafkaTemplate в сервис и отправлять сообщения:

@Service
public class KafkaProducerService {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
    }
}

Создание Kafka Consumer в Spring

Consumer создается с помощью аннотации @KafkaListener, которая автоматически подписывает метод на указанные топики. Для работы необходимо настроить ConsumerFactory и KafkaListenerContainerFactory.

Пример конфигурации в application.yml:

spring:
  kafka:
    consumer:
      group-id: my-group
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      auto-offset-reset: earliest

Пример создания Consumer:

@Configuration
@EnableKafka
public class KafkaConsumerConfig {
    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        Map<String, Object> config = new HashMap<>();
        config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        config.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group");
        config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        return new DefaultKafkaConsumerFactory<>(config);
    }

    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());
        return factory;
    }
}

Пример использования @KafkaListener:

@Component
public class KafkaConsumerService {
    @KafkaListener(topics = "my-topic", groupId = "my-group")
    public void listen(String message) {
        System.out.println("Received message: " + message);
    }
}

Вывод: Spring Kafka упрощает работу с Kafka, предоставляя готовые абстракции для Producer и Consumer. Это позволяет быстро интегрировать обмен сообщениями в микросервисную архитектуру, обеспечивая надежность и масштабируемость.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Spring

    Spring

  • Kafka

    Kafka

Ключевые слова

#Kafka

#Spring

#Producer

#Consumer

#KafkaTemplate

#KafkaListener

Подпишись на Java Developer в телеграм