Kafka日志文件存储

日志文件

kafka在server.properties配置文件中通过log.dir属性指定了Kafka的日志存储路径

核心文件

1. log文件

实际存储消息的日志文件, 大小固定1G(参数log.segment.bytes可配置), 写满后就会新增一个新的文件, 文件名是第一条消息的偏移量

2. index文件

以偏移量为索引来记录对应的.log日志文件中的消息偏移量

3. timeindex文件

以时间戳为索引, 用来进行一些跟时间相关的消息处理。比如文件清理。

文件查看

kafka提供了工具查看这些二进制文件

./kafka-dump-log.sh --files /app/kafka/kafka-logs/secondTopic-0/00000000000000000000.log

log文件追加消息

        Kafka都以追加的方式写入新的消息日志。position就是消息记录的起点,size就是消息序列化后的长度。Kafka中的消息日志,只允许追加,不支持删除和修改。所以,当前文件名最大的一个log文件是当前写入消息的日志文件,其他文件都是不可修改的历史日志。

        ​每个Log文件都保持固定的大小。如果当前文件记录不下,会重新创建一个log文件,并以这个log文件写入的第一条消息的偏移量命名。这种设计是为了更方便进行文件映射,加快读消息的效率。

index和timeindex索引

  1. index和timeindex存的offset都是相对偏移量, 可以节省空间, 绝对偏移量 = 日志文件名+相对偏移量
  2. 两个索引不会每写入一条消息就建立索引, 而是Broker每写入40KB的数据,就建立一条索引。由参数log.index.interval.bytes配置
  3. index文件类似于数据结构的跳表, 可以加速查询log文件效率, timeindex可以做跟时间相关的处理, 例如文件清理. 这也是kafka消费者能够从某个offset或者某个时间点读消息的原因

文件清理机制

Kafka为了防止日志过多, 给服务器带来压力, 可以设置一些定期删除策略

判断过期

  • log.retention.check.interval.ms:定时检测文件是否过期。默认 300000毫秒,也就是五分钟
  • log.retention.hours , log.retention.minutes, log.retention.ms 。 表示文件保留多长时间。默认生效的是log.retention.hours,默认值168小时,也就是7天。如果设置了更高的时间精度,以时间精度最高的配置为准。

在检查文件是否过期时,遍历.timeindex文件最大的那一条记录。

过期处理

log.cleanup.policy: 日志清理策略

有两个选项,delete表示删除日志文件。 compact表示压缩日志文件。

当log.cleanup.policy选择delete时,还有一个参数可以设置,

log.retention.bytes:表示所有日志文件的大小。

当总日志文件大小超过这个阈值后,会删除最早的日志文件。默认是-1,表示不删除。

注意: 压缩文件可能造成文件丢失, 对相同key文件进行压缩, 只会保留最后一条

高效读写机制

1. 文件结构

同一个Topic下的多个Partition单独记录日志文件,并行读取,加快Topic下的数据读取速度。然后index的稀疏索引结构,可以加快log日志检索的速度。

2. 顺序写

kafka把每个log文件大小固定1g, 在写文件前, 提前占据一块磁盘空间. kafka的log文件只能追加方式结尾写入(顺序写), 就可以直接往提前申请的磁盘空间写入, 不用再去其他磁盘位置找空闲空间

kafka官网测试, 顺序写速度能达到600M/s,基本与内存写速度相当。而随机写的速度就只有100K/s

3. 零拷贝

​ 零拷贝是Linux操作系统提供的一种IO优化机制,而Kafka大量运用零拷贝机制来加速文件读写。

1、mmap文件映射机制

这种方式是在用户态不再缓存整个IO的内容,改为只持有文件的一些映射信息。通过这些映射,"遥控"内核态的文件读写。这样就减少了内核态与用户态之间的拷贝数据大小,提升了IO效率。

2、sendfile文件传输机制

