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

从零学习Kafka:数据存储

下载好之后进行解压并进入到对应的目录。tar -xzf kafka_2.13-4.1.1.tgz cd kafka_2.13-4.1.1接着我们执行下面两条命令进行一些必要的配置。KAFKA_CLUSTER_ID$(bin/kafka-storage.sh random-uuid) bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties为了方便观察文件切分我把 segment 文件大小调整为了 1MB具体修改方法为编辑 config/server.properties 文件修改log.segment.bytes参数的数值。修改好之后就可以启动 Kafka 集群了。bin/kafka-server-start.sh config/server.properties可以观察日志看集群是否启动成功集群启动之后我们手动创建一个测试 topic。bin/kafka-topics.sh --create \ --bootstrap-server localhost:9092 \ --topic test-topic \ --partitions 2 \ --replication-factor 1接着可以使用 Kafka 提供的压测工具来写入一批数据。bin/kafka-producer-perf-test.sh \ --topic test-topic \ --num-records 50000 \ --record-size 100 \ --throughput -1 \ --producer-props bootstrap.serverslocalhost:9092这里我分两次写入每次写入了 50000 条数据每条数据大小 100 字节也就是一共写入了大约 10MB 数据。现在把目光投向/tmp/kraft-combined-logs这个目录。如果没有这个目录需要看一下集群配置的目录。Broker 根目录首先来看第一级目录drwxr-xr-x 10 wheel 320 1月 31 00:25 __cluster_metadata-0 -rw-r--r-- 1 wheel 355 1月 31 00:14 bootstrap.checkpoint -rw-r--r-- 1 wheel 0 1月 31 00:14 cleaner-offset-checkpoint -rw-r--r-- 1 wheel 4 1月 31 00:52 log-start-offset-checkpoint -rw-r--r-- 1 wheel 122 1月 31 00:14 meta.properties -rw-r--r-- 1 wheel 42 1月 31 00:52 recovery-point-offset-checkpoint -rw-r--r-- 1 wheel 42 1月 31 00:52 replication-offset-checkpoint drwxr-xr-x 23 wheel 736 1月 31 00:33 test-topic-0 drwxr-xr-x 27 wheel 864 1月 31 00:33 test-topic-1这里一共有 9 个文件目录大体上可以分为三类集群元数据、数据目录和 Checkpoint 文件。集群元数据meta.properties是 Broker 的身份证这里记录了 Cluster ID 和 Node ID。bootstrap.checkpoint用于记录集群初始化信息。__cluster_metadata-0是一个特殊的数据目录它记录了集群的元数据因此我将其归类到集群元数据中。数据目录test-topic-0和test-topic-1这两个目录就是我们 test-topic 的两个 partition 存储数据的目录待会儿再详细分析目录下的内容现在你只需要知道 Kafka 是以 topic名 partitionId 来命名数据目录的。Checkpoint 文件剩下的都是 checkpoint 文件是用于宕机重启后的快速恢复的。cleaner-offset-checkpoint这是清理检查点文件只有设置了cleanup.policycompact时才有用它记录了上一次 Log Compact 各个 partition 已清理的偏移量。log-start-offset-checkpoint日志起始位置记录每个分区第一个有效的 Offset。recovery-point-offset-checkpoint记录每个 partition 已刷盘的 Offset。replication-offset-checkpoint记录每个 partition 已同步的 Offset这里记录的就是 High Watermark。Partition 存储结构现在我们再来看下数据目录下的各个文件的作用是什么。核心三兄弟首先来介绍数据存储的核心分别是.log、.index和.timeindex文件每个 Segment 都会有这三个文件它们的文件名都是文件内存的第一条消息的 Offset。log 文件.log是消息数据文件Kafka 接收的消息都会顺序写入到这个文件中。可以通过下面这个命令查看文件的内容~/workspace/kafka_2.13-4.1.1/bin/kafka-dump-log.sh --files test-topic-0/00000000000000009472.log --print-data-log可以看到 log 文件中存储的主要是 Offset 和具体的序列化后的数据。index 文件.index文件是偏移量索引文件这里的索引是稀疏索引文件内存储的是 Offset 到 log 文件位置的映射。我们使用下面这条命令来查看文件内容~/workspace/kafka_2.13-4.1.1/bin/kafka-dump-log.sh --files test-topic-0/00000000000000009472.index --deep-iterationKafka 默认每 4KB 数据写入一次索引这个值可以通过log.index.interval.bytes参数调整。timeindex 文件.timeindex是时间戳索引文件用来支持 by_duration 按照时间回溯。查看文件内容的方法与查看 index 文件的方法类似~/workspace/kafka_2.13-4.1.1/bin/kafka-dump-log.sh --files test-topic-0/00000000000000009472.timeindex --deep-iteration我们在定位数据时可以通过二分法在 index 索引文件中找到对应的数据位置或者最接近的位置也可以先通过时间在 timeindex 文件中找到最接近的 Offset再到 index 文件中找到数据位置。辅助文件除了上述三个核心文件之外在数据目录中还有三种辅助文件我们来看下它们的作用。.snapshot文件是用来记录事务快照的。用于 Exactly-Once 语义如果 Broker 宕机可以通过加载这个文件知道 Producer 之前发送到哪里了防止数据重复。查看文件内容的方法如下~/workspace/kafka_2.13-4.1.1/bin/kafka-dump-log.sh --files test-topic-0/00000000000000009472.snapshotleader-epoch-checkpoint文件是一个 Leader “任期表”它记录了每一任 Leader 开始工作时的 Offset主要用于在选主时保证数据一致性。partition.metadata文件是 Partition 的“身份证“它存储了 Topic ID。Page Cache至此我们已经比较细致的了解了 Kafka 底层存储结构。到这里不知道你会不会有疑问Kafka 是写磁盘的为什么速度还会这么快Kafka 在操作磁盘时重度依赖操作系统的 Page Cache 功能这个功能就是 Kafka 性能高的原因之一。简单来说Page Cache 就是在读取磁盘时操作系统会把读到的数据放到内存中一份这块内存就是 Page Cache。在 Kafka 的应用场景中Producer 写入顺序写入数据时操作系统会先把数据写到 Page Cache然后异步刷盘。在 Consumer 消费数据时由于大部分情况下都是消费最新数据因此要读的数据大概率还在 Page Cache 中 操作系统可以直接从内存中返回。题外话Kafka 为什么不自己维护一套缓存机制呢我觉得主要有以下原因避免 GC 开销如果自己在 JVM 内存中维护缓存那么会带来很大的 GC 压力。如果用操作系统的 Page Cache就完全不用担心 GC 问题。Page Cache 对内存的利用率更高如果 Kafka 进程重启Page Cache 也还会在内存中数据不需要重新加载。逻辑简单Kafka 只需要负责读写操作剩下的缓存维护逻辑全部交给操作系统。总结本文我们了解了 Kafka 物理层面的数据存储。在 Broker 根目录下有集群元数据、数据目录、Checkpoint 文件三种类型的文件目录。在数据目录中最核心的三种文件是.log、.index和.timeindex三种文件它们分别存储了数据、稀疏 Offset 索引以及时间戳与 Offset 的映射。

