首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache与spark 1.6.3的安全和非安全连接

Apache与spark 1.6.3的安全和非安全连接
EN

Stack Overflow用户
提问于 2017-08-01 10:20:49
回答 2查看 1.1K关注 0票数 0

当尝试使用Apache 1.6.3启用Kerberos启用Apache (0.9)时出错。动物园管理员版本为3.4.5,我必须连接到两个kafka。一种是启用keberos,另一种则不是,所以我不会在spark的额外java选项中设置java.security.auth.login.config属性。

代码语言:javascript
复制
Kafka Initialization failed: org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:648)
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:542)
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:524)
    at com.spark.receiver.helper.KafkaChannelHelper.initializeConnection(KafkaChannelHelper.java:277)
    at com.spark.receiver.helper.KafkaChannelHelper$2.run(KafkaChannelHelper.java:240)
Caused by: org.apache.kafka.common.KafkaException: java.lang.IllegalArgumentException: Could not find a 'KafkaClient' entry in `/home/user/kafka_client.conf`.
    at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:74)
    at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:60)
    at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:79)
    at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:577)
    ... 4 more
Caused by: java.lang.IllegalArgumentException: Could not find a 'KafkaClient' entry in `/home/user/kafka_client.conf`.
    at org.apache.kafka.common.security.kerberos.Login.login(Login.java:294)
    at org.apache.kafka.common.security.kerberos.Login.<init>(Login.java:104)
    at org.apache.kafka.common.security.kerberos.LoginManager.<init>(LoginManager.java:44)
    at org.apache.kafka.common.security.kerberos.LoginManager.acquireLoginManager(LoginManager.java:85)
    at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:55)
    ... 7 more

java.security.auth.login.config是在消费者itself.The代码中设置的,连接到kafkaConsumer的代码是:

代码语言:javascript
复制
public void initializeConnection() {
    props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_PLAINTEXT");
         System.setProperty("java.security.auth.login.config", jassFilePath);
        try {
            this.consumer = new KafkaConsumer<String, byte[]>(props);
        } catch (Exception e) {
            LOGGER.error("Kafka Initialization failed: ", e);
        }
    }

kafka_client.conf只包含以下部分:

代码语言:javascript
复制
KafkaClient{
    com.sun.security.auth.module.Krb5LoginModule required
    debug=true
    useKeyTab=true
    keyTab="/etc/security/keytabs/user.keytab"
    storeKey=true
    principal="user@REALM"
    serviceName="kafka";
};
EN

回答 2

Stack Overflow用户

发布于 2018-01-02 15:51:10

在向安全环境发布/使用数据或从安全环境中发布/使用数据之前,应考虑两点:

  • 配置security.protocol
代码语言:javascript
复制
Properties props = new Properties();
props.put("security.protocol", "PLAINTEXTSASL");
  • 传递jaas配置和java vm选项
代码语言:javascript
复制
java -Djava.security.auth.login.config=/home/kafka-user/kafka-jaas.conf \
-Djava.security.krb5.conf=/etc/krb5.conf \
-Djavax.security.auth.useSubjectCredsOnly=false \
-cp hdp-kafka-sample-1.0-SNAPSHOT.jar:/usr/hdp/current/kafka-broker/libs/* \
hdp.sample.KafkaProducer one.hdp:6667 test

查看安全-卡夫卡-java-生产者-与-kerberos以获得完整的解释。

票数 1
EN

Stack Overflow用户

发布于 2019-04-30 03:13:44

我也有类似的问题卡夫卡1.11.0。

同一JVM中的监视程序正在访问多个代理程序,一些代理程序使用SASL Kerberos,而其他代理程序则不安全。

该参数由程序self在访问安全群集时添加。

代码语言:javascript
复制
-Djava.security.auth.login.config=/home/kafka-user/kafka-jaas.conf

但是程序抛出了一个异常:

代码语言:javascript
复制
Could not find a 'KafkaClient' entry in the JAAS configuration. System property 'java.security.auth.login.config' is /path/to/jaas/kafka_client_jaas_usekeytab.conf

奇怪的是,java.security.auth.login.config确实是正确设置的,而且这个文件中的内容也很好。

另一个带有单个集群的程序运行良好。

卡夫卡官方文件卡夫卡客户端的JAAS配置说:

代码语言:javascript
复制
Clients may specify JAAS configuration as a producer or consumer property without creating a physical configuration file. 

This mode also enables different producers and consumers within the same JVM to use different credentials by specifying different properties for each client. 

If both static JAAS configuration system property java.security.auth.login.config and client property sasl.jaas.config are specified, the client property will be used.

这里说的另一个问题是:

他只面对java.security.auth.login.config的一些问题。

也许解决办法是:

在您的程序中提供sasl.jaas.config java.security.auth.login.config

我会试着为这个案子核实一下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45435201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档