kafka(六)——存储策略

存储机制

kafka通过topic作为主题缓存数据,一个topic主题可以包括多个partition,每个partition是一个有序的队列,同一个topic的不同partiton可以分配在不同的broker(kafka服务器)。

关系图

在这里插入图片描述

partition分布图

名称为t_zd的topic为3分区2副本,其在3节点kafka集群的分布如下:

在这里插入图片描述

概念

topic

主题,即消息存放的目录。

Partition

  • 一个topic可以分为多个partition;

  • 每个partition是一个有序的队列;

  • 每个partition实际对应一个文件夹,包含多个segment文件;

  • partition中的每条消息都会分配一个有序的id,即offset;

segment

  • Kafka用于存储消息的基本单元;
  • segment指partition文件夹下产生的文件;
  • segment文件命名与offset有关,为log start offset
  • 每个分段都有一个起始偏移量和一个结束偏移量,用于定位消息的位置;
  • 一个segment对应一个日志文件([offset].log)、时间索引文件([offset].timeindex)和索引文件([offset.index]),日志文件是用来记录消息,索引文件用来保存消息的索引;
  • segment的大小可以通过server.properties配置文件中log.segment.bytes来配置,默认1G;

在这里插入图片描述

索引文件(index)

  • 记录固定消息量的索引编号范围;
  • Kafka在查询时,先从Index中定位到小范围的索引编号区间,再去Log中在小范围的数据块中查询具体数据,此索引区间的查询方式称为:稀疏索引;

日志文件(log)

  • 负责消息的追加、读取和索引等操作;
  • 每条消息有自增编号,只追加不修改;

消息(message)

示例

[root@192 zd-first-topic-0]$ls
00000000000000000000.index  00000000000000000000.timeindex  partition.metadata
00000000000000000000.log    leader-epoch-checkpoint
[root@192 zd-first-topic-0]$sh bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files 00000000000000000000.log --print-data-logDumping 00000000000000000000.log
Log starting offset: 0
baseOffset: 0 lastOffset: 0 count: 1 baseSequence: 0 lastSequence: 0 producerId: 0 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 0 CreateTime: 1712889750352 size: 79 magic: 2 compresscodec: none crc: 3489688351 isvalid: true
| offset: 0 CreateTime: 1712889750352 keySize: -1 valueSize: 11 sequence: 0 headerKeys: [] payload: hello kafkabaseOffset: 1 lastOffset: 1 count: 1 baseSequence: 1 lastSequence: 1 producerId: 0 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 79 CreateTime: 1712889754967 size: 84 magic: 2 compresscodec: none crc: 2134132965 isvalid: true
| offset: 1 CreateTime: 1712889754967 keySize: -1 valueSize: 16 sequence: 1 headerKeys: [] payload: kafka first testbaseOffset: 2 lastOffset: 2 count: 1 baseSequence: 2 lastSequence: 2 producerId: 0 producerEpoch: 0 partitionLeaderEpoch: 0 isTransactional: false isControl: false deleteHorizonMs: OptionalLong.empty position: 163 CreateTime: 1712889762442 size: 85 magic: 2 compresscodec: none crc: 3019058576 isvalid: true
| offset: 2 CreateTime: 1712889762442 keySize: -1 valueSize: 17 sequence: 2 headerKeys: [] payload: kafka second test
[root@192 zd-first-topic-0]$

参数说明

  • baseOffset:当前消息起始位置的offset;
  • position:消息在日志分段文件中对应的物理地址;
  • size:消息长度;

关系图

在这里插入图片描述

副本机制

  • kafka副本机制提高了数据可靠性;
  • Kafka默认副本1个,生产环境一般配置为2个,保证数据可靠性,但性能相对降低
  • Kafka中将副本分为Leader副本和Follower副本;
  • Kafka生产者只会把数据发往Leader副本,Follower副本找Leader副本进行数据同步;
  • Kafka分区中的所有副本统称为AR(Assigned Repllicas),AR = ISR + OSR;
    • ISR:表示和Leader保持同步的Follower集合。如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参数设定,默认30s。Leader发生故障之后,就会从ISR中选举新的Leader;
    • OSR:Follower与Leader副本同步时,延迟过多的副本;

producer的acks参数表示当生产者生产消息的时候,写入到副本的要求严格程度。

  • acks为0:生产者将消息发送至主副本,不等确认可继续发送下一条消息,数据可能丢失。

在这里插入图片描述

  • acks为1:生产者将消息发送至主副本,等主副本确认可继续发送下一条消息。

在这里插入图片描述

  • acks为-1或all:生产者将消息发送至主副本,等主副本和从副本同步完成后可继续发送下一条消息。

在这里插入图片描述

日志清理机制