相关文章:

从零学习Kafka:数据存储

下载好之后,进行解压并进入到对应的目录。tar -xzf kafka_2.13-4.1.1.tgz cd kafka_2.13-4.1.1接着我们执行下面两条命令进行一些必要的配置。KAFKA_CLUSTER_ID"$(bin/kafka-storage.sh random-uuid)"bin/kafka-storage.sh format --standalone -t $KAFKA…...

libusb+zadig实战:Windows USB设备驱动快速配置指南

1. 为什么需要libusb和zadig组合? 如果你在Windows系统上开发过USB设备应用,大概率遇到过这样的场景:明明代码逻辑没问题,设备也连接正常,但程序就是无法正常访问USB设备。这种情况往往是因为Windows系统的安全机制在…...

从MySQL/Oracle迁移到达梦DM8,我踩过的那些坑和高效避坑指南

从MySQL/Oracle迁移到达梦DM8:实战避坑与高效适配指南 当国产化浪潮席卷关键行业基础设施,达梦数据库作为信创生态的核心成员,正成为越来越多企业技术栈中的必选项。我曾主导过三个大型项目的数据库国产化迁移工作,从最初的磕磕绊…...

从零到一:构建智能AI代理的提示工程实战指南

从零到一:构建智能AI代理的提示工程实战指南 【免费下载链接】Prompt-Engineering-Guide dair-ai/Prompt-Engineering-Guide: 是一个用于指导对话人工智能开发的文档。适合用于学习对话人工智能开发和自然语言处理。特点是提供了详细的指南和参考资料,涵…...

国风美学模型与卷积神经网络(CNN)结合:风格迁移与质量增强

国风美学模型与卷积神经网络(CNN)结合:风格迁移与质量增强 最近在尝试用AI生成国风图像时,我遇到了两个挺实际的问题。一个是生成的图片虽然意境不错,但风格上总觉得少了点传统水墨丹青的韵味;另一个是&am…...

