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

Kafka Log存储解析以及索引机制

1.概述

  在Kafka架构,不管是生产者Producer还是消费者Consumer面向的都是Topic。Topic是逻辑上的概念,而Partition是物理上的概念。每个Partition逻辑上对应一个log文件,该log文件存储是Producer生产的数据。Producer生产的数据被不断追加到该log文件末端,且每条数据都有自己的offset。Kafka对于log文件是采取分片和索引机制。

2.Kafka的topic

启动kafka集群,集群中有三台Broker; 设置3个分区,3个副本;

2.1 创建hy-test-topic

bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --create --replication-factor 3 --partitions 3 --topic hy-test-topic

2.2 发送消息到topic

public static void main(String[] args) {//1.创建kakfa生产者的配置对象Properties prop = new Properties();//2.给生产者配置对象添加配置信息prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop102:9092");prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");prop.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);prop.put(ProducerConfig.LINGER_MS_CONFIG, 1);prop.put(ProducerConfig.BUFFER_MEMORY_CONFIG,33554432);//3.创建生产者对象KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(prop);//4.调用send方法,发送消息for (int i = 0; i < 5; i++) {kafkaProducer.send(new ProducerRecord<String,String>("hy-test-topic",Integer.toString(i),Integer.toString(i)));}//5.关闭资源kafkaProducer.close();
}

查看log.dirs

在这里插入图片描述

2.3 查看topic的分区和副本

bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic hy-test-topic

在这里插入图片描述
可以看出:

  • 分区Partition-0 在broker.id=4中,其余都是副本 Replicas 2,3
  • 分区Partition-1 在broker.id=2中,其余都是副本 Replicas 3,4
  • 分区Partition-2 在broker.id=3中,其余都是副本 Replicas 4,2

通过zookeeper查看leader在那个broker上

[zk: localhost:2181(CONNECTED) 14] get /kafka/brokers/topics/hy-test-topic/partitions/0/state{"controller_epoch":49,"leader":4,"version":1,"leader_epoch":0,"isr":[4,2,3]}

2.4 分区文件

在这里插入图片描述
在这里插入图片描述

名称描述类型默认
log.segment.bytes单个日志文件的最大大小int1073741824(1G)

继续发送消息会生成新的segment

在这里插入图片描述

可以看出

  • 第一个segment文件00000000000000000000.log快要达到 log.segment.bytes时,开始创建 00000000000000001187.log
  • .log.index.timeindex文件是一起出现; 并且名称是以文件第一个offset命名的。
  • .log存储消息文件
  • .index存储消息的索引
  • .timeIndex,时间索引文件,通过时间戳做索引

2.5 分区下文件内容

使用kafka自带工具bin/kafka-run-class.sh 来读取分区下的文件内容

2.5.1 消息文件.log
bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files 00000000000000000000.log

在这里插入图片描述

最后一行显示的是

baseOffset: 1186  position: 1072277020 CreateTime: 1695792070168
2.5.2 消息索引文件.index
bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files 00000000000000000000.index

在这里插入图片描述

offset: 1186 position: 1072277020
2.5.3 时间索引文件.timeindex
/opt/module/kafka/bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files 00000000000000000000.timeindex

在这里插入图片描述

2.5.4 Kafka如何查找指定offset的Message

借用博主@lizhitao 博客上的一张图来展示是如何查找Message的。

在这里插入图片描述

比如:要查找绝对offset为7的Message:

  • 首先是用二分查找确定它是在哪个LogSegment中,自然是在第一个Segment中。
  • 打开这个Segment的index文件,用二分查找找到offset小于或者等于指定offset的索引条目中最大的那个offset。自然offset为6的那个索引是我们要找的,通过索引文件我们知道offset为6的Message在数据文件中的位置为9807。
  • 打开数据文件,从位置为9807的那个地方开始顺序扫描直到找到offset为7的那条Message。

该机制是建立在offset是有序的。索引文件被映射到内存中,所以查找的速度还是很快的。

Kafka的Message存储采用了分区(partition),分段(LogSegment)和稀疏索引来达到了查找的高效性。

