Несколько экземпляров с 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 дней).