当前位置: 首页 > 科技观察

Kafka消息存储和检索

时间:2023-03-17 22:53:18 科技观察

Kafka是一个分布式消息队列系统。消息存储在集群服务器的硬盘中。Kafka可以创建多个称为主题的消息队列。消息生产者向主题发布消息。消费者从主题中获取大量消息。为了消息的读写性能,主题被分成多个部分,称为分区。Kafka将每个主题的每个分区均匀分布在集群中的不同服务器上。所以从整体上看,Kafka的逻辑关系是:生产者向主题中的一个分区发送消息,消费者从分区中获取消息。在实际的存储结构中,分区并不是一个存放消息的物理文件,而是一个目录。命名规则是主题名加上分区序号,包含了本分区的N个段存储文件段。分段存储也是因为分区内容很大,分成小文件更容易写入和检索消息。段不是文件,而是由两个物理文件组成:.index索引文件和.log消息内容文件。这两个文件成对出现,名称相同但后缀不同。实际的存储结构是这样的,消息是按顺序生成的,所以每条消息都有一个序号,叫做offset,表示消息在partiion中的个数。从0开始,每个segment在offset区间内存储一条消息。段文件以偏移区间起始值命名,长度固定20位,不足的位用0补齐。例如存储第0-20条消息,段文件为:000000000000000000000.index00000000000000000000.logindex文件结构很简单,每一行是一个key,值对key是消息的序号offsetvalue是消息物理位置的偏移量,比如1,03,2996,497...它显示了第一条消息的物理位置在哪里,以及消息的实际内容保存在日志文件中的什么位置,以及消息的偏移量,消息大小等消息检索过程的示例等相关信息消息,消息查看代码和消息数据各各个区间区间例如例如例如例如例如例如例如例如区间序号个个个个个个个个个序号序号序号序号序号序号序号序号序号序号个个个区间区间序号区间区间个个个个个区间个区间区间og文件中(2)从index文件中找到其物理偏移以368为key读取00000000000000000300.index得到值,比如299,就是消息的物理位置偏移(3)读取消息内容在日志文件并读取00000000000000000300.log从偏移量299开始读取消息内容,完成消息的检索过程

猜你喜欢