Kafka日志索引详解以及生产常见问题分析与总结

Kafka 的核心集群机制,重点保证了在复杂运行环境下,整个 Kafka 集群如何保证 Partition 内消息
的一致性。这就相当于一个军队,有了完整统一的编制。但是,在进行具体业务时,还是需要各个 Broker 进行分工,各自处理好自己的工作。
每个 Broker 如何高效的处理以及保存消息,也是 Kafka 高性能背后非常重要的设计。这一章节还是按照之前的方式,从可见的Log 文件入手,来逐步梳理 Kafka 是如何进行高效消息流转的。 Kafka 的日志文件记录机制也是Kafka 能够支撑高吞吐、高性能、高可扩展的核心所在。对于业界的影响也是非常巨大的。比如RocketMQ就直接借鉴了 Kafka 的日志文件记录机制。
一、 Kafka Log 日志梳理
这一部分数据主要包含当前 Broker 节点的消息数据 ( Kafka 中称为 Log 日志 ) 。这是一部分无状态的数据,也就是说每个Kafka Broker 节点都是以相同的逻辑运行。这种无状态的服务设计让 Kafka 集群能够比较容易的进行水平扩展。比如你需要用一个新的Broker 服务来替换集群中一个旧的 Broker 服务,那么只需要将这部分无状态的数据从旧的Broker 上转移到新的 Broker 上就可以了。
1 Topic 下的消息是如何存储的?
在搭建 Kafka 服务时,我们在 server.properties 配置文件中通过 log.dir 属性指定了 Kafka 的日志存储目录。实际上,Kafka 的所有消息就全都存储在这个目录下。
这些核心数据文件中, .log 结尾的就是实际存储消息的日志文件。他的大小固定为 1G( 由参数
log.segment.bytes 参数指定 ) ,写满后就会新增一个新的文件。一个文件也成为一个 segment 文件名表示当前日志文件记录的第一条消息的偏移量。
.index .timeindex 是日志文件对应的索引文件。不过 .index 是以偏移量为索引来记录对应的 .log 日志文件中的消息偏移量。而.timeindex 则是以时间戳为索引。
这些文件都是二进制的文件,无法使用文本工具直接查看。但是, Kafka 提供了工具可以用来查看这些日志文件的内容。
这些数据文件的记录方式,就是我们去理解 Kafka 本地存储的主线。 对这里面的各个属性理解得越详细,也就表示对Kafka 的消息日志处理机制理解得越详细。
1 log 文件追加记录所有消息
首先:在每个文件内部, Kafka 都会以追加的方式写入新的消息日志。 position 就是消息记录的起点, size就是消息序列化后的长度。Kafka 中的消息日志,只允许追加,不支持删除和修改。所以,只有文件名最大的一个log 文件是当前写入消息的日志文件,其他文件都是不可修改的历史日志。
然后:每个 Log 文件都保持固定的大小。如果当前文件记录不下了,就会重新创建一个 log 文件,并以这个log文件写入的第一条消息的偏移量命名。这种设计其实是为了更方便进行文件映射,加快读消息的效率。
2 index timeindex 加速读取 log 消息日志。
详细看下这几个文件的内容,就可以总结出 Kafka 记录消息日志的整体方式:
首先: index timeindex 都是以相对偏移量的方式建立 log 消息日志的数据索引。比如说 0000.index 和0550.index中记录的索引数字,都是从 0 开始的。表示相对日志文件起点的消息偏移量。而绝对的消息偏移量可以通过日志文件名 + 相对偏移量得到。
然后:这两个索引并不是对每一条消息都建立索引。而是 Broker 每写入 40KB 的数据,就建立一条 index 索引。由参数log.index.interval.bytes 定制。
index 文件的作用类似于数据结构中的跳表,他的作用是用来加速查询 log 文件的效率。而 timeindex 文件的作用则是用来进行一些跟时间相关的消息处理。比如文件清理。
这两个索引文件也是 Kafka 的消费者能够指定从某一个 offset 或者某一个时间点读取消息的原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/153953.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac热门软件推荐Paste mac 中文激活版 剪切板工具

Paste for Mac是一款运行在Mac OS平台上的剪切板小工具。它拥有华丽的界面效果,并且每一条记录可显示(预览)文本、图片等记录的完整内容。此外,Paste for Mac可以记录最近指定条数的剪切板信息,方便用户随时调用&#…

【opencv】windows10下opencv4.8.0-cuda版本源码编译教程

【opencv】windows10下opencv4.8.0-cuda版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda版本源码编译教程前言准备工具cuda/cudnncmakeopencv4.5.0opencv_contrib CMake编译VS2019编译可…

【Java 进阶篇】CSS盒子模型详解

CSS盒子模型是网页布局的基础之一,它定义了HTML元素在页面上的占用空间和相互关系。理解CSS盒子模型对于构建各种类型的网页布局至关重要。在本文中,我们将深入探讨CSS盒子模型的各个方面,包括盒子模型的概念、属性和如何使用它们来控制元素的…

Data security.隐私保护-多方安全计算技术基础

