kafka 工作流程及文件存储机制

 

 

 

1、kafka的数据存储 

     文件存储格式: .log 和 .index

  Kafka 中消息是以 topic 进行分类的, 生产者生产消息,消费者消费消息,都是面向 topic的。

  topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。

消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费。

  kafka 工作流程及文件存储机制

 

 

 

  如图:由于生产者生产的消息会不断追加到 log 文件末尾, 为防止 log 文件过大导致数据定位效率低下, Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。

  每个 segment对应两个文件——“.index”文件和“.log”文件。 这些文件位于一个文件夹下, 该文件夹的命名规则为: topic 名称+分区序号。例如, first 这个 topic 有三个分区,则其对应的文件夹为 first-0,first-1,first-2。

 kafka 工作流程及文件存储机制

 

 

kafka 工作流程及文件存储机制

 

 

 

  “.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message 的物理偏移地址。

   文件根据大小拆分成多个分片,.index存储offset、数据位置; .log存储数据;通过index的offet和数据位置 找到在log中数据

 

比如:要查找绝对offset为7的Message:

  1. 首先是用2分查找肯定它是在哪一个LogSegment中,自然是在第1个Segment中。
  2. 打开这个Segment的index文件,也是用2分查找找到offset小于或等于指定offset的索引条目中最大的那个offset。自然offset为6的那个索引是我们要找的,通过索引文件我们知道offset为6的Message在数据文件中的位置为9807。
  3. 打开数据文件,从位置为9807的那个地方开始顺序扫描直到找到offset为7的那条Message。

这套机制是建立在offset是有序的。索引文件被映照到内存中,所以查找的速度还是很快的。

1句话,Kafka的Message存储采取了分区(partition),分段(LogSegment)和稀疏索引这几个手段来到达了高效性。

 

相关文章:

  • 2021-12-20
  • 2021-11-24
  • 2021-12-05
  • 2021-11-13
  • 2021-05-01
猜你喜欢
  • 2021-10-16
  • 2021-11-23
  • 2021-07-21
  • 2022-01-19
  • 2022-12-23
  • 2021-06-25
  • 2021-07-18
相关资源
相似解决方案