当前位置: 首页 > news >正文

kafka logs storage

Kafka 会将日志文件按段(Segment)存储。
Segment是Kafka的最小存储单元,它是一个可追加的文件,用于存储Kafka分区中的一部分消息。
在文件系统中,Partition 是目录名,而Segment 是文件名。

Segment可以通过下面的配置来控制滚动和清理。

log.segment.bytes=1073741824      # 每个 segment 最大 1GB
log.segment.ms=604800000          # 每 7 天切一个新 segment
log.retention.hours=168           # 168 小时后旧段可被删除
cleanup.policy=delete             # 设置删除策略

📁 Segment 文件组成

Kafka 会为每个 segment 创建一组文件,位于某个partition的目录下,例如:

bash-4.4$ ls -lh /opt/kafka/data/logs/my-topic-0
total 216K
-rw-r--r-- 1 202390 10000  10M May  8 06:29 00000000000000000000.index
-rw-r--r-- 1 202390 10000 196K May  8 06:30 00000000000000000000.log
-rw-r--r-- 1 202390 10000  10M May  8 06:29 00000000000000000000.timeindex
-rw-r--r-- 1 202390 10000    8 May  8 02:54 leader-epoch-checkpoint
-rw-r--r-- 1 202390 10000   43 May  8 02:54 partition.metadata
文件类型后缀说明
.log主数据文件,存储消息本体(key/value)
.index根据 offset 建立的稀疏索引,便于定位
.timeindex根据时间戳的索引,用于基于时间的查找
.snapshot(事务日志)支持事务性读写
leader-epoch-checkpoint用于记录 leader 任期信息(确保 ISR 一致性)

这些文件中的 00000000000000000000 表示这个 segment 的起始 offset

一个partition 可以有多组segments.


🧱 Kafka 中 segment 的作用

功能说明
分割日志文件防止一个 partition 文件无限增长
支持时间/大小滚动可配置最大时间或大小
清理目标单位Kafka 的数据清理(删除或压缩)以 segment 为单位
快速查找消息每个 segment 有对应的 .index.timeindex 文件
降低内存压力分段可以控制内存索引的加载大小

🔧 Segment 的滚动(roll over)

Kafka 会根据如下条件创建新的 segment:

条件对应配置项
达到最大字节数segment.bytes(默认 1GB)
达到最大时间segment.ms(默认 7 天)
手动 flush/滚动API 控制或管理工具操作

一旦新 segment 被创建,旧的 segment 就变成“sealed”,不能再写入,只能读取、压缩或删除。


🗑️ Segment 与数据清理策略

Kafka 的两种主要数据清理策略都以 segment 为操作单位:

清理策略说明
deleteKafka 会定期删除超过保留时间/大小的旧 segment。
compactKafka 会对旧 segment 进行压缩,保留每个 key 的最新 value。

⚠️ 当前写入的 segment(active segment)不会被清理或压缩,只有旧的 segment 会成为目标。


🧠 示例图解(假设 segment 每 100 条消息切换)

Partition: my-topic-0┌────────────┬────────────┬────────────┬────────────┐│ Segment A  │ Segment B  │ Segment C  │  Active    ││ (offset 0) │ (100)      │ (200)      │ (300~now)  │└────────────┴────────────┴────────────┴────────────┘
  • Segment A/B/Csealed,可被清理。
  • 最后一个 segment 是 active segment,不断追加写入,不会被清理。

✅ 总结:Segment 是 Kafka 存储的基本块

特性说明
顺序追加高效写入磁盘
可被删除或压缩支持灵活的数据生命周期管理
可快速索引查找借助 .index.timeindex 实现高效定位
有助于持久性和故障恢复数据持久化到磁盘,可随时恢复

Reference

kafka 日志文件segment

http://www.xdnf.cn/news/342091.html

相关文章:

  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(16):单词与句子
  • Element-ui Table tree 结构使用(解决无展开箭头)
  • (14)Element Plus项目综合案例
  • 基础算法系列——树的入门
  • kafka records deletion policy
  • 如何设置内网映射端口到外网访问?哪些软件可以进行端口映射?
  • 2025.05.07-携程春招笔试第二题
  • flutter build apk出现的一些奇怪的编译错误
  • K8s网络从0到1
  • 《易语言学习大全》
  • k8s术语之DaemonSet
  • [python] 函数基础
  • 深入解析asyncio的实现与应用
  • C#简易Modbus从站仿真器
  • 如何将 Build at、Hash 和 Time git 的 Tag 号等构建信息,自动写入一个 JSON 文件
  • sql serve 多表联合查询,根据一个表字段值动态改变查询条件
  • 【Dify系列教程重置精品版】第七章:在Dify对话中显示本地图片之FastAPI与Uvicorn
  • PCL点云按指定方向进行聚类(指定类的宽度)
  • mission planner烧录ardupilot固件报错死机
  • ESP32开发之freeRTOS的互斥量
  • 网络协议之DHCP和PXE分析
  • QT中多线程的实现
  • Rust包、crate与模块管理
  • 领域驱动设计(DDD)解析
  • 2025年4月AI算力领域热点事件全景报告
  • 配置Hadoop集群环境-使用脚本命令实现集群文件同步
  • 手撕基于AMQP协议的简易消息队列-1(项目介绍与开发环境的搭建)
  • uniapp|实现多终端聊天对话组件、表情选择、消息发送
  • onlyoffice 源码调试指南-ARM和x86双模式安装支持
  • 前端面试宝典---JavaScript import 与 Node.js require 的区别