目录标题
Kafka 中的日志主要分为多个文件类型,其中包括:
server.log
:Kafka 服务的主日志文件,记录所有的运行信息、异常、警告等,最常用。state-change.log
:Kafka 控制器和 broker 状态变化相关的日志,主要用于追踪 broker 和 partition 的状态迁移、Leader 选举等状态切换操作。
🔍 state-change.log
是什么?
state-change.log
的主要作用是 记录 Kafka broker、partition、controller 等组件在状态之间切换的详细过程,包括:
- Partition 的 leader 和 follower 切换;
- Controller 的状态转移(如新 controller 被选举出来);
- 分区的状态机(PartitionStateMachine)执行的动作,如从
NonExistentPartition
->NewPartition
->OnlinePartition
的流程; - Broker 加入、下线、被踢出 ISR(in-sync replica)等过程。
这些信息对排查 leader 不可用、数据不同步、controller 频繁选举等问题非常关键。
📁 state-change.log
在哪里?
默认位置和 server.log
一样,取决于 Kafka 的日志路径设置:
# server.properties
log.dirs=/tmp/kafka-logs
log4j.appender.kafkaAppender.File=/opt/kafka/logs/server.log
日志输出是由 log4j.properties
控制的:
# 日志定义(通常在 config/log4j.properties 文件中)
log4j.logger.kafka.controller=INFO, controllerAppender
log4j.logger.kafka.server.StateChangeLogger=INFO, stateChangeAppender
log4j.appender.stateChangeAppender=org.apache.log4j.RollingFileAppender
log4j.appender.stateChangeAppender.File=/opt/kafka/logs/state-change.log
log4j.appender.stateChangeAppender.MaxFileSize=256MB
log4j.appender.stateChangeAppender.MaxBackupIndex=10
log4j.appender.stateChangeAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.stateChangeAppender.layout.ConversionPattern=[%d] %p %m (%c)%n
📝 你可以通过查看
config/log4j.properties
文件来确认state-change.log
的输出路径。
📌 如果没有 state-change.log
,怎么办?
- 可能你的 Kafka 没有显式配置
stateChangeAppender
; - Kafka 会将相关日志输出到
server.log
中; - 你可以修改
log4j.properties
手动添加stateChangeAppender
,并重启 Kafka;
✅ 示例日志内容(state-change.log)
[2025-06-26 15:02:17,344] INFO [PartitionStateMachine broker=1] Triggering online of partition [my-topic,0] (kafka.server.PartitionStateMachine)
[2025-06-26 15:02:17,345] INFO [PartitionStateMachine broker=1] Successfully transitioned partition [my-topic,0] from NewPartition to OnlinePartition. (kafka.server.PartitionStateMachine)
[2025-06-26 15:02:19,876] INFO [GroupCoordinator 1]: Group foo transitioned to Dead state. (kafka.coordinator.group.GroupCoordinator)
如需我帮你分析某段 state-change.log
或定位某个问题(如 leader 切换异常),欢迎贴出来我一起分析。