【ComfyUI】Qwen-Image-Edit-F2P 实战:基于Transformer架构的人脸图像风格迁移

ComfyUI Qwen-Image-Edit-F2P 实战:基于Transformer架构的人脸图像风格迁移 最近在折腾AI图像生成,发现了一个挺有意思的模型——Qwen-Image-Edit-F2P。它不像那些通用的文生图模型,而是专门针对图像编辑,尤其是在人脸风格迁移上…...

NeMo Voice Agent:企业级语音助手框架的技术架构与性能分析

NeMo Voice Agent:企业级语音助手框架的技术架构与性能分析 【免费下载链接】NeMo NVIDIA/NeMo: 是一个用于实现语音和自然语言处理的开源框架。适合在需要进行语音和自然语言处理的任务中使用。特点是提供了一种简单、易用的 API,支持多种语音和自然语言…...

深入解析ACS SPiiPlus运动控制器的托管接口设计与实现

1. ACS SPiiPlus运动控制器托管接口概述 在工业自动化领域,运动控制器的性能直接影响着设备的精度和效率。ACS SPiiPlus系列作为业内知名的高性能运动控制器,其托管接口设计一直是工程师们关注的焦点。这套接口本质上是一套软件中间层,它架起…...

5分钟完成专业级图片修复:IOPaint PowerPaint V2颠覆传统编辑流程

5分钟完成专业级图片修复:IOPaint PowerPaint V2颠覆传统编辑流程 【免费下载链接】IOPaint 项目地址: https://gitcode.com/GitHub_Trending/io/IOPaint IOPaint PowerPaint V2是一款开源AI图片修复工具,通过创新性的条件注意力机制&#xff0c…...

实时语音合成全解析:技术原理、应用场景与未来展望

实时语音合成全解析:技术原理、应用场景与未来展望 引言 在人工智能浪潮席卷全球的今天,让机器“开口说话”已不再是科幻场景。实时语音合成(Real-Time TTS) 技术,作为连接数字世界与人类听觉的桥梁,正以…...

淘宝任务自动化:重复性操作的智能解放方案 | 每日节省20分钟

淘宝任务自动化:重复性操作的智能解放方案 | 每日节省20分钟 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi …...

智能家居系统部署终极指南:5分钟搞定全流程配置

智能家居系统部署终极指南:5分钟搞定全流程配置 【免费下载链接】operating-system :beginner: Home Assistant Operating System 项目地址: https://gitcode.com/gh_mirrors/op/operating-system Home Assistant Operating System(原HassOS&…...

cv_resnet101_face-detection_cvpr22papermogface 与数据库课程设计结合:构建人脸信息管理系统

cv_resnet101_face-detection_cvpr22papermogface 与数据库课程设计结合:构建人脸信息管理系统 1. 引言:从课堂理论到实战项目 如果你是一名计算机专业的学生,可能已经学过了数据库原理,也接触过一些人工智能的课程。但你是否想…...

用OB_Template实现笔记高效管理与知识沉淀:从入门到精通

用OB_Template实现笔记高效管理与知识沉淀:从入门到精通 【免费下载链接】OB_Template OB_Templates is a Obsidian reference for note templates focused on new users of the application using only core plugins. 项目地址: https://gitcode.com/gh_mirrors/…...

OpenClaw+GLM-4.7-Flash智能书签:自动归档网页内容

OpenClawGLM-4.7-Flash智能书签:自动归档网页内容 1. 为什么需要智能书签管理 作为一个每天需要浏览大量技术文档和行业资讯的开发者,我发现自己陷入了"收藏即遗忘"的困境。Chrome书签栏里堆满了未分类的链接,Evernote里塞着杂乱…...

Comsol瓦斯抽采:深入探索复杂的地下奥秘

comsol瓦斯抽采 该案例涉及不同抽采数学模型理论 不同渗透率模型、有效应力分布媒体变形情况、瓦斯抽采量瓦斯压力分布 涵盖不同地应力工况对比 有数个详细视频 视频涉及理论分析及推导、模型建立及案例操作过程在煤矿开采领域,瓦斯抽采是一项至关重要的技术&#x…...

终极指南:3步解锁iOS设备隐藏功能 - palera1n完整教程

终极指南:3步解锁iOS设备隐藏功能 - palera1n完整教程 【免费下载链接】palera1n Jailbreak for arm64 devices on iOS 15.0 项目地址: https://gitcode.com/GitHub_Trending/pa/palera1n 想要探索iOS系统更深层的功能吗?palera1n为你提供了一个简…...

TSmaster 曲线窗口(Graphic)的X/Y轴优化与信号分离实战

