Kafka数据清理机制

Apache Kafka中数据清理机制涉及的主要概念有两个:基于时间或大小的日志保留策略,以及日志压缩。这些特性允许Kafka管理其存储空间,保留有用的数据,同时清除过时或重复的数据。

基于时间或大小的日志保留策略

日志保留策略配置参数:

  • log.retention.hours:日志保留的小时数。
  • log.retention.bytes:日志保留的最大字节数。

Kafka的日志保留策略是通过删除旧的日志段来实现的。日志段(Log Segment)是Kafka日志的分割单位。

源码解析

在Kafka的源码中,日志保留策略主要是通过LogManager类管理的,具体实现在Log类的deleteOldSegments方法中。

// kafka/log/Log.scalaprivate def deleteOldSegments(predicate: (LogSegment) => Boolean): Int = {// ...中间代码省略...val lastClean = activeSegment.baseOffset // the active segment is always keptval deletable = logSegments.view.takeWhile(_.baseOffset < lastClean)val numToDelete = deletable.count(predicate)// ...中间代码省略...if(numToDelete > 0) {// Actually delete the segments marked for deletionlogSegments.view.take(numToDelete).foreach(deleteSegment)}numToDelete
}private def deleteSegment(segment: LogSegment) {// ...中间代码省略...segment.delete()// ...中间代码省略...
}
代码示例
# 设置主题的日志保留时间为2天
kafka-configs --zookeeper localhost:2181 --entity-type topics --entity-name your_topic --alter --add-config retention.ms=172800000# 设置主题的日志保畛大小为1GB
kafka-configs --zookeeper localhost:2181 --entity-type topics --entity-name your_topic --alter --add-config retention.bytes=1073741824

日志压缩

日志压缩允许Kafka保留至少一条每个键的最新消息,同时删除任何旧的、重复的键值记录。

配置参数
  • cleanup.policy=compact:启用日志压缩。
  • min.cleanable.dirty.ratio:控制启动压缩任务前允许的最大脏数据比例。
源码解析

日志压缩在LogCleaner类中实现,它由一个或多个CleanerThread组成,不断循环遍历所有日志。

// kafka/log/LogCleaner.scalaclass LogCleaner(config: CleanerConfig, logDirs: Array[File], logs: Pool[TopicAndPartition, Log], time: Time) extends Logging {// ...中间代码省略...private val cleaners = (0 until config.numThreads).map(i => new CleanerThread(i, logs, cleanerConfig, time))// ...中间代码省略...
}class CleanerThread(threadId: Int, logs: Pool[TopicAndPartition, Log], cleanerConfig: CleanerConfig, time: Time) extends ShutdownableThread {// ...中间代码省略...override def doWork() {// ...中间代码省略...cleanOrSleep()// ...中间代码省略...}// ...中间代码省略...
}
代码示例
# 创建带有日志压缩策略的主题
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic compacted_topic --config cleanup.policy=compact# 更改现有主题的配置以启用日志压缩
kafka-configs --zookeeper localhost:2181 --entity-type topics --entity-name your_existing_topic --alter --add-config cleanup.policy=compact

注意事项

  • Kafka的日志清理操作是异步的,不会立即反映更改。
  • 对于压缩,键值是必须的,没有键的消息将不会被压缩。
  • 在压缩过程中,CPU和IO可能会有显著使用,这可能影响到Kafka的性能。
  • Kafka的日志清理与日志追加操作是并发进行的,设计上保证了数据的一致性。

Kafka源码提供了对数据清理机制的更深入理解。如果想要更详细地探索,可以直接查阅Kafka源码。

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

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

相关文章

【label studio 升级记录】

label studio 版本升级记录 label studio 从1.8.1 升级到1.11.0 过程记录启动后遇到问题1:解决方法: 遇到问题2 安装版本与启动显示的版本不一致解决方法: label studio 从1.8.1 升级到1.11.0 过程记录 # 当前(2024-02)最新版是1.11.0 pip install -U label-studio启动后遇到…

SQL-Labs靶场“1-5”关通关教程

君衍. 一、准备工作二、第一关 基于GET单引号字符型注入1、源码分析2、联合查询注入过程 三、第二关 基于GET整型注入1、源码分析2、联合查询注入过程 四、第三关 基于GET单引号变形注入1、源码分析2、联合查询注入过程 五、第四关 基于GET双引号字符型注入1、源码分析2、联合查…

美国云服务器是干什么的

对于美国服务器是干什么的&#xff0c;相信很多小白用户不是非常了解&#xff0c;接下来小编就为您整理发布美国云服务器是干什么的相关资讯&#xff0c;希望对您有帮助。 美国云服务器是一种提供计算资源的互联网服务&#xff0c;主要用于托管网站、应用程序和存储数据。 美国…

「Python系列」Python编程第一步

文章目录 一、Python初始案例1. 安装Python解释器2. 编写一个简单的Python程序3. 运行Python程序方法一&#xff1a;命令行运行方法二&#xff1a;集成开发环境&#xff08;IDE&#xff09; 4. 学习Python基础5. 练习和实践 二、Python常见问题1. 数据类型转换2. 文件操作3. 错…

你真的会数据结构吗:单链表

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 哈咯各位铁汁们&#xff0c;大家新年过得快乐吗&#xff1f;反正大伟是过得很快乐&#xff0c;天天就是玩玩玩…