参考链接:https://cloud.tencent.com/developer/article/1846773

相关文章:

Kafka Log存储解析以及索引机制

1.概述 在Kafka架构&#xff0c;不管是生产者Producer还是消费者Consumer面向的都是Topic。Topic是逻辑上的概念&#xff0c;而Partition是物理上的概念。每个Partition逻辑上对应一个log文件&#xff0c;该log文件存储是Producer生产的数据。Producer生产的数据被不断追加到该…...

广告电商模式:探索新商业模式,实现三方共赢

随着互联网技术的发展&#xff0c;电商行业正在不断探索新的商业模式。其中&#xff0c;广告电商模式是一种创新的方式&#xff0c;它成功地将广告和电商相结合&#xff0c;实现了三方共赢的局面。一、广告电商模式的定义广告电商模式&#xff0c;顾名思义&#xff0c;是一种将…...

动态线程池框架DynamicTp v1.1.4大版本发布,新增若干实用特性

DynamicTp 简介 DynamicTp 是一个基于配置中心实现的轻量级动态线程池监控管理工具&#xff0c;主要功能可以总结为动态调参、通知报警、运行监控、三方包线程池管理等几大类。 DynamicTp 特性 代码零侵入&#xff1a;我们改变了线程池以往的使用姿势&#xff0c;所有配置均放…...

无线通信——Mesh自组网的多跳性

Mesh的多跳性 Mesh网络具备多跳性。什么是多跳性呢&#xff1f;上面说过&#xff0c;每一个具备Mesh网络的设备都是独立的节点。因此&#xff0c;当我发出一条数据时&#xff0c;这些数据会通过跳跃到达不同的网络节点&#xff0c;数据从一个节点跳到另一个节点&#xff0c;直到…...

QA 云计算实验问题汇总

Q Win11中VMware虚拟网卡有感叹号 2023-9-27一位同学的win11的两个VMware17的虚拟网卡都有感叹号 A 清除注册表 步骤1 关闭VMWare虚拟化软件 步骤2 使用CCleaner pro 清理注册表 步骤3 重启系统 步骤4 VMware虚拟网卡上的感叹号消失。 Q Win11上的VisualBox的网卡消失了…...

VEX —— Functions|Groups

目录 expandpointgroup —— 返回点组内点号 expandprimgroup —— 返回面组内面号 expandvertexgroup —— 返回顶点组内顶点号 inpointgroup —— 判断指定点是否在点组内 inprimgroup —— 判断指定面是否在面组内 invertexgroup —— 判断指定顶点是否在顶点组内 np…...

JavaSE18——接口

接口(interface) 1 概述 在Java中&#xff0c;接口是一种抽象数据类型&#xff0c;它定义了一组方法&#xff08;没有方法体&#xff09;&#xff0c;但没有实现这些方法的具体代码。接口可以看作是一种合约&#xff0c;它规定了类应该具有的行为。类可以实现一个或多个接口&…...

杭州亚运会开幕式惊现数字人火炬手,动捕设备迸发动画制作新动能

在第十九届亚运会开幕式上&#xff0c;首次出现了“数字人”点火形式&#xff0c;打造了亚运史上首个数字点火仪式&#xff0c;这种点火方式是一种颠覆性创作的同时&#xff0c;这也是裸眼3D技术、现实增强和AI人工智能技术的完美结合。 此次数字火炬手的背后是采用了动捕设备&…...

ptmalloc源码分析 - malloc/free函数的实战篇(12)

目录 一、chunk的大小实验 二、获取使用中的chunk信息的实验 三、小内存块尝试获取fd信息的实验 四、常用malloc/free函数使用注意事项 看了前面11章节的内容&#xff0c;我们也基本了解了ptmalloc的内存管理逻辑。此处也可以通过一些手段&#xff0c;获取到chunk的信息&am…...

博弈论(奇偶考虑法)+计数+DP(判定转dp):CF838C

首先题目有博弈&#xff0c;先分析一波最优策略&#xff08;步骤&#xff1a;分析性质&#xff09;。 两个人&#xff0c;所以显然考虑奇偶考虑法递归考虑。 首先删就是使子问题-1&#xff0c;重新排列是在当前子问题里的。 一个串的排列是有限的&#xff0c;所以这里就可以…...