​         这种机制可以理解为用户态,也就是应用程序不再关注数据的内容,只是向内核态发一个sendfile指令,要他去复制文件就行了。这样数据就完全不用复制到用户态,从而实现了零拷贝。

 

刷盘机制

如果page缓存中的数据没有及时写入到磁盘, 当服务断电, 数据可能丢失. 最安全的方式是写一条数据. 刷一次盘, 也被叫做同步刷盘. 刷盘是linux系统对应了一次fsync的系统调用

刷盘参数配置:

  • flush.ms : 多少毫秒进行一次强制刷盘
  • log.flush.interval.messages:表示当同一个Partiton的消息条数积累到这个数量时,就会申请一次刷盘操作。默认是Long.MAX。
  • log.flush.interval.ms:当一个消息在内存中保留的时间,达到这个数量时,就会申请一次刷盘操作。他的默认值是空。如果这个参数配置为空,则生效的是下一个参数。
  • log.flush.scheduler.interval.ms:检查是否有日志文件需要进行刷盘的频率。默认也是Long.MAX。

这里可以看出, Kafka并不支持同步刷盘操作。但是在RocketMQ中却支持了这种同步刷盘机制。但是如果真的每来一个消息就调用一次刷盘操作,这是任何服务都无法承受的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4.9【共享源】流的多生产者和消费者

当一个系统中存在多个生产者和消费者时,情况可能会变得复杂。 了解生产者和消费者流之间支持的基数非常重要。 本质上,一个生产者流可以与多个消费者流连接,但一个消费者流只能连接到一个生产者流。请注意,基数关系仅限于单个流&…

3D渲染农场什么比较好用 2024渲染农场最新收费实测

随着数字设计领域的进步与发展,对于3D渲染服务的需求日益增加。3D渲染农场这一概念因此变得极为重要,特别是在电影制作、建筑可视化以及产品设计等行业中。现在,让我们深入了解3D渲染农场的定义以及市面上优秀的3D渲染服务提供商。 一、什么是…

Ai画板原理

在创建时画板可以选择数量和排列方式 也可以采用这个图片左上的画板工具,选择画板在其他地方画框即可生成,同时可以在属性框中可以修改尺寸大小 选择全部重新排列可以进行创建时的布局

STM32 支持IAP的bootloader开发,使用串口通过Ymodem协议传输固件

资料下载: https://download.csdn.net/download/vvoennvv/88658447 一、概述 关于IAP的原理和Ymodem协议,本文不做任何论述,本文只论述bootloader如何使用串口通过Ymodem协议接收升级程序并进行IAP升级,以及bootloader和主程序两个工程的配置…

yolo实现数据增强(数据集不够,快速增加数据集)

目录结构 附上数据增强的全部代码 # -*- codingutf-8 -*-import time import random import copy import cv2 import os import math import numpy as np from skimage.util import random_noise from lxml import etree, objectify import xml.etree.ElementTree as ET imp…

makefile教程(1)

makefile教程 makefile是什么: makefile是用户自行完成的IDE(integrated development environment集成开发环境)程序,与传统的操作系统下的编译不同,makefile可以通过用户自行安排,决定文件的编译顺序&am…

将elementUI,NaiveUI的progress环形进度条设置为渐变色

需求 :进度条要有一个渐变效果。效果图: NaiveUI和elementUI的官方progress组件都是只能设置一种颜色,不符合需求所以改一下。 其实NaiveUI和elementUI设置进度条的实现方式基本一样都是使用svg渲染出两个path,第一个是底色&…

ssh工具 向指定的ssh服务器配置公钥

此文分享一个python脚本,用于向指定的ssh服务器配置公钥,以达到免密登录ssh服务器的目的。 效果演示 🔥完整演示效果 👇第一步,显然,我们需要选择功能 👇第二步,确认 or 选择ssh服务器 👇第三步,输入ssh登录密码,以完成公钥配置 👇验证,我们通过ssh登录…

