文件結構
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填充,如上例;