Несколько экземпляров с Spring Cloud Bus Kafka
У меня вопрос, как управлять несколькими экземплярами с помощью Spring Cloud Stream Kafka.
Позвольте мне объяснить, что в контексте микросервисов Spring Cloud Stream (eureka, configserver, kafka) я хочу иметь 2 экземпляра одного и того же микросервиса. Когда я изменяю конфигурацию в моем репозитории GIT, сервер конфигурации (через веб-перехватчик) отправляет сообщение в тему Kafka.
Если я использую тот же идентификатор группы в своем микросервисе, только один из двух экземпляров получит уведомление и перезагрузит его контекст Spring. Но мне нужно обновить все экземпляры...
Итак, для этого я настроил уникальный идентификатор группы: ${spring.application.name}.bus.${hostname}
Он работает хорошо, но проблема в том, что каждый раз, когда я запускаю новый экземпляр моей службы, он создает новую группу потребителей в kafka. Теперь у меня много неиспользуемой группы потребителей.
[![потребители микросервиса][1]][1] [1]: https://stackru.com/images/12186d524bb680066b07d60092bc1853a37b6d79.png
Вот конфигурация Spring Cloud Stream моего сервиса:
spring:
cloud:
bus:
destination: sys.spring-cloud-bus.refresh
enabled: true
refresh:
enabled: true
env:
enabled: true
trace:
enabled: false
stream:
bindings:
# Override spring cloud bus configuration with a specific binder named "bus"
springCloudBusInput:
binder: bus
destination: sys.spring-cloud-bus.refresh
content-type: application/json
group: ${spring.application.name}.bus.${hostname}
springCloudBusOutput:
binder: bus
destination: sys.spring-cloud-bus.refresh
content-type: application/json
group: ${spring.application.name}.bus.${hostname}
binders:
bus:
type: kafka
defaultCandidate: false
environment:
spring:
cloud:
stream:
kafka:
binder:
brokers: kafka-dev.hcuge.ch:9092
kafka:
streams:
bindings:
springCloudBusInput:
consumer:
startOffset: latest # Reset offset to the latest value to avoid consume configserver notifications on startup
resetOffsets: true
Как избежать создания большого количества потребителей? Должен ли я удалить старую группу потребителей в кафке? Я думаю, что мое решение - не лучший способ сделать это, поэтому, если у вас есть лучший вариант, мне интересно;)
Спасибо
1 ответ
Если вы не укажете группу, автобус все равно будет использовать случайную группу.
Брокер в конечном итоге удалит неиспользуемые группы в соответствии с их offsets.retention.minutes
недвижимость (по умолчанию 7 дней).