大数据-68 Kafka 高级特性 物理存储 日志存储概述

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(正在更新…)

章节内容

上节我们完成了如下内容:

  • 分区分配策略
  • Range、RoundRobin、Sticky
  • 自定义分区策略实现

在这里插入图片描述

日志存储概述

  • Kafka消息是以主题为单位进行归类,各个主题之间是彼此独立的,互不影响。
  • 每个主题又可以分为一个或多个分区
  • 每个分区各自存在一个记录消息数据的日志文件

我们需要到 Kafka 的 Logs 目录下进行查看:

cd /opt/kafka-logs
pwd
ls

我这里的情况是:
在这里插入图片描述
有一些没展示全的,比如倒数的那几个,是Kafka中现在有的Topic:
在这里插入图片描述

假设我们创建了一个 demo_01 的主题,其存在 个Partition,每个Partition下存在一个[Topic-Partition]命名的消息日志文件。
在分区的日志文件中,可以查看到很多了类型的文件:比如 .index .timestamp .log .snapshot等等
其中文件名一致的合集就叫做:LogSement
在这里插入图片描述

LogSegment

  • 分区日志文件中包含很多的LogSegment
  • Kafka日志追加是顺序写入的
  • LogSegment可以减小日志文件的大小
  • 进行日志删除的时候和数据查找的时候可以快速定位
  • ActiveLogSegment是活跃的日志分段,读写权限,其余的LogSegment只有只读的权限

每个LogSegment都有一个基准偏移量,表示当前LogSegment中第一条消息的Offset。
偏移量是一个64位的长整型数,固定是20位数字,长度未达到,用0进行填补。
可见如下图:
在这里插入图片描述
我服务器上Kafka我的目录情况如下:
在这里插入图片描述

日志与索引

在这里插入图片描述

  • 偏移量索引文件用于记录消息偏移量与物理地址之间的映射关系
  • 时间戳索引文件则根据时间戳查找对应的偏移量。
  • Kafka中的索引文件是以稀疏索引的方式构造消息的索引,并不保证每一个消息在索引文件中都有对应的索引项。
  • 每当写入一定量的消息,偏移量索引文件和时间戳索引分别增加一个偏移量索引项和时间索引项。
  • 通过修改 log.index.interval.bytes 的值,改变索引项的密度。

切分文件

当满足如下几个条件之一,就会触发切分:

  • 当前日志分段文件的大小超过了Broker端的参数 log.segment.bytes 配置的值,默认是1GB
  • 当前日志分段中消息的最大时间戳与当前系统的时间戳相差大于 log.roll.ms 或 log.roll.hour,ms的优先级高于hour,默认是hour,值为168 = 7天
  • 偏移量索引文件或者时间戳索引文件的大小达到Broker参数log.index.size.max.bytes配置的值,默认是10MB。
  • 追加的消息的偏移量与当前日志分段的偏移量之间的差值大于Integer.MAX_VALUE。即要追加的消息的偏移不能转变为相对偏移量。

为什么是 Integer.MAX_VALUE

1024 * 1024 * 1024 = 1073741824
在偏移量索引文件中,每个索引项占用8个字节,并分为两部分。

  • 相对偏移量和物理地址
  • 相对偏移量:表示消息相对于基准偏移量的偏移量,占4个字节。
  • 物理地址:消息在日志分段文件中对应的物理位置,占4个字节。

4个字节刚好对应:Integer.MAX_VALUE,如果大于 Integer.MAX_VALUE,则不能用4个字节进行表示了。

索引切分过程

索引文件会根据 log.index.size.max.bytes 值进行预分配空间,即文件创建的时候就是最大值,当真正的索引文件进行切分的时候,才会将其裁剪到实际数据大小的文件。
这一点是根日志文件有所区别的地方,其意义降低了代码逻辑的复杂性。

索引文件

偏移量索引文件用于记录消息偏移量与物理地址之间的映射关系,时间戳索引文件则根据时间戳查找对应的偏移量。
文件:查看一个topic分区目录下的内容,发现有Log,Index和Timeindex三个文件:

  • log文件名是以文件中第一条message的offset来命名的,实际offset长度是64位,但是这里只使用20位,应付生产是足够的。
  • 一组index+log+timeindex文件的名字是一样的,并且log文件默认写满1G之后,会进行log rolling形成一个新的组合记录消息,这个通过Broker端log.segment.bytes=1073741824指定的。
  • index和timeindex在刚使用时会分配10M的大小,当进行log rolling后,它会修剪为实际的大小。

具体的列表如下:
在这里插入图片描述

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

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

相关文章

Java之SpringBoot入门(含Spring Mvc)

1.Spring Boot Helper的安装 首先我们要装好Spring Boot Helper 但是由于直接在IDEA中下的是收费版,在学习阶段我们可以去官网下载一些免费版使用 Spring Boot Helper - IntelliJ IDEs Plugin | Marketplace(点击即可进入官网) 然后在IDEA…

【practise】删除有序数组中的重复项

关于博主: 今天分享一道简单的关于“双指针”算法的题目。算是双指针中非常基础的题目,有兴趣可以借鉴一波~ 目录 1.题目介绍2.题解思路:双指针法3.代码示例 1.题目介绍 题目链接:LINK 本题要求是:对给定的有序数组…

回溯分割+子集篇--代码随想录算法训练营第二十二天| 131.分割回文串,93.复原IP地址,78.子集,90.子集II

