apache-kafka - 在 JAAS 或 Kafka 配置(不是 Kerberos)中没有定义 serviceName

标签 apache-kafka kafka-producer-api apache-kafka-security

我正在尝试配置 kafka 客户端以针对安全的 kafka 服务器进行身份验证。我已经设置了 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 配置(不是 Kerberos)中没有定义 serviceName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54989683/

相关文章:

python - kafka-python 生产者 - SSL 连接失败 - 仅限 Trustore

java - Zookeeper集群设置

apache-kafka - 如何在 kafka 中列出生产者

java - 如何使用java修改一个kafka主题的消息并将其发送到另一个kafka主题?

java - ReplicaFetcher 崩溃 - 第一个偏移量 XXXXXXX 小于下一个偏移量 YYYYYYYY

java - 间歇性出现 KafkaProducerException : Failed to send org. apache.kafka.common.errors.TimeoutException

ssl - Apache kafka 消费者 java.security.cert.CertificateException : No subject alternative names present

apache-kafka - 使用幂等 Kafka Producer 时的排序保证

apache-kafka - 了解 Kafka poll()、flush() 和 commit()

apache-kafka - 在 'Server' 中找不到名为 '/kafka/kafka_2.12-2.3.0/config/zookeeper_jaas.conf' 的 JAAS 配置节