2

私の質問は、Spring Cloud Stream Kafka でマルチ インスタンスを管理する方法です。

説明させてください。Spring Cloud Stream Microservices コンテキスト (eureka、configserver、kafka) で、同じマイクロサービスの 2 つのインスタンスが必要です。GIT リポジトリの構成を変更すると、configserver が (webhook を介して) メッセージを Kafka トピックにプッシュします。

マイクロサービスで同じグループ ID を使用すると、2 つのインスタンスのうちの 1 つだけが通知を受け取り、Spring コンテキストをリロードします。しかし、すべてのインスタンスを更新する必要があります...

そのために、一意の group-id を構成しました。${spring.application.name}.bus.${hostname} うまく機能しますが、問題は、サービスの新しいインスタンスを開始するたびに、kafka に新しいコンシューマー グループが作成されることです。今、私は未使用の消費者グループをたくさん持っています。

[![マイクロサービスの消費者][1]][1] [1]: https://i.stack.imgur.com/6jIzx.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

多くの消費者の作成を避ける方法は? kafka で古いコンシューマ グループを削除する必要がありますか? 私の解決策はそれを行うための最良の方法ではないと思うので、より良い選択肢があれば興味があります;)

ありがとうございました

4

1 に答える 1