如何使用Docker将.Net6项目部署到Linux服务器(二)

目录 二 安装Redis 2.1 基本安装 2.1.1 下载Redis 2.1.2 解压并安装Redis 2.1.3 编译Redis 2.1.3 配置config文件 2.1.4 配置redis服务 2.1.5 关闭redis服务 2.2 Docker安装 2.2.1 拉取镜像 2.2.2 查看镜像 2.2.2 创建挂载目录 2.2.3 创建配置文件 2.2.4 创建容器…

微信商家费率0.2怎么申请

不管是微信还是支付宝,商户最低的收款手续费率可以达到0.2%费率。一般我们普通商户的收款费率一般在0.6左右,当然也有使用0.3的,也就是1万元的费率是30-60块钱,对于一些流水比较大的商家来说,确实很有必要把这个手续费…

ThunderSearch(闪电搜索器)_网络空间搜索引擎工具_信息收集

文章目录 ThunderSearch简介1 项目地址2 使用方式2.1 配置文件config.json说明2.2 构建和运行 3 使用式例 ThunderSearch简介 ThunderSearch(闪电搜索器)是一款使用多个(【支持Fofa、Shodan、Hunter、Zoomeye、360Quake网络空间搜索引擎】网络空间搜索引…

Vue爱好者必看!九款常用UI组件库,助力项目快速搭建!

Vue通常用于构建用户界面和单页应用程序。产品开发者可以从简单的组件开始创建,并逐渐衍生出更复杂的前端平台。通过合理应用UI组件库,设计师可以快速提高整体设计效率,更好地优化产品从外观结构到交互体验。本节将盘点9个常用的VueUI组件库。…

Linux与Bash 编程——Linux文件处理命令-L1

目录: linux系统与shell环境准备 Linux系统简介操作系统简史Linux的发行版:Linux与Windows比较:Linux安装安装包下载Linux的访问方式远程登录方式远程登录软件:mobaxterm的使用:使用电脑命令行连接:sshd的…

(1)(1.11) SiK Radio v2(一)

文章目录 前言 1 概述 2 特点 3 状态LED灯 前言 SiK 遥测无线电是在自动驾驶仪和地面站之间建立遥测连接的最简单方法之一。本文提供了如何连接和配置无线电的基本用户指南。 3DR Radio v2(SiKRadio 的消费者版本) !Note 本页面以前的…

网站配置域名实例

目录 网站配置 网站备案 如果希望你的网站对外提供互联网信息服务还有非常关键的两个动作,那就是:为网站配置、为网站备案。 由于IP地址不方便记忆并且不能显示地址组织的名称和性质,人们设计出了域名,并通过域名系统&#xff…

redis主从扩容案例

redis3主3从,请参见:https://blog.csdn.net/weixin_49456013/article/details/134930716?spm1001.2014.3001.5501 现在需要进行扩容,变成4主4从,主要步骤如下: 1.新建6387、6388两个节点并启动 docker run -d --na…

“双十一、二” 业务高峰如何扛住?韵达快递选择 TDengine

小 T 导读: 为了有效处理每日亿级的数据量,早在 2021 年,韵达就选择用 TDengine 替代了 MySQL,并在三台服务器上成功部署和上线了 TDengine 2.0 集群。如今,随着 TDengine 3.0 版本的逐渐成熟,韵达决定将现…

如何实现https密钥对登录方式

先安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker.service systemctl enable docker.service yum install -y docker…

三叠云食堂管理系统:打造智慧食堂,提升运营效率与服务质量

今天,人们越来越注重生活品质和食品安全。特别是在学校食堂这样的公共场所,如何确保食品的安全、营养和健康成为了重中之重。食堂,作为学校和各类企业的重要部分,也迫切需求升级改革。三叠云食堂管理系统,就是为满足食…

猫头虎分享2023年12月17日博客之星候选--领域赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–领域赛道博主文章数据 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开…
最新文章