#spring #spring-boot #apache-kafka #spring-kafka
#spring #spring-boot #apache-kafka #spring-kafka
Вопрос:
Я видел примеры, когда у нас есть класс конфигурации java, и мы определяем несколько KafkaListenerContainer
и передаем требуемое containerType
@kafkaListener
. Но я изучаю, есть ли какие-либо способы добиться того же, используя автоматическую настройку Spring Boot Kafka через appication.yml/properties.
Ответ №1:
Нет; Загрузка будет автоматически настраивать только один набор инфраструктуры; если вам нужно несколько, вам нужно определить их как компоненты.
Однако в последних версиях (начиная с 2.3.4) вы можете добавить средство настройки контейнера прослушивателя на фабрику, чтобы вы могли настраивать каждый контейнер прослушивателя, даже если они созданы одной фабрикой; некоторые свойства также могут быть переопределены в самой @KafkaListener
аннотации.
Пример:
@Component
class Customizer {
public Customizer(ConcurrentKafkaListenerContainerFactory<?, ?> factory) {
factory.setContainerCustomizer(container -> {
if (container.getContainerProperties().getGroupId().equals("slowGroup")) {
container.getContainerProperties().setIdleBetweenPolls(60_000);
}
});
}
}
Комментарии:
1. Я определил
spring.kafka.listener.type=batch
в своем application.properties и попытался переопределить как@KafkaListener(properties="spring.kafka.listener.type:single"
). Но это не работает, и я все еще получаю записи kafka в пакетах. Какие-либо входные данные, например, где я ошибаюсь? @GaryRussell2. Нет; эти свойства
Kafka Consumer Properties
только. К сожалению, тип прослушивателя (пакетный против. Single) — это не то, что вы можете переопределить; потому что это определяет типKafkaListener
создаваемого объекта; это не свойство прослушивателя или контейнера, оно определяет полный тип прослушивателя, который создает фабрика. Для этого свойства вам все еще нужны две фабрики. Я посмотрю, смогу ли я придумать обходной путь, но пока вам нужно 2 фабрики.