Kafka日志目录布局
文件结构
Kafka中的消息是以主题为基本单位进行归类的,各个主题以逻辑上是独立的。每个主题又可以分为一个或多个分区,分区的数量是在主题创建时指定的。
一个分区对应一个日志(Log),为了防止日志过大,引入了日志分段(LogSegment)概念,切分成多个较小文件。
Log在物理上只以文件夹的形式存储,而每个LogSegment对应磁盘上的日志文件和两个索引文件,以及可能的其他文件。
检索文件
Parition是以文件的形式存储在文件系统中,比如,在Kafka的数据目录中(config/server.properties-log.dirs指定)中就有这样3个目录:
1 hadoop@ubuntu:/usr/local/kafka_2.11$ ls /tmp/kafka-logs*
2 /tmp/kafka-logs:
3 cleaner-offset-checkpoint meta.properties recovery-point-offset-checkpoint replication-offset-checkpoint
4
5 /tmp/kafka-logs-1:
6 cleaner-offset-checkpoint meta.properties recovery-point-offset-checkpoint replication-offset-checkpoint
7
8 /tmp/kafka-logs-2:
9 cleaner-offset-checkpoint meta.properties recovery-point-offset-checkpoint replication-offset-checkpoint
partition也是以文件的形式存储在文件系统中,创建一个topic示例;
1 hadoop@ubuntu:/usr/local/kafka_2.11$ bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic topic-create --partitions 3 --replication-factor 2
查看log对应的文件:
1 hadoop@ubuntu:/tmp/kafka-logs$ la -al | grep topic-create 2 drwxrwxr-x 2 hadoop hadoop 4096 Nov 20 14:30 topic-create-1 3 drwxrwxr-x 2 hadoop hadoop 4096 Nov 20 14:30 topic-create-2
1 hadoop@ubuntu:/usr/local/kafka_2.11$ ls /tmp/kafka-logs/topic-create-1/ 2 00000000000000000000.index 00000000000000000000.log 00000000000000000000.timeindex
为了消息的检索,每个LogSegment中的日志文件(以".log"为文件后缀)都有对应的两个索引文件:偏移量索引文件(以".index"为文件后缀)和时间戳索引文件(以".timeindex"为文件后缀)。
每个LogSegment都有一个基准偏移量baseOffset,用来表示当前LogSegment中第一条消息的offset,名称固定为20位数字,没有达到位数的用0填充,如上例;