Kafka-日志存储

本文详细介绍了Kafka的日志管理机制,包括偏移量索引和时间戳索引的构建,如何通过二分查找快速定位日志条目。日志分段后使用ConcurrentSkipListMap保存,确保根据偏移量和时间戳高效检索。同时,讨论了日志清理策略,如按条件删除和消息Key的整合。此外,还分析了Kafka实现高吞吐量存储的原因,如磁盘顺序写入、页缓存以及零拷贝技术的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日志索引

  • 索引文件以稀疏索引的方式构造消息的索引,每当写入一定量,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项。
  • 俩个索引文件采用二分查找快速定位

偏移量索引

  • 日志分段后,为每个日志对象使用ConcurrentSkipListMap来保存各个日志分段,每个日志分段的baseOffset作为key,这样可以根据指定偏移量快速定位到消息所在的日志分段

时间戳索引

  • 新追加的时间戳索引项中的timestamp必须大于之前追加的索引中的timestamp
  • 日志分段处理同偏移量索引
  • 俩个文件增加索引是同时进行的,但位置可能不同

日志清理

日志删除:按照一定条件进行删除

日志压缩:对消息的Key进行整合

日志存储

  • Kafka依赖于文件系统(磁盘)来进行存储

高吞吐量的存储层次原因

  • 磁盘的顺序写入
  • 采用页缓存机制
    • 由于进程内部的内存消耗,以及重启之后内存的重建,GC问题
  • 零拷贝
    • 依赖于底层的sendFile方法
    • 请求内核把磁盘中的数据传输给Socket
    • 省去Socket Buffer过程
    • 经历过2次磁盘复制,上下文切换2次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值