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

标签 java apache-kafka jaas sasl

我有连接到我的 kafka 集群的 Spring Boot 应用程序。 应用程序(作为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 文件

关于java - 设置客户端 SASL 身份验证以连接两个不同的 kafka 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63042602/

相关文章:

elasticsearch - 用kafka接收器在elasticsearch中重命名索引

java - 我可以设置 java.security.auth.login.config 的相对路径吗?

java - 从 XML 获取自定义 TextView 的自定义属性

java - 在加载动画期间使背景元素变暗/变暗 - Android

java - Wildfly 8.2 : importing wildcard certificate, 中间证书丢失

java - 在运行时查找 java 类依赖项

apache-kafka - KafkaSpout 为 log4j 抛出 NoClassDefFoundError

spring boot 测试错误的配置类