kafka的文件存储机制:
Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。
topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,且每条数据都有自己的offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个offset (group +topic + partition),以便出错恢复时,从上次的位置继续消费。
由于生产者生产的消息会不断追加到log文件末尾,为防止log文件过大导致数据定位效率低下,Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment对应两个文件——“.index”文件和“.log”文件。index和log文件以当前segment的第一条消息的offset命名。
某条数据的offset记录自己在A.log中位置,根据offset的值和各个segment的.index文件的命名编号比较,可以判断出该条数据在那个segment,然后查询根据offset得出偏移量,根据偏移量查询.index中记录的字节读取位置,然后去.log文件中读取对应的数据。
整个分区存储在,配置的目录–log.dirs=/opt/module/kafka_2.11-2.4.1/datas下,文件夹名字自动生成,规则为:topic名称+分区序号。例如,first这个topic有三个分区,则其对应的文件夹为first-0,first-1,first-2。