郁金香2021年游戏辅助技术中级班(一)

郁金香2021年游戏辅助技术中级班&#xff08;一&#xff09; 用代码读取utf8名字字节数组搜索UTF-8字符串 用CE和xdbg分析对象名字从LUA函数的角度进行分析复习怪物名字偏移 用CE和xdbg分析对象数组认识虚函数表分析对象数组 分析对象数组链表部分链表的定义链表的数据在内存里…...

加密货币交易所偿付能力的零知识证明

如何检测下一个 FTX 和 Mt. Gox 加密货币交易所 FTX 的内爆导致数十亿客户资金流失&#xff0c;这是加密货币历史上交易所破产的最新例子。历史可以追溯到 2014 年&#xff0c;当时处理 70% 比特币交易的历史最悠久、规模最大的交易所 Mt. Gox 丢失了用户的 850,000 个比特币。…...

软考网络工程师防火墙配置考点总结

&#xff08;考试重点&#xff09; 一、访问控制列表 管理网络当中的数据流量&#xff0c;实现数据过滤的重要手段。可以在路由器、三层交换、二层交换和防火墙上实现。 隐藏规则&#xff1a;当前面的规则都匹配不上&#xff0c;华为默认允许&#xff0c;思科默认拒绝。 分…...

【IDEA】idea恢复pom.xml文件显示灰色并带有删除线

通过idea打开spring boot项目后&#xff0c;发现每个服务中的pom.xml文件显示灰色并带有删除线&#xff0c;下面为解决方案 问题截图 解决方案 打开file——settings——build,execution,deployment——Ignored Files&#xff0c;把pom.xml前面的复选框去掉&#xff0c;去掉之…...

Python数据分析之Excel

Openpyxl库 1、Openpyxl模块2、Excel写入2.1、新建2.2、添加数据2.3、单元格格式 3、Excel读取4、Excel的CRUD4.1、查4.2、改4.3、删 1、Openpyxl模块 Openpyxl是一个用于处理xlsx格式Excel表格文件的第三方python库&#xff0c;几乎支持Excel表格的所有操作 基本概念&#x…...

NISP证书是什么?NISP含金量如何呢?

一、NISP是什么 NISP证书是国家信息安全水平考试&#xff08;National Information Security Test Program&#xff0c;简称NISP&#xff09;&#xff0c;是由中国信息安全测评中心实施培养国家网络空间安全人才的项目。由国家网络空间安全人才培养基地运营/管理&#xff0c;并…...

操作系统备考学习 day6(2.3.2 - 2.3.4)

操作系统备考学习 day6 第二章 进程与线程2.3 同步与互斥2.3.2 实现临界区互斥的基本方法单标记法双标志先检查法双标志后检查法Peterson算法 进程互斥的硬件实现方法中断屏蔽方法TestAndSet指令Swap指令 2.3.3 互斥锁2.3.4 信号量整型信号量记录型信号量 第二章 进程与线程 2…...

家电行业 EDI:Miele EDI 需求分析

Miele是一家创立于1899年的德国公司&#xff0c;以其卓越的工程技术和不懈的创新精神而闻名于世。作为全球领先的家电制造商&#xff0c;Miele的经营范围覆盖了厨房、洗衣和清洁领域&#xff0c;致力于提供高品质、可持续和智能化的家电产品。公司的使命是为全球消费者创造更美…...

Android ConstraintLayout app:layout_constraintHorizontal_weight

Android ConstraintLayout app:layout_constraintHorizontal_weight <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:…...

FPGA行业应用一:LED控制器

什么是LED控制器 LED控制器已经有很多年头了&#xff0c;应该是上世纪90年代就开始有了。它的主要构成是&#xff1a; 1&#xff1a;视频信号源——如 电脑&#xff0c;机机&#xff0c;DVD&#xff0c;U盘等 2&#xff1a;视频处理器——通过 HDMI/DVI/网口接收来自视频源的…...

