我尝试在Flume中设置KafkaChannel(或KafkaSource)。我经常收到以下异常
由以下原因引起:javax.security.auth.login.LoginException:无法登录: 要求客户端输入密码,但 Kafka 客户端代码 当前不支持从用户处获取密码。 确保将 -Djava.security.auth.login.config 属性传递给 JVM 并且客户端配置为使用票证缓存 (使用 JAAS 配置设置"useTicketCache=true)"。 确保您使用的是您尝试使用的 Kafka 代理的 FQDN 连接到。不可用于从用户获取身份验证信息
我jaas.conf
如下:
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
serviceName="kafka"
keyTab="flume-kafka.keytab"
principal="flume/kafka@MYDOMAIN.COM";
};
我已经通过以下途径向Flume提供了此确认
JAVA_OPTS="$JAVA_OPTS -Djava.security.auth.login.config=/path/to/jaas.conf "
最后我指定了
agent.channels.myChannel.kafka.consumer.security.protocol = SASL_PLAINTEXT
有没有人知道为什么Flume不使用keyTab?如果需要更多详细信息,请告诉我。
根据 kafka 文档,该sasl_plaintext已在版本0.10
中添加
SASL/GSSAPI (Kerberos) - 从版本 0.9.0.0 开始
SASL/普通 - 从版本 0.10.0.0 开始
SASL/SCRAM-SHA-256 和 SASL/SCRAM-SHA-512 - 从版本 0.10.2.0 开始
但是水槽版本仍然1.8
使用kafka_client_2.11_0.9.1.jar
.我认为这可能是水槽的错误。 你可以重写 flume-kafka-sink.jar 来修复这个错误。
卡夫卡文档
水槽卡夫卡水槽
KafkaClient 可以起诉粘贴的配置。
以上很好,但需要注意的事情如下 1. 非 Cloudera 用户的主体名称必须与 KLIST 中显示的完全一致。 2.非常基本,使用密钥选项卡文件的完整路径
如果使用"Kafka-console-consumer",则必须从命令行JAVA_OPTS下一个,如果使用Cloudera管理器,则必须在配置参数中
。如果使用 Kafka-console-consumer,请记住使用 --consumer.config 开关指向 client.properties 文件。
完成上述所有操作后,您可能仍会收到相同的错误。 这是由于ACL。 用户 Kafka 文档,并为上面使用的用户(包括 Kafka)设置 Kafka 主题的权限以允许访问。除非这样做,否则您将无法访问这些主题,并且将显示相同的错误。
愿你安好。
感谢这篇文章(原始),我注意到Cloudera提供的Flume 1.6文档中指定的KafkaClient
配置缺少一些选项。然后我查看了官方 Apache Flume 1.7 文档,注意到我错过了以下属性:
a1.channels.channel1.kafka.consumer.sasl.mechanism = GSSAPI
a1.channels.channel1.kafka.consumer.sasl.kerberos.service.name = kafka