131.分割回文串 题目链接:. - 力扣(LeetCode) 讲解视频:131.分割回文串 题目描述: 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文串 。返回 s 所有可能的分割方案。 示例 …

sql二次注入实战--2018年网顶杯

网址:BUUCTF在线评测 (buuoj.cn) 当我们进入后显示这个页面: 当我们第一次点击发帖的时候就会跳转到登陆页面,上面有提示,告诉我们账号为zhangwei,密码为zhangwei***: 这里我们可以使用bp抓包工具来进行暴力破解密码&…

makefile举例说明

文章目录 makefile文件config.mk配置文件common.mk文件 目录结构 makefile文件 include config.mk导入config.mk的文件,通常包含项目的配置变量。 all:for dir in $(BUILD_DIR); \do \make -C $$dir; \doneall是项目主目标,遍历BUILD_DIR变量每个子目录…

基于springboot+vue+uniapp的“口腔助手”小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

Python开发: 飞机大战 小游戏

玩法 你可以控制飞机左右移动,躲避敌机子弹,同时发射自己的炮弹,将敌人击落! 部署方案: 1、代码如下图; 2、将代码保存到一个python中,比如planeFight.py; 3、在你的电脑中安装p…

为什么需要云仓?

云仓,即云端仓储管理,是指通过互联网技术整合和管理仓储资源,实现高效、低成本的库存管理和物流服务。随着电子商务的发展和企业供应链全球化的加剧,云仓成为现代企业管理的一种重要手段。 1、云仓可以显著提高仓储管理效率&#…

算法测试.

一.CodeForces 1829A 题意&#xff1a; 题目意思就是给你t个字符串&#xff0c;让你找出每个串与codeforces这个串有多少不同的字母&#xff1b; 题解&#xff1a; 定义一个变量循环比较字符串&#xff0c;不相同计数即可&#xff1b; 代码&#xff1a; #include <iost…

SQL二次注入

目录 1.什么是二次注入&#xff1f; 2.二次注入过程 2.1寻找注入点 2.2注册admin#用户 2.3修改密码 1.什么是二次注入&#xff1f; 当用户提交的恶意数据被存入数据库后&#xff0c;因为被过滤函数过滤掉了&#xff0c;所以无法生效&#xff0c;但应用程序在从数据库中拿…

TCP Analysis Flags 之 TCP Window Full

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

supermap制作发布二三维地图服务

一、下载安装 软件版本&#xff1a; SuperMap iDesktopX 11i(2023) SP1 for Windows SuperMap iServer 11i(2023) SP1 for Windows 下载地址&#xff1a; http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx 二、运行 服务端&#xff1a;双击iserver的…

C# Unity 面向对象补全计划 设计者模式 之 单例模式

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 了解我的专栏C#面向对象与进阶:http://t.csdnimg.cn/mIitr&#xff0c;尤其是关于类的那篇文章即…

Python(模块---pandas+matplotlib+pyecharts)

import pandas as pd import matplotlib.pyplot as plt dfpd.read_excel(简易数据.xlsx) # print(df) plt.rcParams[font.sans-serif][SimHei] #设置画布的大小 plt.figure(figsize(10,6)) labelsdf[电影中文名] ydf[国籍] # print(labels) # print(y)# import pandas as pd im…

在Stable Diffusion中驱动Tesla P40

一、安装P40显卡 在前面我的“在win10电脑上搭建python环境下的本地AI绘画工具Stable Diffusion”博文中&#xff0c;Stable Diffusion的运行完全依赖CPU和内存&#xff0c;因此每生成一次图片&#xff0c;需几小时之多&#xff0c;我常是在临下班时开始生成&#xff0c;到第二…

Go语言标准库中的双向链表的基本用法

什么是二分查找区间&#xff1f; 什么是链表&#xff1f; 链表节点的代码实现&#xff1a; 链表的遍历&#xff1a; 链表如何插入元素&#xff1f; go语言标准库的链表&#xff1a; 练习代码&#xff1a; package mainimport ("container/list""fm…

连接一切:Web3如何重塑物联网的未来

传统物联网的挑战 物联网&#xff08;IoT&#xff09;正在迅速改变我们的世界&#xff0c;通过将各种设备连接到互联网&#xff0c;它使得设备能够相互交流&#xff0c;提供智能化的服务和解决方案。然而&#xff0c;随着物联网的迅猛发展&#xff0c;安全性、隐私保护和设备互…

React 知识点(二)

文章目录 一、React 组件二、React 组件通信 - 父子通信三、React 组件通信 - 子父通信四、React 组件通信 - 兄弟通信五、React 组件通信 - 跨组件通信(祖先)六、结合组件通信案例七、props-children 属性八、props-类型校验九、React 生命周期十、setState 扩展 一、React 组…

MySQL的简单介绍

文章目录 数据库关系型数据库非关系型数据”数据库的概念和用途MySQL数据库服务器、数据库和表的关系数据库的创建和删除表创建表修改常见的数据类型和约束字符串类型日期和时间类型PRIMARY KEY使用AUTO_INCREMENT使用UNIQUE使用FOREIGN KEY使用 SQL语言基础SQL语言简介SQL分类…

C++入门基础知识

在之前我们学习了C语言和初阶数据结构的相关知识&#xff0c;现在已经有了一定的代码能力和对数据结构也有了基础的认识&#xff0c;接下来我们将进入到新的专题当中&#xff0c;这个专题就是C。在C中我们需要花费更大的精力和更长的时间去学习这门建立在C语言基础之上的计算机…