Kafka底层数据存储设计
topic——>partitions——>segments——>.index&.log
-
Kafka中的消息是以topic为基本单位进行组织和分类;
-
每个topic分为多个partition,partition是以文件的形式存储在文件系统中,由参数
log.dir
配置。如创建了名为first_topic
的topic,共有3个分区,那么在其数据目录中就会自动创建3个目录:first_topic-0
、first_topic-1
、first_topic-2
。partition命名规范:topic_name+”-“+partition_id
; -
每个partition又被分为多个大小相等的segment,由参数
log.segment.bytes
配置,默认1GB。Kafka中写入日志的方式是以顺序追加的方式写入的,当日志文件大小达到一定大小就会做切分,形成一个新的日志文件,这里可以把一个一个的日志文件作为一个日志段。日志段的引入方便了Kafka数据的查询(二分查找)与定位。日志段分为活跃日志段和非活跃日志段,只有活跃日志段(当前日志段,一个分区只可能存在一个)可以被写入和读取,非活跃日志段只能被读取;