kafka
日志
查看日志内容
log日志文件是二进制文件,无法通过文本查看,但是可以通过kafka.tools.DumpLogSegments类的方法,可以查看日志的内容。
bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files ./logs1/demo1-0/00000000000000000000.log --print-data-log
–print-data-log选项,可以显示日志文件中每条消息推送的内容
另外还有两个文件,index文件存放的是topic的offset,timeindex是存放的是时间戳
日志格式
日志每一条消息的格式如下,不算消息长度,共有34字节。因为没有key,所以‘hello world’这一条消息占用了35个字节,下一条消息从position35开始。
offset: 4bytes
position: 4bytes
offset: 8 bytes
message length: 4 bytes
crc: 4 bytes
magic value: 1 byte
attributes: 1 byte
timestamp: 8 bytes (Only exists when magic value is greater than zero)
key length : 4 bytes
key: K bytes
value length: 4 bytes
value: V bytes
consumer
上面讲完了消息存储,那么consumer的offset是怎么存储的呢?consumer有两种消息方式,一种是存放在broker的日志目录中,另一种方式是存放在zookeeper中。两种存放方式和你使用kafka-console-consumer命令使用的选项有关。如果使用的是bootstrap-server,那么就存放在broker;如果使用的是–zookeeper那么就存放在zookeeper。
broker存储offset
broker存放offset是kafka从0.9版本开始,提供的新的消费方式。原因是zookeeper来存放,还是有许多弊端,不方便灵活控制,效率不高。
下面使用consumer命令,消费刚才推送的消息,这里我消费的是分区0中的消息,offset从5开始。
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic demo1 --partition 0 --offset 5
打印所有的消费组名称
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
查看消费明细,可以看到,我已经消息到第11条数据了。
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --desc --group console-consumer-33936
group zookeeper
下面通过zookeeper的方式消费数据
kafka-console-consumer.sh --zookeeper localhost:2181/kafka1 --topic demo1 --from-beginning
打印所有的消费组名称
kafka-consumer-groups.sh --zookeeper localhost:2181/kafka1 --list
查看消费明细,可以看到,我已经消息到第11条数据了。
kafka-consumer-groups.sh --zookeeper localhost:2181/kafka1 --desc --group console-consumer-69524
当然,我们也可以通过zookeeper client来查看consumer的offset
总结
通过以上的步骤,可以查看到消息的推送到broker的日志文件,查看消息推送的内容、offset和时间等信息。另外,可以我们也查看到消息端读取消息的offset位置。能够更深入的了解kakfa的工作原理。