文章目录 Data security.隐私保护-多方安全计算技术基础一、多方安全计算的背景1.定义2.分类2.1不诚实参与方数量2.2敌手行为2.3敌手计算能力2.4输出可达性2.5计算模型2.6腐化策略(攻击者确定攻破并控制参与方的策略)2.7通信网络 3.设计方法3.1秘密共享&…

如何在Apache和Resin环境中实现HTTP到HTTPS的自动跳转:一次全面的探讨与实践

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

设计模式 - 观察者模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 观察者模式属于行为型模式。在程序设计中,观察者模式通常由两个对象组成:观察者和被观察者。当被观察者状态发生改变时,它会通知所有的观察者对象,使他们能够及时做出响应&#xf…

rustlings本地开发环境配置

克隆自己的仓库 首先我们要在github上找到自己仓库并把它克隆到本地 git clone https://github.com/LearningOS/rust-rustlings-2023-autumn-******.git下载插件 rust-analyzer和Git Graph一个可以用来解析rust代码,另一个可以可视化管理git代码库 下载rustling…

基于安卓android微信小程序音乐播放器

运行环境 小程序前端框架:uniapp 小程序运行软件:微信开发者 后端技术:javaSsm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 项目介绍 音乐播放器小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要…

SpringCloud学习二

基本介绍: Eureka Server(Eureka 服务端)是Netflix开源的一款用于构建分布式系统中的服务发现和注册中心的组件。它在微服务架构中扮演着关键的角色,允许不同的微服务应用程序注册自己,并查询其他服务的位置信息&…

Rust专属开发工具——RustRover发布

JetBrains最近推出的Rust集成开发工具——RustRover已经发布,官方网站:RustRover: Rust IDE by JetBrains JetBrains出品过很受欢迎的开发工具IntelliJ IDEA、PyCharm等。 RustRover优势 Rust集成环境,根据向导可自动下载安装rust开发环境提…

Hadoop-2.5.2平台环境搭建遇到的问题

文章目录 一、集群环境二、MySQL2.1 MySQL初始化失败2.2 MySQL启动报错2.3 启动时报不能打开日志错2.4 mysql启动时pid报错 二、Hive2.1 Hive修改core-site.xml文件后刷新权限2.2 Hive启动元数据时报错2.3 Hive初始化MySQL报错2.3.1 报错信息2.3.2 错误原因2.3.3 参考文档 2.4 …

归纳所猜半结论推出完整结论:CF1592F1

https://www.luogu.com.cn/problem/CF1592F1 场上猜了个结论,感觉只会操作1。然后被样例1hack了。然后就猜如果 ( n , m ) (n,m) (n,m) 为1则翻转4操作,被#14hack了。然后就猜4操作只会进行一次,然后就不知道怎么做下去了。 上面猜的结论都…

[CISCN2019 总决赛 Day2 Web1]Easyweb 盲注 \\0绕过 文件上传文件名木马

首先开局登入 我们开始目录扫描 扫除 robots.txt 现在只有三个文件 最后发现 只有 image.php.bak存在 这里主要的地方是 \\0 因为第一个\会被转义 这里就会变为 \0 表示空白 那我们sql语句就会变为了 select * from images where id\0 但是这里我们不可以使用 \\ 因为…

计算机视觉--距离变换算法

计算机视觉 文章目录 计算机视觉前言距离变换 总结 前言 计算机视觉CV是人工智能一个非常重要的领域。 在本次的距离变换任务中,我们将使用D4距离度量方法来对图像进行处理。通过这次实验,我们可以更好地理解距离度量在计算机视觉中的应用。希望大家对计…

Arcgis日常天坑问题(1)——将Revit模型转为slpk数据卡住不前

这段时间碰到这么一个问题,revit模型在arcgis pro里导出slpk的时候,卡在98%一直不动,大约有两个小时。 首先想到的是revit模型过大,接近300M。然后各种减小模型测试,还是一样的问题,大概花了两天的时间&am…

基于ffmpeg给视频添加时间字幕

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕,字幕的内容为视频所播放的时间(故需要安装ffmpeg,具…

【Python】实现excel文档中指定工作表数据的更新操作

在做数值计算时,个人比较习惯利用excel文档的公式做数值计算进行对比,检查异常,虽然计算量大后,excel计算会比较缓慢,但设计简单,易排错 但一般测试过程中使用到的数据都不是最终数值,会不停根据…

【chrome基础】Chrome、Chromium、libcef、electron版本关系大揭秘!

文章目录 概述chrome、Chromium、cef、electron 版本管理chrome的各种概念和学习资料V8 bindings 设计谷歌V8引擎探秘:基础概念Chrome 的插件(Plugin)与扩展(Extension)Chrome插件开发 概述 Chrome、Chromium、libcef、…

使用GitLab CI/CD 定时运行Playwright自动化测试用例

创建项目并上传到GitLab npm init playwright@latest test-playwright # 一路enter cd test-playwright # 运行测试用例 npx playwright test常用指令 # Runs the end-to-end tests. npx playwright test# Starts the interactive UI mode. npx playwright

Oracle 简介与 Docker Compose部署

最近,我翻阅了在之前公司工作时的笔记,偶然发现了一些有关数据库的记录。当初,我们的项目一开始采用的是 Oracle 数据库,但随着项目需求的变化,我们不得不转向使用 SQL Server。值得一提的是,公司之前采用的…