kafka过期消息删除过程:

有时候总觉得我的消息没到7天就被删除了,我还以为是我的kafka配置没有生效,了解到 kafka删除机制后才恍然大悟

kafka消息首先由用户设定一个或多个partition,每个partition中kafka会根据消息量来逐步建立多个segment存储消息,每个segment的大小由配置项进行设定,比如这里

log.segment.bytes=1073741824 【1GB】

kafka至少会保留1个工作segment保存消息。消息量超过单个文件存储大小就会新建segment,比如消息量为2.6GB, 就会建立3个segment。kafka会定时扫描非工作segment,将该文件时间和

设置的topic过期时间进行对比,如果发现过期就会将该segment文件(具体包括一个log文件和两个index文件)打上.deleted 的标记,如下所示:

-rw-r--r-- 1 root root 1073740353 Nov 13 03:02 00000000000108550131.log.deleted
-rw-r--r-- 1 root root 526304 Nov 13 03:02 00000000000108550131.index.deleted
-rw-r--r-- 1 root root 697704 Nov 13 03:02 00000000000108550131.timeindex.deleted

最后kafka中会有专门的删除日志定时任务过来扫描,发现.deleted文件就会将其从磁盘上删除,释放磁盘空间,至此kafka过期消息删除完成。

可以看出,kafka删除消息是以segment为维度的,而不是以具体的一条条消息为维度。一个segment包含了一段时期的全部消息并存储在一个文件中.

删除时是一次性把这个过期的文件包含所有消息全部删除,效率非常高。可以设想如果是先判断一条条的消息时间是否过期再一条条的执行删除,将十分影响kafka的性能和效率,频繁擦除磁盘,对硬盘性能也有较大影响!

所以如果消息量不多没有超过一个segment的存储容量,由于kafka至少要保留一个segment用于存取消息,所以也不会去删除里面过期的消息。实际上,也存在着设置了消息7天过期,但是kafka里面仍存在着10天前的数据,这就是由kafka的删除特性决定的。

我们删除过期消息的目的是为了释放磁盘空间,既然消息很少没有突破一个segment的容量,那么即使多保留几天的旧消息又何妨,又不怎么占用磁盘空间。然而这种删除策略的设计换来的却是大消息量的topic整块消息删除的高性能和高效率!

不得不说这种设计理念非常NB!

kafka消息删除机制相关推荐

  1. kafka 安装使用 /springboot整合kafka /消息投递机制以及存储策略 /副本处理机制

    一.背景 1.基本信息 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流 ...

  2. kafka 消息分发机制、分区和副本机制

    一.消息分发机制 1.1 kafka 消息分发策略 消息是 kafka 中最基本的数据单元,在 kafka 中,一条消息由key.value两部分构成,在发送一条消息 时,我们可以指定这个key,那么 ...

  3. kafka消息确认机制

    前言 ACK机制是所有消息中间件必备的特新,kafka也不例外,ACK机制可以提醒使用者消息是否成功发送到broker 我们知道,kafka的一个topic中,具体负责处理消息的是分区,一个分区可能存 ...

  4. kafka消息分区机制

    首先我们来看下官网的图示,kafka分区的作用个人觉得就是提供一种负载均衡的能力,或者说对数据进行分区的主要原因,就是为了实现系统的高伸缩性(Scalability).不同的分区能够被放置到不同节点的 ...

  5. Kafka整体结构图、Consumer与topic关系、Kafka消息分发、Consumer的负载均衡、Kafka文件存储机制、Kafka partition segment等(来自学习资料)

    ##1. Kafka整体结构图 Kafka名词解释和工作方式  Producer : 消息生产者,就是向kafka broker发消息的客户端.  Consumer : 消息消费者,向kafka ...

  6. kafka消息机制浅析

    前言介绍:   本文是博主阅读深入理解kafka一书的学习笔记,主要介绍kafka生产者生产消息的存储和同步机制,以及消费者从消息队列中获取消息的机制. kafka三个主要对象: Producer(生 ...

  7. rocketmq 消息删除_RocketMQ源码分析之文件过期删除机制

    1.由于RocketMQ操作CommitLog.ConsumeQueue文件,都是基于内存映射方法并在启动的时候,会加载commitlog.ConsumeQueue目录下的所有文件,为了避免内存与磁盘 ...

  8. 面试官问:为什么MySQL的索引不采用Kafka的索引机制

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 第一眼看到这个问题,也是很迷惑的,谁没事会问这种问题.然而,事实上 ...

  9. Kafka文件存储机制及offset存取

    Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...

最新文章

  1. swift 中拨电话的实现
  2. SparkStreaming读取Kakfa数据时发生OffsetOutOfRangeException异常
  3. python request-Python之request模块-基础用法
  4. ThinkPHP 3.2.3 视图模型的使用
  5. oracle 带有变量的语句_【成都校区】Oracle SQL语句之常见优化方法总结
  6. Java数组排序解码
  7. R中读取包含中文字符的文件时这个诡异的错误你见过吗?
  8. eclipse spring mysql,eclipse环境下的springboot框架+mybatis访问MySQL报错空指针
  9. 力扣-82 删除排序链表中的重复元素 II
  10. EasyUI - Layout 布局控件
  11. 投行巨头金融科技战略——摩根士丹利财富管理转型之路篇
  12. 替换空格python实现
  13. java与数据库连接实验报告_数据库原理与应用java实验报告
  14. linux下查看共享文件夹,在Linux下查看共享文件夹
  15. 如何编辑修改PDF文件内容?修改方法很简单
  16. 魔方——一面两层之后的公式
  17. 上海理工大计算机学研究生怎么样,上海理工大学(专业学位)计算机技术考研难吗...
  18. 如何实现电脑快速开机
  19. PHP中使用gRPC客户端
  20. 知识图谱(关系网络)概念及常用算法

热门文章

  1. 蓝天算法2.0上线,目录站真的凉凉了吗
  2. 万豪国际2023年将在中国开设30家精选服务品牌酒店;阿斯利康中金医疗产业基金杭州基金完成募集 | 美通企业日报...
  3. 解决海康威视监控安装插件后依然预览不了
  4. IT.各知识点幽默化
  5. 数字孪生智慧展厅来袭:“云上看展”,双线共频
  6. JavaScript +canvas简易画板的实现
  7. 有出租高性能服务器的么,租用高性能的美国服务器有怎样配置呢?
  8. 我的世界java1.14刷铁机_我的世界:谁说1.14版本的刷铁机用不了?只要做好这个细节即可!...
  9. 华为mate20pro计算机自动旋转,华为mate20pro特殊功能有哪些
  10. 自媒体制作视频封面工具