apache Kafka是如何实现删除数据文件(日志)的

Apache Kafka 是什么? Apache Kafka是一个开源的分布式事件流平台,具有高吞吐、持久化、可扩展等特点。其核心概念包括主题、分区、副本等,架构围绕生产、存储、消费三个环节设计,支持高吞吐、低延迟的消息处理。Kafka广泛应用于日志聚合、流处理、消息系统等场景,相比其他消息队列具有更高的性能和持久化能力。生态组件包括Kafka Connect、Kafka Streams等,提供丰富的功能扩展。通过命令行工具可快速操作主题、生产者和消费者。Kafka已成为大数据和实时计算领域的核心基础设施。 阅读详情

afka删除数据有两种方式,一种是按照时间,超过一段时间后删除过期消息,第二种是按照消息大小删除数据的,消息数量超过一定大小后删除最旧的数据

但是Kafka的数据是存储在文件系统内的,随机删除数据是不可能的,那么,Kafka是如何删除数据的呢?

Kafka删除数据主逻辑

对应配置:  log.cleanup.interval.mins

当前使用值:1

file: core/src/main/scala/kafka/log/LogManager.scala

line: 271

/**

 * Delete any eligible logs. Return the number of segments deleted.

 */

def cleanupLogs() {

  debug("Beginning log cleanup...")

  var total = 0

  val startMs = time.milliseconds

  for(log <- allLogs) {

    debug("Garbage collecting '" + log.name + "'")

    total += cleanupExpiredSegments(log) + cleanupSegmentsToMaintainSize(log)

  }

  debug("Log cleanup completed. " + total + " files deleted in " +

                (time.milliseconds - startMs) / 1000 + " seconds")

}

 

Kafka 每隔 log.cleanup.interval.mins 分钟调用一次 cleanupLogs ,该函数对所有 Logs 执行清理操作,(目前不确定 Logs 对应的是 Topic 还是 Partition,目测应当是 Partition)

  • cleanupExpiredSegments 负责清理超时的数据
  • cleanupSegmentsToMaintainSize 负责清理超过大小的数据

清理超时数据 (必选策略)

对应配置:log.retention.hours

当前使用值: 72 (3天)

file: core/src/main/scala/kafka/log/LogManager.scala

line: 237

/**

 * Runs through the log removing segments older than a certain age

 */

private def cleanupExpiredSegments(log: Log): Int = {

  val startMs = time.milliseconds

  val topic = parseTopicPartitionName(log.name).topic

  val logCleanupThresholdMs = logRetentionMsMap.get(topic).getOrElse(this.logCleanupDefaultAgeMs)

  val toBeDeleted = log.markDeletedWhile(startMs - _.messageSet.file.lastModified > logCleanupThresholdMs)

  val total = log.deleteSegments(toBeDeleted)

  total

}

  • 该函数首先获取 topic,根据 topic 获取日志超时时间,该超时时间可以使用配置 log.retention.hours.per.topic 单独指定,如果没有单独指定,则使用统一的 log.retention.hours 配置。
  • 然后扫描所有该日志对应的 Segment 文件,对所有最近修改时间与当前时间差距大于超时时间的日志的 Segment 文件,标记为删除
  • 最后删除标记为删除的 Segment 文件

清理超大小数据 (可选策略)

对应配置:log.retention.bytes

当前使用值: -1 (默认值,即不采用该策略)

file: core/src/main/scala/kafka/log/LogManager.scala

line: 250

/**

 *  Runs through the log removing segments until the size of the log

 *  is at least logRetentionSize bytes in size

 */

private def cleanupSegmentsToMaintainSize(log: Log): Int = {

  val topic = parseTopicPartitionName(log.dir.getName).topic

  val maxLogRetentionSize = logRetentionSizeMap.get(topic).getOrElse(config.logRetentionBytes)

  if(maxLogRetentionSize < 0 || log.size < maxLogRetentionSize) return 0

  var diff = log.size - maxLogRetentionSize

  def shouldDelete(segment: LogSegment) = {

    if(diff - segment.size >= 0) {

      diff -= segment.size

      true

    } else {

      false

    }

  }

  val toBeDeleted = log.markDeletedWhile( shouldDelete )

  val total = log.deleteSegments(toBeDeleted)

  total

}

  • 当不需要删除或者日志总大小小于配置时,不执行
  • 按照从旧到新的顺序扫描各个 Segments,如果该Segment大小 <= 当前日志超过设置值的diff,该Segment会被标记为需要删除
  • 执行删除操作