VisionPro新手避坑指南:从CogPMAlignTool到Blob分析,这10个工具别再乱用了

VisionPro新手避坑指南&#xff1a;10个核心工具的正确打开方式 第一次打开VisionPro的工具栏时&#xff0c;面对数十个名称相似的图标&#xff0c;大多数工程师都会陷入选择困难。更棘手的是&#xff0c;许多工具的参数设置存在微妙的相互影响——一个看似无关的阈值调整可能…...

STC89C52RC单片机驱动数码管:从原理图到动态显示的保姆级代码解析

STC89C52RC单片机驱动数码管&#xff1a;从原理图到动态显示的保姆级代码解析 第一次拿到普中C51开发板时&#xff0c;看着密密麻麻的数码管电路和陌生的74系列芯片&#xff0c;我完全不知道如何让那些小灯管亮起想要的数字。直到把原理图上的每条线、每个引脚和代码里的每一位…...

书匠策AI:2026年写毕业论文的“开挂说明书“——一个教育博主的硬核拆解

你离毕业&#xff0c;可能只差一个书匠策AI的距离 各位还在和毕业论文"互相折磨"的同学们&#xff0c;我是一个专门教人写论文的教育博主。今天不聊理论&#xff0c;不灌鸡汤&#xff0c;直接给你们安利一个我最近扒了很久的工具——书匠策AI&#xff08;官网 官网直…...

量子优化算法与经典算法在Max-Cut问题中的性能对比

1. 量子优化算法与Max-Cut问题概述 Max-Cut问题是图论中一个经典的NP难组合优化问题&#xff0c;其目标是将给定无向图的顶点划分为两个互不相交的子集&#xff0c;使得连接这两个子集的边权重之和最大。这个问题在统计物理、电路设计和网络聚类等领域有广泛应用背景。随着量子…...

实测Taotoken API调用延迟与稳定性在SpringBoot服务中的表现

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 实测Taotoken API调用延迟与稳定性在SpringBoot服务中的表现 在将大模型能力集成到后端微服务时&#xff0c;开发者不仅关注功能的…...

魔兽争霸3性能优化与界面修复:三步实现流畅游戏体验

魔兽争霸3性能优化与界面修复&#xff1a;三步实现流畅游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3的卡顿、界面异常和功…...

基于C语言实现(控制台)小型文件系统

♻️ 资源 大小&#xff1a; 3.40MB ➡️ 资源下载&#xff1a;https://download.csdn.net/download/s1t16/87430288 小型文件系统 一、需求分析 1.1 小型文件系统介绍 科技的进步已将人类带入了信息大爆炸的时代&#xff0c;随着计算机科学技术的不断发展&#xff0c;计算…...

VS Code本地代码评审扩展:结构化JSON存储与AI协同实践

1. 项目概述&#xff1a;一个纯粹本地的代码评审伴侣 如果你和我一样&#xff0c;日常重度依赖 VS Code&#xff0c;并且经常需要处理代码评审任务——无论是和同事异步协作&#xff0c;还是借助 AI 助手&#xff08;如 Claude、GitHub Copilot、Cursor&#xff09;来审查自己…...

一次断电引发的血案:深度复盘CentOS 7 LVM分区下fstab丢失的排查与修复全记录

CentOS 7 LVM环境下fstab丢失的深度修复指南 当服务器遭遇意外断电时&#xff0c;文件系统损坏往往是最令人头疼的问题之一。最近处理的一起CentOS 7系统宕机案例&#xff0c;由于断电导致/etc/fstab文件丢失&#xff0c;系统无法正常启动。本文将详细记录整个排查和修复过程&a…...

Go语言实现Dify与钉钉机器人集成:企业级AI应用开发实战

1. 项目概述&#xff1a;当Dify遇上钉钉&#xff0c;打造企业级AI应用新范式 最近在折腾一个挺有意思的项目&#xff0c;叫“MAyang38/dify-on-dingding-go”。光看名字&#xff0c;可能有点技术黑话的味道&#xff0c;但说白了&#xff0c;这就是一个“桥梁”项目。它的核心使…...