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

时间:2020-07-22 20:22:20

标签: java apache-kafka jaas sasl

我有连接到我的kafka集群的spring boot应用程序。 应用程序(作为kafka客户端)使用SASL身份验证,我在初始化kafka生产者和使用者之前通过System.setProperty()指定了JAAS配置。 单个kafka群集设置可以很好地工作。

kafka_client_jaas.conf

xsd1 = '''<?xml version...
   <xs:schema targetNamespace="...
'''
xsd2 = '''...'''

import xmlschema
schema = xmlschema.XMLSchema([xsd1, xsd2]) # it seems xmlschema does not accept such arguments
# then using schema to validate xml files

MyKafkaProducer.java

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

现在我有一个第三方(别人的)kafka集群,该集群与我的kafka集群完全断开了连接。第三方kafka群集也使用SASL身份验证。

java应用程序如何连接到两个不同的kafka集群,并且两个集群都需要SASL身份验证? 两个集群的用户名和密码都不相同,我只能在… private void init() { System.setProperty("java.security.auth.login.config", "kafka_client_jaas.conf"); … } 中设置一个JAAS配置文件。

1 个答案:

答案 0 :(得分:1)

从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文件