按照 Segment 删除的影响

每个 Segment 文件实际会按照最后一条日志的时间进行删除。当日志中的最后一条日志没有超时时,该文件不会被删除。

对超过大小规则的影响

删除该Segment之后,数据仍然超过大小,才会删除该Segment。如果删除该Segment后,数据大小小于设定上限,则不删除该Segment。

Segment相关配置

log.segment.bytes

  • 当前使用值:1073741824
  • 注释:单个Segment 的大小设置,达到这个大小时,Kafka会新建一个 Segment 文件

log.roll.hours

  • 当前使用值:24
  • 隔一段时间,Kafka 会新建一个Segment文件,即便之前的Segment文件没有达到 log.segment.bytes
【kafka】kafka日志文件清理策略 压缩后的offset可能是不连续的,比如上图中没有6,当从这些offset消费消息时,将会拿到比这个 offset 大的 offset 对应的消息,实际上会拿到 offset 为 7 的消息,并从这个位置开始消费。​ 这种策略只适合特殊场景,比如消息的 key 是用户 ID,value 是用户的资料,通过这种压缩策略,整个消息集里就保存了所有用户最新的资料。超过设置的所有日志总大小,阐述最早的 segment。Kafka 中默认的日志保存时间为 7 天,可以通过调整如下参数修改保存时间。 阅读详情

相关推荐

Nginx国密HTTPS实战:SM2双证书部署与TongSuo编译指南

HTTPS作为保障网络通信安全的基石,其核心在于SSL/TLS协议与公钥基础设施(PKI)。它通过非对称加密实现身份认证与密钥交换,再结合对称加密确保数据传输的机密性与完整性。在金融、政务等对自主可控有严格要求的领域,采用符合国家密码管理局标准的国密算法(SM2/SM3/SM4)替代国际通用算法(如RSA/SHA-256/AES),已成为满足安全合规要求的关键技术路径。国密SSL不仅是一套算法替换,更涉及从底层密码库到上层应用服务的完整技术栈改造。其核心价值在于实现密码技术的自主可控,提升特定场景下的安全防

weixin_29323365的博客 497

彻底删除Kafka中的topic

1、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录2、Kafka 删除topic的命令是:     ./bin/kafka-topics  --delete --zookeeper 【zookeeper server】  --topic 【topic name】     如果kafaka启动时加载的配...

这是一个记录学习的博客 750

空天大模型详解

空天大模型是指面向空天信息领域(如卫星遥感、导航、气象等)设计的多模态人工智能模型,能够处理海量遥感数据、多传感器信息及跨时空分析任务。多模态融合:整合可见光、雷达、热红外、多光谱等多源遥感数据,构建统一表征空间,例如“空天·灵眸”3.0版支持航空、卫星及无人机数据的自动化解译。轻量化与高效推理:针对星载计算场景,采用分层量化、跨模态蒸馏技术压缩模型参数(如JigonGPT从1.02B压缩至0.23B,性能仅牺牲5.2%)18,并通过热传导架构提升计算速度2.4倍。神经符号结合。

zxy98的专栏 1567

Kafka:数据存储、删除,查询

kafka数据删除存储查询

Joseph25的博客 1406

AI开发助手介绍

AI开发助手介绍随着NLP方向发展越来越成熟,AI写代码领域出现了几个非常好的模型,今天笔者给大家推荐几个AI Coding 助手AI Coding助手是以IDEA插件或vim插件形式提供服务,在编辑器中写代码时,可以实时预测下一行要输入的代码,提升开发效率。Github Copilot首先要介绍的是Github Copilot,Copilot是个AI Coding助手,它从注释和代码中提取上下文,给出单行和整个函数的代码建议,Copilot由Open AI 的CodeX模型提供支持,它是一个由OpenAI

bobo_simpler的博客 5765

保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程

