Kafka中的消息是如何被存储的?

Kafka中的消息被存储在主题的分区中,每个分区是一系列消息的有序序列。消息在分区中的存储位置由offset唯一标识。
Kafka主要有两种消息存储格式:log文件格式和索引格式。
log文件格式:

  • Kafka默认使用的存储格式,简单高效。
  • 每个分区的消息存储在多个log文件中,每个log文件包含多个消息。
  • 每条消息有一个offset,用于标识其在分区中的位置,从0开始连续增加。
  • 消费者通过指定offset消费消息,offset由消费者维护并定期更新。
  • Kafka定期对log文件进行snapshot操作,将活跃的log文件合并至一个单独的log文件中。

    索引格式:
  • Kafka 0.11版本开始支持,提高消息查询效率。
  • 每个分区在log文件中同时维护一个索引,用于快速查找指定key的消息。
  • 索引以B树结构存储消息的offset和key等元数据。
  • 消费者可以通过key查找指定消息的offset,加速消息的查找过程。
  • 但索引会显著增加磁盘空间占用和维护开销,性能比log文件格式略低。
    所以简而言之,Kafka中的消息主要存储在分区的log文件中,以追加的方式写入,并以offset标识每个消息的位置。Kafka 0.11版本开始也支持索引格式,使用索引加速消息的查找过程。
    无论哪种存储格式,Kafka都具有高性能、高吞吐、持久化保证消息不丢失等特点。应用程序可以选择适合自己的消息存储格式,兼顾性能与功能。