面试redis篇-02缓存穿透

原理 例&#xff1a; 一个get请求&#xff1a;api/news/getById/1 缓存穿透&#xff1a;查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库 解决方案一 缓存空数据&#xff0c;查询返回的数据为空&#xff0c;仍把…

Axure9必备函数(2)

字符串的属性和函数 length:返回字符串的字符长度&#xff0c;包括空格&#xff0c;注意:汉字占1个字符charAt(index):返回字符串中指定索引处的字符indexOf(searchValue"):返回调用函数的字符串中搜索值的第一个实例的起始索引。如果未找到搜索值&#xff0c;则返回 -1la…

B 样条基函数

一、B 样条基函数的定义和性质 令 U { u 0 , u 1 , ⋯ , u m } U\{u_0,u_1,\cdots,u_m\} U{u0​,u1​,⋯,um​} 是一个单调不减的实数序列&#xff0c;即 u i ≤ u i 1 , i 0 , 1 , ⋯ , m − 1 u_i\leq u_{i1},i0,1,\cdots,m-1 ui​≤ui1​,i0,1,⋯,m−1。其中&#xff…

ABAQUS应用04——集中质量的添加方法

文章目录 0. 背景1. 集中质量的编辑2. 约束的设置3. 总结 0. 背景 混塔ABAQUS模型中&#xff0c;机头、法兰等集中质量的设置是模型建立过程中的一部分&#xff0c;需要研究集中质量的添加。 1. 集中质量的编辑 集中质量本身的编辑没什么难度&#xff0c;我已经用Python代码…

Leetcode 第 124 场双周赛 Problem D 修改数组后最大化数组中的连续元素数目(Java + 模拟(分段/区间))

文章目录 题目思路Java 模拟&#xff08;分段/区间&#xff09;第 1 步&#xff1a;第 2 步&#xff1a;第 3 步&#xff1a; 复杂度Code 题目 Problem: 100205. 修改数组后最大化数组中的连续元素数目给你一个下标从 0 开始只包含 正 整数的数组 nums 。一开始&#xff0c;你…

Django后端开发——模型层及ORM介绍

文章目录 参考资料Django配置MySQL安装mysqlclient创建数据库进入数据库的操作可能遇到的问题及解决方案Pycharm配置settings.py 模型![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c83753397bf6481d8defde26537903bf.png)ORM介绍示例终端&#xff1a;settings.py…

Linux——开发工具的使用

目录 Linux软件包管理器 yum rzsz Linux编辑器——vim vim的使用 vim的基本操作 命令模式的常见命令 底行模式的常见命令 vim是需要配置的 Linux编译器——gcc/g 预处理 编译 汇编 链接 函数库 Linux项目自动化构建工具 make/makefile make原理 项目清理 Linux调试器g…

260.【华为OD机试真题】信道分配(贪心算法-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-信道分配二.解题思路三.题解代码Python题解代码…

踩坑实录(Fourth Day)

今天开工了&#xff0c;其实还沉浸在过年放假的喜悦中……今天在自己写 Vue3 的项目&#xff0c;虽说是跟着 B 站在敲&#xff0c;但是依旧是踩了一些个坑&#xff0c;就离谱……照着敲都能踩到坑&#xff0c;我也是醉了…… 此为第四篇&#xff08;2024 年 02 月 18 日&#x…

天锐绿盾|公司办公文件数据\资料自动智能透明加密——数据防泄漏系统

天锐绿盾是一款专注于企业电脑文件数据资料透明加密的防泄密系统。它采用了先进的文件过滤驱动透明加解密技术&#xff0c;可以对企业核心部门的文档进行强制加密处理&#xff0c;确保从文档创建开始就能自动加密保护。文件的保存加密、打开解密完全由后台加解密驱动内核自动完…

React中的函数组件

import React from ./react; import ReactDOM from ./react-dom;/*** 函数组件其实是一个函数&#xff0c;接收props,返回一个React元素*/ function FunctionComponent(props){let element <h1><span>hello</span>,{props.name}</h1>;console.log(el…

2024年热门项目持续分析,趣味测试小程序项目分析以及系统功能介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 趣味测试小程序是目前比较热门的娱乐测试&#xff0c;运行模式就是引导粉丝用户进去…

【《高性能 MySQL》摘录】第 3 章 服务器性能剖析

文章目录 3.1 性能优化简介3.1.1 通过性能剖析进行优化3.1.2 理解性能剖析 3.2 对应用程序进行性能剖析3.3 剖析 MySQL 查询3.3.1 剖析服务器负载捕获 MySQL 的查询到日志文件中分析查询日志 3.3.2 剖析单挑查询使用 SHOW PROFILE &#xff08;现已过时&#xff09;使用SHOW ST…

记录 | C++ cout.setf(ios::fixed)

cout.setf(ios::fixed); 是在 C 中使用的一个标准库函数&#xff0c;用于将流的输出格式设置为"fixed" "fixed"格式指定输出浮点数时&#xff0c;小数点后的位数是固定的。这意味着&#xff0c;无论输出的数字有多少位小数&#xff0c;小数点后都会保留相…

Win32 获取EXE/DLL文件版本信息

CFileVersion.h #pragma once#include <windows.h> #include <string> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 版本号辅助类 class CVersionNumber { public:CVersionNumber() :m_…