【赵渝强老师】Kafka的消息持久化

【赵渝强老师】Kafka的消息持久化

1、Kafka消息持久性概述

Kakfa依赖文件系统来存储和缓存消息。对于硬盘的传统观念是硬盘总是很慢,基于文件系统的架构能否提供优异的性能?实际上硬盘的快慢完全取决于使用方式。同时 Kafka 基于 JVM 内存有以下缺点:

  • 对象的内存开销非常高,通常是要存储的数据的两倍甚至更高
  • 随着堆内数据的增加,GC的速度越来越慢

实际上磁盘线性写入的性能远远大于任意位置写的性能,线性读写由操作系统进行了大量优化(read-ahead、write-behind 等技术),甚至比随机的内存读写更快。所以与常见的数据缓存在内存中然后刷到硬盘的设计不同,Kafka 直接将数据写到了文件系统的日志中:

  • 写操作:将数据顺序追加到文件中
  • 读操作:从文件中读取

这样实现的好处:

  • 读操作不会阻塞写操作和其他操作,数据大小不对性能产生影响
  • 硬盘空间相对于内存空间容量限制更小
  • 线性访问磁盘,速度快,可以保存更长的时间,更稳定

2、Kafka的持久化原理解析

一个Topic 被分成多 Partition,每个 Partition 在存储层面是一个 append-only 日志文件,属于一个 Partition 的消息都会被直接追加到日志文件的尾部,每条消息在文件中的位置称为 offset(偏移量)。

【赵渝强老师】Kafka的消息持久化

如下图所示,我们之前创建了mytopic1,具有三个分区。我们可以到对应的日志目录下进行查看。

【赵渝强老师】Kafka的消息持久化

Kafka日志分为index与log(如上图所示),两个成对出现:index文件存储元数据,log存储消息。索引文件元数据指向对应log文件中message的迁移地址;例如2,128指log文件的第2条数据,偏移地址为128;而物理地址(在index文件中指定)+ 偏移地址可以定位到消息。
我们可以使用Kafka自带的工具来查看log日志文件中的数据信息:

【赵渝强老师】Kafka的消息持久化

【赵渝强老师】Kafka的消息持久化

Original: https://www.cnblogs.com/collen7788/p/14720738.html
Author: 赵渝强老师
Title: 【赵渝强老师】Kafka的消息持久化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713283/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • WordPress安装使用问题记录

    本文记录在使用WordPress过程中的问题和解决。 安装 比较顺利没有问题,具体如下(CentOS 6.5,DO的CentOS7 image里默认的yum源没有mysql-ser…

    技术杂谈 2023年5月31日
    0107
  • Docker-dockerfile

    Docker-通过Dockerfile创建镜像 1.Dockerfile简介 简而言之,Dockerfile 是一个描述如何创建 Docker 镜像所需步骤的文本文件。 一个Doc…

    技术杂谈 2023年7月10日
    081
  • c#使用selenium过滑动验证码

    滑动验证码如下: 1、vs引入以下三个包(.net core 3.1): 2、c#引用: private void SeleniumVertifyCode(Uri uri) { v…

    技术杂谈 2023年5月30日
    097
  • Merge into的使用详解-你Merge了没有

    Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令,通过这个merge你能够在一…

    技术杂谈 2023年6月1日
    091
  • Python导入cx_Oracle报错

    系统环境:RHEL5.4 python2.5(手动编译安装,系统带有2.4版本) 在使用python脚本访问数据库时,需要导入cx_Oracle模块 $>>>im…

    技术杂谈 2023年7月11日
    061
  • Python 递归函数返回值为 None 的解决办法

    在使用 Python 开发的过程中,避免不了会用到递归函数。但递归函数的 返回值有时会出现意想不到的情况。 下面来举一个例子: >>> def fun(i): ….

    技术杂谈 2023年6月21日
    0106
  • 腾讯云 Linux 虚拟机如何正确修改 hosts 文件

    如果直接修改 /etc/hosts 文件,重启后设置会丢失还原,原因是腾讯云虚拟机默认使用了 Cloud-Init 进行初始化操作。 参见:https://cloud.tencen…

    技术杂谈 2023年6月21日
    078
  • 【最新版】30分钟教你搭建属于自己的个人博客

    【最新版】30分钟教你搭建属于自己的个人博客 简介: 本教程是以Hexo和Coding pages 为基础,搭建个人的静态博客网站 Hexo Hexo官网 快速、简洁且高效的博客框…

    技术杂谈 2023年6月21日
    094
  • docker安装redis

    拉取镜像 默认拉取最新 docker pull redis 设置配置文件 bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问 protected-mode…

    技术杂谈 2023年7月24日
    076
  • nodejs目录与文件遍历

    路径相关函数 path.basename(‘/foo/bar/baz/asdf/quux.html’); // Returns: ‘quux.html’ path.basename…

    技术杂谈 2023年5月31日
    0101
  • dremio 22 udf 功能

    dremio 22 开始支持了直接基于sql 的udf,很方便,强大,但是目前对于社区版来说智能创建,暂时还不能直接使用目前udf 面向的创建是基于行以及列级别的访问控制 创建ud…

    技术杂谈 2023年5月30日
    0122
  • RESTful API设计规范

    RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。 它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理…

    技术杂谈 2023年5月31日
    075
  • 架肩与拐肘

    内家拳大多讲究沉肩坠肘,太极拳也是,沉肩坠肘是费时功夫,成年人必须花一定的时间专门去纠正。沉肩坠肘解决不了,上肢的实战只能靠蛮力。 沉肩功夫出不来的人,力从地起的劲力很难直接自然性…

    技术杂谈 2023年5月31日
    0104
  • Spring代理模式

    静态代理 抽象角色:一般会使用接口或者抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人 优点 可以使真…

    技术杂谈 2023年7月24日
    071
  • Unitest自动化测试基于HTMLTestRunner报告案例

    报告效果如下: HTMLTestRunner脚本代码如下: #coding=utf-8 # URL: http://tungwaiyip.info/software/HTMLTes…

    技术杂谈 2023年5月31日
    0102
  • 2019Hexo博客Next主题深度美化 打造一个炫酷博客(2)-奥怪的小栈

    219/8/1 更新本文转载于:奥怪的小栈 这篇文章告诉你在搭建好博客后,面对网上千篇一律的美化教程怎么才能添加自己独特点,使人眼前一亮. 本站基于HEXO+Github搭建。所以…

    技术杂谈 2023年6月21日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球