Log4j 附加程序身份验证

Log4j appender authentication

我知道我可以使用 log4j kafka appender 将日志消息从使用 log4j 的应用程序发送到 Apache Kafka。例如,

log4j.appender.KAFKA_HIVE_AUDIT=kafka.producer.KafkaLog4jAppender
log4j.appender.KAFKA_HIVE_AUDIT.BrokerList=sandbox.hortonworks.com:6667
log4j.appender.KAFKA_HIVE_AUDIT.Topic=hive_audit_log
log4j.appender.KAFKA_HIVE_AUDIT.layout=org.apache.log4j.PatternLayout
log4j.appender.KAFKA_HIVE_AUDIT.layout.ConversionPattern=%d{ISO8601} %-5p [%t]: %c{2} (%F:%M(%L)) - %m%n

此处描述:how to use Kafka 0.8 Log4j appender

我是 运行 Kafka 0.9,它启用了 kerberos。有没有办法让 log4j appender 对 Kafka 执行身份验证?某种服务帐户?

有没有办法让 java 程序所在的机器 运行 在 运行 log4j appender 之前通过 kerberos 向 Kafka 集群进行身份验证?

如果这不起作用,有没有办法通过机器在 kerberized Kafka 上向未经身份验证的生产者授予写入权限? (并且仍然需要对消费者进行 kerberos 身份验证)?

Kafka 是开源的,您为什么不直接检查代码 并弄清楚哪些属性与 Kerberos 相关以及如何使用它们?

快速查看 "trunk" 即 https://github.com/apache/kafka/blob/trunk/log4j-appender/src/main/java/org/apache/kafka/log4jappender/KafkaLog4jAppender.java 提示您必须附加 JAAS 配置文件,并指定要使用的 "context"在该文件中,以便 Kafka 客户端可以使用标准 Java 安全库。如果自定义 Kerberos 配置文件不在标准位置(即 /etc/krb5.conf),则可选择提供自定义 Kerberos 配置文件。

所以最后是理解 JAAS 的问题——并找出要设置的 Kafka and/or Log4J 属性。

而对于 Google,教程总是点击几下即可 -- 例如kerberized_kafka post.

如果你查看 Kafka 0.9 source,你会发现 KafkaLog4jAppender 不支持 Kerberos 身份验证,尽管它是为 Kafka 添加的生产者和消费者一般。

Kerberos 支持仅添加到版本 0.10 中的 KafkaLog4jAppender。

快速浏览一下代码,创建一个扩展 KafkaLog4jAppender 并添加 Kerberos 支持所需位的自定义附加程序似乎很简单。