我有连接到我的 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/