1. TSMaster曲线窗口基础操作指南 第一次打开TSmaster的Graphic窗口时,很多人会被密密麻麻的曲线和参数搞得晕头转向。作为一个在汽车电子测试领域摸爬滚打多年的老司机,我清楚地记得自己刚开始使用时,光是找添加信号的按钮就花了十分钟。下面…...

5步精通MQTT性能测试:从插件部署到高并发压测实践指南

5步精通MQTT性能测试:从插件部署到高并发压测实践指南 【免费下载链接】mqtt-jmeter MQTT JMeter Plugin 项目地址: https://gitcode.com/gh_mirrors/mq/mqtt-jmeter 在物联网应用架构中,MQTT协议以其轻量级特性成为设备通信的首选方案。随着设备…...

BiliTools跨平台哔哩哔哩工具箱:从入门到精通的全方位指南

BiliTools跨平台哔哩哔哩工具箱:从入门到精通的全方位指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bilit/…...

3步掌握高效网络数据采集:Scrapling智能反爬+异步处理实战指南

3步掌握高效网络数据采集:Scrapling智能反爬异步处理实战指南 【免费下载链接】Scrapling 🕷️ Undetectable, Lightning-Fast, and Adaptive Web Scraping for Python 项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapling 在当今数据驱…...

VDisk技术详解:原理、应用与优化实践指南

VDisk技术详解:原理、应用与优化实践指南传统的桌面运维管理面临效率和成本控制的双重挑战,例如操作系统和应用部署繁琐、维护更新困难、资源利用率低等。VDisk(虚拟磁盘)技术通过将操作系统、应用程序和用户数据集中存储在服务器…...

SegFormer完全指南:10分钟快速掌握基于Transformer的语义分割

SegFormer完全指南:10分钟快速掌握基于Transformer的语义分割 【免费下载链接】SegFormer Official PyTorch implementation of SegFormer 项目地址: https://gitcode.com/gh_mirrors/se/SegFormer SegFormer是一个简单、高效且强大的语义分割方法&#xff0…...

Release It! 终极自动化发布工具:5分钟配置完整版本管理流程

Release It! 终极自动化发布工具:5分钟配置完整版本管理流程 【免费下载链接】release-it 🚀 Automate versioning and package publishing 项目地址: https://gitcode.com/gh_mirrors/re/release-it Release It! 是一款强大的自动化发布工具&…...

造相-Z-Image实战案例:4步生成写实质感人像,RTX 4090低步高效实测

造相-Z-Image实战案例:4步生成写实质感人像,RTX 4090低步高效实测 1. 项目简介 造相-Z-Image是一个专门为RTX 4090显卡优化的本地文生图系统,基于通义千问官方的Z-Image模型打造。这个项目最大的特点就是完全针对个人显卡进行深度优化&…...

嵌入式Telnet服务器库:轻量级MCU远程调试方案

1. TelnetServer 库概述TelnetServer 是一个轻量级、可移植的嵌入式 Telnet 服务器实现库,专为资源受限的 MCU 环境设计。它不依赖 POSIX socket API 或完整 TCP/IP 协议栈抽象层(如 LwIP 的 netconn 接口),而是直接对接底层网络驱…...

探索开源字体商用解决方案:思源宋体TTF的多场景应用与价值解析

探索开源字体商用解决方案:思源宋体TTF的多场景应用与价值解析 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 副标题:免费商用授权与多场景适配的专业中文字体…...

LLM4Decompile:用AI魔法让二进制代码重获新生![特殊字符]

LLM4Decompile:用AI魔法让二进制代码重获新生!🚀 【免费下载链接】LLM4Decompile LLM4Decompile是前端技术的革新之作,面向软件逆向工程领域的革命性工具。此开源项目利用大型语言模型深入二进制世界的奥秘,将复杂的机…...

Duix-Avatar全离线数字人创作平台深度指南:从部署到高级应用

Duix-Avatar全离线数字人创作平台深度指南:从部署到高级应用 【免费下载链接】Duix-Avatar 项目地址: https://gitcode.com/GitHub_Trending/he/Duix-Avatar 价值解析:Duix-Avatar的SWOT战略分析 优势(Strengths) 全栈本地化架构:所…...

Lua代码混淆实战:基于Prometheus的Unity项目保护指南

1. 为什么你的Unity项目需要Lua代码混淆 最近有个做独立游戏的朋友跟我吐槽,他花半年开发的游戏上线不到一周就被破解了。更气人的是,破解版直接去掉了内购系统,还挂在第三方平台免费下载。这种情况在游戏圈太常见了,特别是使用Lu…...