本文提供了一份详细的速腾Helios雷达与fast-LIO2在Ubuntu 18.04上的配置避坑指南,涵盖驱动安装、数据格式转换到建图全流程。特别针对常见编译错误和数据转换问题提供了解决方案,帮助开发者高效完成环境搭建与建图任务。

weixin_27252001的博客 113

定时删除Kafka logs中的日志

参考 https://www.cnblogs.com/JetpropelledSnake/p/11113677.html。设置定时任务 每天 4点15分执行。将上面的脚本 存到 sh 文件中。

爱摄影的小章同学的博客 1060

【电磁场计算】磁偶极子在外磁场中的受力

最近在总结电磁场计算公式的时候发现,关于磁偶极子受力的计算公式,在不同文献中的说明有点出入,在此特地写一篇博客澄清一下。

sky4403的博客 7464

Kafka 日志清理机制深度解析:从原理到源码实现

Kafka 中的日志清理(Log Cleaning)是指在满足一定条件后,对日志文件进行删除或压缩处理的过程。删除策略(Delete Policy):按时间或大小清理过期数据。压缩策略(Compact Policy):保留每个 Key 的最新值,适用于状态型数据流。本文聚焦于压缩策略的实现机制及其核心类与方法。Apache Kafka 的日志清理机制通过doWork()和clean()等核心方法,实现了灵活、高效的日志压缩策略。借助LogSegment。

用文字记录技术,用分享回馈社区,用坚持见证成长 659

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2196

【AI大模型:架构实战】31、工业级AI大模型系统全景解析:从架构设计到提示语引擎实践

本文系统解析了工业级AI大模型的核心架构与技术体系。整体采用分层解耦设计,包含数据工程、模型训练、模型部署、应用集成和监控运维五大核心模块,以及分布式计算、高速网络、异构硬件三大支撑体系。数据工程构建高质量数据处理流水线;模型训练实现从预训练到业务适配的全流程;模型部署优化服务性能与可用性;应用集成连接业务场景;监控运维保障系统持续优化。三大支撑能力专注于千亿参数管理、高并发低延迟处理和持续学习进化。该架构设计既满足当前需求,又为技术演进预留空间,为企业在数字化转型中提供AI工业化落地的完整解决方案。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1989

Kafka存储机制大揭秘:从日志结构到清理策略的全面解析

Kafka存储机制大揭秘:从日志结构到清理策略的全面解析

虽非技冠群英首,愿与同道共长歌; 大鹏一日同风起,扶摇直上九万里; 1639

QT入门开发一个时钟

本文讲述了时钟开发的具体过程以及代码。 涉及到一下几个知识点: 1. 定时器使用 2. 本地时间获取 3. resource资源读取 4. 图片绘制 5. 图片按照中心旋转 6. sin或者cos角度计算。

啊渊的专栏 5144

Kafka深入理解-3:Kafka如何删除数据(日志)文件

Kafka作为消息中间件,数据需要按照一定的规则删除,否则数据量太大会把集群存储空间占满。 参考:apache Kafka是如何实现删除数据文件(日志)的 Kafka删除数据有两种方式 按照时间,超过一段时间后删除过期消息 按照消息大小,消息数量超过一定大小后删除最旧的数据 Kafka删除数据的最小单位:segment Kafka删除数据主逻辑:kafka源码 def c...

weixin_33766168的博客 1204

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Apache—Kafka实践

kafka 的 topic 对应的 分区数量 一般设置为 kafka 集群 broken 的整数倍;3 Broker 集群(最常用)单 Topic:3、6、9、12 分区(3 的倍数)集群总分区:建议 < 60006 Broker 集群单 Topic:6、12、18、24 分区(6 的倍数)集群总分区:建议 < 120001 Broker(测试 / 单机)分区随便设,但无高可用、无并行分布。

蓝魔的博客 231

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深入解析Apache Kafka设计原理

然而,由于Zookeeper不适用于高频的写操作,Kafka最新版本将Consumer的Offset信息作为普通消息提交到特殊的内部Topic __consumer_offsets中进行管理,从而提高了Offset管理的效率和可伸缩性 [1, 3]。•Partition:Topic的物理分区。它在Kafka核心的基础上,提供了更多的工具和功能,包括Schema Registry、Kafka Connect、ksqlDB等,旨在简化Kafka的部署、管理和使用,并提供更强大的数据集成和流处理能力 [2]。

