我正在运行分布式Kafka-Broker,其中通过SASL / SSL设置了代理间通信。为此,我修改了给定here的JAAS配置。完成的文件如下所示:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret"
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN;
org.apache.kafka.common.security.scram.ScramLoginModule required;
};
Client {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret";
};
我注意到“ KafkaServer”部分有2个管理员用户。我也学到了我需要两者的艰辛方式,但是为什么呢?我有几个月前已经读过(忘了)原因的感觉,但是我似乎再也找不到了。
答案 0 :(得分:2)
根据Apache Kafka documentation,KafkaServer
部分用于配置从此代理到其他代理以及与连接的客户端和其他代理的身份验证从 该经纪人。 Client
部分用于连接到Zookeeper。
由于您的问题与KafkaServer
部分有关,并且您正在配置SASL / PLAIN身份验证机制,因此请参阅Apache Kafka文档的this part:
此配置定义了两个用户( admin 和 alice )。代理程序使用
username
部分中的属性password
和KafkaServer
来启动与其他代理程序的连接。在此示例中, admin 是经纪人之间通信的用户。属性集user_userName
定义了连接到代理的所有用户的密码,代理使用这些属性验证了所有客户端连接,包括来自其他代理的连接。
换句话说,这里配置了两种单独的情况:
username
和password
中定义的用户名和密码。user_userName
条目用于对这些连接进行身份验证,其中用户名是该代理的 userName 部分user_userName
键,密码为值。因此,在您的示例中,由于以下两行,该代理将使用用户名admin
和密码admin-secret
连接到其他代理:
username="admin"
password="admin-secret"
并且,由于以下两行,客户和其他代理可以使用admin
/ admin-secret
或alice
/ alice-secret
的用户名密码组合连接到该代理:
user_admin="admin-secret"
user_alice="alice-secret"
如果您仅接受来自其他代理的连接以在此侦听器上进行经纪人之间的通信,则他们可能正在使用配置的user_admin="admin-secret"
部分,而user_alice="alice-secret"
可能是多余的。