私の質問は、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 で古いコンシューマ グループを削除する必要がありますか? 私の解決策はそれを行うための最良の方法ではないと思うので、より良い選択肢があれば興味があります;)
ありがとうございました