只是为了澄清一些事情:我说的是包含 stdout 和 stderr 消息的进程日志文件。
这是我的 systemd 单元文件:
[Unit]
Description=Apache Kafka server
Documentation=http://kafka.apache.org
Requires=network.target remote-fs.target
After=network.target remote-fs.target
[Service]
Type=simple
PIDFile=/var/run/kafka.pid
User=kafka
Group=kafka
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:/var/log/kafka"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
SyslogIdentifier=kafka
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了 KAFKA_LOG4J_OPTS 环境变量。
然而,这似乎没有任何作用。这是我尝试启动服务时的输出:
Feb 11 00:55:30 kafka01 kafka[4047]: mkdir: cannot create directory ‘/opt/kafka/bin/../logs’: Permission denied
Feb 11 00:55:30 kafka01 kafka[4047]: OpenJDK 64-Bit Server VM warning: Cannot open file /opt/kafka/bin/../logs/kafkaServer-gc.log due to No such file or directory
Feb 11 00:55:30 kafka01 kafka[4047]: log4j:WARN No appenders could be found for logger (kafka.Kafka$).
Feb 11 00:55:30 kafka01 kafka[4047]: log4j:WARN Please initialize the log4j system properly.
Run Code Online (Sandbox Code Playgroud)
那么,请有人告诉我更改 kafka 日志文件位置的正确方法吗?KAFKA_LOG4J_OPTS 不起作用,KAFKA_LOG_DIR 也不起作用(=我希望 kafka 实现了类似于 Zookeeper 的功能)。kafka 文档也没有告诉我。
对于像我这样不幸的小伙子,您需要修改LOG_DIR
环境变量(已针对 Kafka 进行测试v0.11
)。
如果您打开 scriptkafka-server-start
或/usr/bin/zookeeper-server-start
,您将在底部看到它调用kafka-run-class
脚本。您会在那里看到它LOG_DIR
用作服务日志的文件夹(不要与 kafka 主题数据混淆)。