配置参数

  • log.retention.hours: 控制日志文件保留的最长时间;
  • log.retention.bytes: 控制日志文件保留的最大大小;
  • log.retention.minutes: 控制日志文件保留的最短时间;
  • log.retention.check.interval.ms: 日志清理器检查日志是否满足清理条件的频率;
  • log.cleaner.enable: 是否启用日志清理;
  • log.cleanup.policy: 对于超过保留时间的日志文件,如何处理,默认delete。支持日志压缩(compaction)和delete+compaction;

日志删除

基于时间的删除策略

  • log.retention.hours: 控制日志文件保留的最长时间,默认168小时(7天);
  • log.delete.delay.ms:执行延迟时间,默认1分钟;

执行日志分段的删除任务时,会首先从Log对象中维护的日志分段的跳跃表中移除需要删除的日志分段,然后将日志分段所对应的数据文件和索引文件添加.deleted后缀。最后转交给名称为delete-file任务来删除以.deleted为后缀的文件,执行延迟时间可通过参数log.delete.delay.ms控制,默认为1分钟。

基于日志大小的删除策略

  • log.retention.bytes: 控制日志文件保留的最大大小;
  • log.delete.delay.ms:执行延迟时间,默认1分钟;

该策略会依次检查每个日志中的日志分段是否超出指定的大小(log.retention.bytes),对超出指定大小的日志分段采取删除策略。

日志压缩

压缩方式

  • 通过GZIP或Snappy压缩器压缩日志段;
  • 通过删除不必要的元数据来减少日志的大小;

参数配置

# 对于segment log进行压缩
log.cleaner.enable=true
# 设置压缩后的日志保留的最长时间
log.retention.hours=168
# 设置日志清理进程的运行频率(以小时为单位)
log.cleanup.policy=compact
# 设置压缩后的日志文件保留的最大大小
log.retention.bytes=1073741824
# 设置segment文件的压缩类型
log.cleaner.io.buffer.size=524288
log.cleaner.io.max.bytes.per.second=1048576
log.cleaner.dedupe.buffer.size=134217728
log.cleaner.threads=2
log.cleaner.min.cleanable.ratio=0.5

压缩流程

  • Kafka的后台线程会定时将topic遍历两次,第一次将每个Key的哈希值最后一次出现的offset记录下来,第二次检查每个offset对应的Key是否在较为后面的日志中出现过,如果出现了就删除对应的日志;
  • 日志压缩是针对Key的,在使用时应注意每个消息的Key值不为NULL;
  • 压缩是在Kafka后台通过定时的重新打开Segment来完成的;

img

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

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

相关文章

利用细粒度检索增强和自我检查提升对话式问题解答能力

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 论文标题:Boosting Conversational Question Answering with Fine-Grained Retrieval-Augmentation and Self-Check 论文地址:https://arxiv.org/abs/2403.18243 检索增强生成…

程序“猿”自动化脚本(一)

1.剪贴板管理器📋 您是否曾经发现自己在处理多个文本片段时忘记了复制的内容?有没有想过有一个工具可以跟踪您一天内复制的所有内容? 该自动化脚本会监视您复制的所有内容,将每个复制的文本无缝存储在时尚的图形界面中&#xff0c…

阿里云4核16G服务器可以用来做什么?

阿里云4核16G服务器可以用来做什么?可用来搭建游戏服务器,阿里云4核16G服务器10M带宽30元1个月、90元3个月,优惠活动 aliyunfuwuqi.com/go/youhui 阿里云4核16G服务器可以用来做什么?除了搭建游戏服务器,还可以用来哪…

基于 GPIO 、Pinctl子系统、设备树的LED 驱动程序

理论部分: 编写思路: GPIO 的地位跟其他模块,比如 I2C 、 UART 的地方是一样的,要使用某个引脚,需要先把引脚配置为 GPIO 功能,这要使用 Pinctrl 子系统,只需要在设备 树里指定就可以。在…

力扣HOT100 - 41. 缺失的第一个正数

解题思路: 原地哈希 就相当于,让每个数字n都回到下标为n-1的家里。 而那些没有回到家里的就成了孤魂野鬼流浪在外,他们要么是根本就没有自己的家(数字小于等于0或者大于nums.size()),要么是自己的家被别…

springCloud项目打包 ,maven package或install打包报错

解决思路一&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.7.RELEASE</version></plugin><plugin>&…

【应急响应事件】记一次矿机木马事件

事情起因&#xff0c;是因为实验室有一台服务器的占用率从开机启动就是100%&#xff0c;很怀疑就是中了某种矿机木马&#xff0c;拿去挖矿了&#xff0c;然后经过师兄的不懈努力&#xff0c;终于找到了木马文件&#xff0c;给他命名为virus_sample 然后我就拿着样本去逆了 木马…

OSCP靶场--Peppo

OSCP靶场–Peppo 考点(ident枚举服务用户名ssh登陆rbash绕过 docker提权) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.158.60 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-10 09:32 EDT Nmap scan report…

