Spring Cloud azure kafka 与多个 eventhub 命名空间绑定

问题描述 投票:0回答:2

了解如何使用 eventhub kafka 配置 Spring Cloud 以在同一命名空间中发送和接收消息,如下所示 https://github.com/MicrosoftDocs/azure-dev-docs/blob/master/articles/java/spring-framework/configure-spring-cloud-stream-binder-java-app-kafka-azure-event-hub .md

但是,就我而言,我需要从一个 eventhub 接收并将其发送到不同的命名空间,我该如何配置?

spring-boot spring-cloud spring-cloud-stream spring-cloud-azure
2个回答
0
投票

可以参考Spring Cloud Stream Kafka Binder的多binder示例,https://github.com/spring-cloud/spring-cloud-stream-samples/tree/main/multi-binder-samples/multi- binder-two-kafka-clusters,对于使用事件中心应该是相同的


0
投票

当您配置多个绑定器(每个 eventhub 命名空间一个)时,kafka 会检测到所有绑定器的 sasl 配置相同。因此,kafka 只会为第一个活页夹创建一个 LoginManager,并将其重用于其他活页夹。

Kafka客户端相关代码:https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/security/authenticator/LoginManager.java#L103

因此,第一个活页夹的一切都按预期进行。其他绑定器仍然可以获取 oauth 令牌,但该令牌属于第一个命名空间的 eventHub。这会导致一个奇怪的错误。

解决方法:

您可以通过添加不需要但可用于获取唯一配置的配置来强制 sasl 配置唯一,例如:

spring:
  cloud:
    stream:
      binders:
        event-hub-1:
          type: kafka
          environment:
            spring.cloud.stream.kafka.binder:
              brokers: "eventhub-1.servicebus.windows.net:9093"
              configuration:
                # only present to make the sasl config unique
                sasl.kerberos.service.name: event-hub-1
        event-hub-2:
          type: kafka
          environment:
            spring.cloud.stream.kafka.binder:
              brokers: "eventhub-2.servicebus.windows.net:9093"
              autoCreateTopics: false
              configuration:
                # only present to make the sasl config unique
                sasl.kerberos.service.name: event-hub-2
© www.soinside.com 2019 - 2024. All rights reserved.