我正在尝试将kafka客户端配置为针对安全的kafkaserver进行身份验证。我已经设置了jaas和ssl配置,但是它在提示serviceNames。
我没有使用Kerberos。
命令
KAFKA_OPTS="-Djava.security.auth.login.config=./jaas.conf" \
kafka-console-producer --broker-list k0:9092,k1:9092,k2:9092 \
--topic test-topic
--producer.config ./ssl.properties
错误
org.apache.kafka.common.KafkaException: Failed to construct kafka producer
at org.apache.kafka.clients.producer.KafkaProducer.<init>
[ ... ]
Caused by: java.lang.IllegalArgumentException: No serviceName defined in either JAAS or Kafka config
jaas.conf
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
serviceName="kafka"
password="broker-secret"
user_broker="broker-secret"
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
confluent.metrics.reporter.sasl.mechanism=PLAIN
user_username1="password1";
};
ssl.properties
bootstrap.servers=k0:9092,k1:9092,k2:9092
security.protocol=SASL_PLAINTEXT
ssl.truststore.location=/var/ssl/private/client.truststore.jks
ssl.truststore.password=confluent
ssl.keystore.location=/var/ssl/private/client.keystore.jks
ssl.keystore.password=confluent
ssl.key.password=confluent
producer.bootstrap.servers=k0:9092,1:9092,k2:9092
producer.security.protocol=SASL_PLAINTEXT
producer.ssl.truststore.location=/var/private/ssl/kafka.client.truststore.jks
producer.ssl.truststore.location=/var/ssl/private/client.truststore.jks
producer.ssl.truststore.password=confluent
producer.ssl.keystore.location=/var/ssl/private/client.keystore.jks
producer.ssl.keystore.password=confluent
producer.ssl.key.password=confluent
org.apache.kafka.common.security.plain.PlainLoginModule required
password="broker-secret"
user_broker="broker-secret"
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
confluent.metrics.reporter.sasl.mechanism=PLAIN
user_username1="password";
serviceName="Kafka"
最佳答案
此错误表明jaas配置对您的kafka生产者不可见。要解决此问题,您要么需要包括
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="(username)" password="(password)";
在您的
ssl.properties
文件中,或将其导出到您的路径中export KAFKA_OPTS="-Djava.security.auth.login.config=path/to/jaas.conf"
关于apache-kafka - 在JAAS或Kafka配置中未定义serviceName(不是Kerberos),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54989683/