使用 Docker 部署 Linux-Command 命令搜索工具

1&#xff09;介绍 Linux-Command GitHub&#xff1a;https://github.com/jaywcjlove/linux-command Linux-Command 仓库搜集了 580 多个 Linux 命令&#xff0c;是一个非盈利性的仓库&#xff0c;生成了一个 Web 网站方便使用&#xff0c;目前网站没有任何广告&#xff0c;内…

T2.数据库原理

2.1 关系模型概述 1.域 域&#xff1a; 一组有相同数据类型的值得集合 2.笛卡尔积 笛卡尔积&#xff1a; 设任意的N个域D1,D2,…,Dn。 3、关系的定义和性质 &#xff08;1&#xff09;关系的数学定义&#xff1a; 在笛卡儿积中取出有实际意义的元组来构造关系。 关系也是…

C++11 数据结构1 线性表的概念,线性表的顺序存储,实现,测试

一 线性表的概念 线性结构是一种最简单且常用的数据结构。 线性结构的基本特点是节点之间满足线性关系。 本章讨论的动态数组、链表、栈、队列都属于线性结构。 他们的共同之处&#xff0c;是节点中有且只有一个开始节点和终端节点。按这种关系&#xff0c;可以把它们的所有…

leetcode每日一题第四十六天

递归解法 class Solution { public:int search(vector<int>& nums, int target) {return midsearch(nums,target,0,nums.size()-1);}int midsearch(vector<int>& nums, int target, int low,int high){if(low < high){int mid (lowhigh) / 2;if(nums[…

在Windows 10中打开PowerShell的几种方法,总有一种适合你

PowerShell是一种比命令提示符更强大的命令行shell和脚本语言。自Windows10发布以来,它已成为默认选择,并且有许多方法可以打开它。 PowerShell和命令提示符之间的区别是什么 PowerShell的使用更复杂,但它比命令提示符强大得多。这就是为什么它成为超级用户和it专业人员的…

从0开始创建单链表

前言 这次我来为大家讲解链表&#xff0c;首先我们来理解一下什么是单链表&#xff0c;我们可以将单链表想象成火车 每一节车厢装着货物和连接下一个车厢的链子&#xff0c;单链表也是如此&#xff0c;它是将一个又一个的数据封装到节点上&#xff0c;节点里不仅包含着数据&…

防错设计及原理

目录 1、防错的作用 2、防错的原理 2.1断根原理 2.2保险原理 2.3自动原理 2.4相符原理 2.5顺序原理 2.6隔离原理 2.7层别原理 2.8复制原理 2.9警告原理 2.10缓和原理 防错法&#xff08;Poka-Yoke&#xff09;&#xff0c;又称愚巧法、防呆法&#xff0c;是一种在作…

C++ 类和对象(一)

目录 0.前言 1.面向过程&面向对象 1.1面向过程编程&#xff08;PP&#xff09; 1.2面向对象编程&#xff08;OOP&#xff09; 1.3从C到C 2.类的引入 2.1C语言中的结构体 2.2C中类的引入 2.3结构体与类的区别 2.4为什么引入类 3.类的定义 3.1声明与定义不分离 …

Blast生态借贷协议Pac Finance陷“清算”风波,兄弟项目ParaSpace曾上演内斗

Blast生态协议又出事了。4月11日晚间&#xff0c;有用户发现借贷协议Pac Finance上出现了大量ezETH清算&#xff0c;涉及金额达2400 万美元。官方回应称&#xff0c;系一位智能合约工程师的操作导致Pac Finance发行清算阈值在没有事先通知团队的情况下被意外更改。 目前社区内…

【MATLAB源码-第8期】基于matlab的DPSK的误码率仿真,差分编码使用汉明码(hanming)。

1、算法描述 差分相移键控常称为二相相对调相&#xff0c;记作2DPSK。它不是利用载波相位的绝对数值传送数字信息&#xff0c;而是用前后码元的相对载波相位值传送数字信息。所谓相对载波相位是指本码元初相与前一码元初相之差。差分相移键控信号的波形如概述图所示。 假设相对…

成都百洲文化传媒有限公司电商领域的新锐力量

在电商服务领域&#xff0c;成都百洲文化传媒有限公司凭借其专业的服务理念和创新的策略&#xff0c;正逐渐成为行业内的翘楚。这家公司不仅拥有资深的电商团队&#xff0c;还以其精准的市场定位和高效的服务模式&#xff0c;赢得了众多客户的信赖和好评。 一、专业团队&#…

UDP网络程序

上一章中&#xff0c;我们介绍了socket&#xff0c;以及TCP/UDP协议。这一章带大家实现几个UDP协议的网络服务。我们需要一个 服务端和一个客户端。 1.服务端实现 1.1socket函数 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, in…