设置客户端 SASL 身份验证以连接两个不同的 kafka 集群

Setup client side SASL authentication to connect with two different kafka clusters

我有 spring 连接到我的 kafka 集群的启动应用程序。 应用程序(作为 kafka 客户端)使用 SASL 身份验证,我在初始化 kafka 生产者和消费者之前通过 System.setProperty() 指定了 JAAS 配置。 它在单个 kafka 集群设置中运行良好。

kafka_client_jaas.conf

KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="myClusterUser"
  password="user-secret";
};

MyKafkaProducer.java

…
private void init()
{
    System.setProperty("java.security.auth.login.config", "kafka_client_jaas.conf");
    …
}

现在我有一个第三方(别人的)kafka 集群,它与我的 kafka 集群完全断开连接。第三方kafka集群也是用SASL认证。

java 应用程序如何连接到两个不同的 kafka 集群并且两个集群都需要 SASL 身份验证? 两个集群的用户名和密码都不同,我只能在 java.security.auth.login.config.

中设置一个 JAAS 配置文件

从 Kafka 0.10.2 开始,您可以使用 sasl.jaas.config 设置为每个 Kafka 客户端配置 SASL 身份验证。这使得 运行 在单个 JVM 中具有不同(或相同)SASL 配置的多个 Kafka 客户端。

这样做:

  • 取消设置java.security.auth.login.config

  • 在每个 Kafka 客户端属性中添加 sasl.jaas.config。例如:

    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
      username="myClusterUser" \
      password="user-secret";
    

    请参阅 http://kafka.apache.org/documentation.html#security_sasl_plain_clientconfig 了解完整详情

  • MyKafkaClient.java

    import org.apache.kafka.common.config.SaslConfigs;
    private void init() {
      properties.put(SaslConfigs.SASL_JAAS_CONFIG,
      "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"myClusterUser\" password=\"user-secret\"");
    }
    
  • 删除您的 JAAS 文件