ManHanBoy的博客 777

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

kafka学习

文章目录1. kafka概念2. 安装部署单节点安装java环境zookeeper安装kafka的安装kafka测试消费和生产创建主题展示所有主题查看主题详情消费端订阅消息生产端发送消息集群搭建zk安装kafka集群搭建验证:3. 生产者1. 流程消息发送流程发送类型序列化器分区器拦截器interceptor发送原理 1. kafka概念 和rocketmq类似,都有broker,不同的是,rocketmq通过nameserver进行调度,而kafka依赖zookeeper进行调度。 此外,kafka采用

wjl31802的博客 2251

初识kafka

文章目录消息队列的两种模式点对点模式发布订阅模式概述使用消息队列的好处安装config目录下的server.properties 消息队列的两种模式 点对点模式 一对一,消费者主动拉取数据,消息收到后消息删除, 并且消息只能被一个消费者消费 发布订阅模式 一对多,消费者消费数据后不会清除消息,生产者将消息发布到topic中,可以被所有订阅了的消费者消费,消费者可以通过两种方式获取消息,一种是主动拉取,一种topic推送消息,kafka是基于主动拉取模式的 概述 kafka是一个分布式的基于发布订阅模式的消息

weixin_43790613的博客 1696

apache kafka技术分享系列(目录索引)

转载出处:http://blog.csdn.net/lizhitao/article/details/39499283 kafka开发与管理: 1)apache kafka消息服务 2)kafak安装与使用 3)apache kafka中server.properties配置文件参数说明 4)apache kafka中topic级别配置 5)Apache

周游的世界 4678

持续总结中!2024年面试必问 20 道 Kafka面试题(六)

1、Zookeeper 对于 Kafka 的作用是什么? 2、Kafka的日志压缩和清理机制是如何工作的?

2401_84542969的博客 834

kafka总结

Kafka 简介 Apache Kafka起源于LinkedIn,后来于2011年成为开源Apache项目,然后于2012年成为First-class Apache项目。Kafka是用Scala和Java编写的。 Apache Kafka是基于发布订阅的容错消息系统。 它是快速,可扩展和设计分布。 Kafka特点: 可靠性:具有副本及容错机制。 可扩展性:kafka无需停机即可扩展节点及节点上线。 持久性:数据存储到磁盘上,持久性保存。 性能:kafka具有高吞吐量。达到TB级的数据,也有非常稳定的性能。

wangwangnvzi的博客 871

关于 kafka OffsetOutOfRangeException 的问题

数据文件保留多长时间,存储的最大时间超过这个时间会根据log.cleanup.policy设置数据清除策略log.retention.bytes和log.retention.minutes或log.retention.hours任意一个达到要求,都会执行删除有2删除数据文件方式按照文件大小删除log.retention.bytes,按照2中不同时间粒度删除分别为分钟,小时。topic每个分区的最大文件大小,一个topic的大小限制=分区数*log.retention.bytes。...

qiuye_724的博客 2413

大数据之路(八)——kafka

kafka简介

wy888882的博客 981

重温 Apache Kafka

1.核心概念Kafka最初是由LinkedIn在2011年开发出来的,从那开始,Kafka逐渐发展成为一个完整的平台,允许你冗余存储难以置信的数据量,提供巨大吞吐量的消息总线(百万级/秒),以及对这些消息的实时流处理。Kafka的核心可概括为:分布式(distributed)、水平扩展(horizontally-scalable)、容错性(fault-tolerant)、持久性日志(commit ...

qq_18730155的博客 367

JAVA核心面试知识-Kafka(十二)

12.1.1. Kafka 概念 Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用 Scala 语言编写,目前是Apache 的开源项目。 broker:Kafka 服务器,负责消息存储和转发 topic:消息类别,Kafka 按照topic 来分类消息 partition:topic 的分区,一个 topic 可以包含多个 partitio...

小王的博客 520
上一篇: Kafka0.8.2.1删除topic逻辑
下一篇: kafka学习笔记:知识点整理
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值