Kafka数据存储概述
Kafka这款分布式消息队列使用文件系统和操作系统的页缓存(page cache)分别存储和缓存消息,摒弃了Java的堆缓存机制,同时将随机写操作改为顺序写,再结合Zero-Copy的特性极大地改善了IO性能。而提起磁盘的文件系统,相信很多对硬盘存储了解的同学都知道:“一块SATA RAID-5阵列磁盘的线性写速度可以达到几百M/s,而随机写的速度只能是100多KB/s,线性写的速度是随机写的上千倍”,由此可以看出对磁盘写消息的速度快慢关键还是取决于我们的使用方法。鉴于此,Kafka的数据存储设计是建立在对文件进行追加的基础上实现的,因为是顺序追加,通过O(1)的磁盘数据结构即可提供消息的持久化,并且这种结构对于即使是数以TB级别的消息存储也能够保持长时间的稳定性能。在理想情况下,只要磁盘空间足够大就一直可以追加消息。此外,Kafka也能够通过配置让用户自己决定已经落盘的持久化消息保存的时间,提供消息处理更为灵活的方式。本文将主要介绍Kafka中数据的存储消息结构、存储方式以及如何通过offset来查找消息等内容。
一、 Kafka中几个重要概念介绍
(1)Broker:消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群;
(2)Topic:主题是对一组消息的抽象分类,比如例如page view日志、click日志等都可以以topic的形式进行抽象划分类别。在物理上,不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可使得数据的生产者或消费者不必关心数据存于何处;
(3)Partition:每个主题又被分成一个或者若干个分区(Partition)。每个分区在本地磁盘上对应一个文件夹,分区命名规则为主题名称后接“—”连接符,之后再接分区编号,分区编号从0开始至分区总数减-1;
(4)LogSegment:每个分区又被划分为多个日志分段(LogSegment)组成,日志段是Kafka日志对象分片的最小单位;LogSegment算是一个逻辑概念,对应一个具体的日志文件(“.log”的数据文件)和两个索引文件(“.index”和“.timeindex”,分别表示偏移量索引文件和消息时间戳索引文件)组成;
(5)Offset:每个partition中都由一系列有序的、不可变的消息组成,这些消息被顺序地追加到partition中。每个消息都有一个连续的序列号称之为offset—偏移量,用于在partition内唯一标识消息(并不表示消息在磁盘上的物理位置);
(6)Message:消息是Kafka中存储的最小最基本的单位,即为一个commit log,由一个固定长度的消息头和一个可变长度的消息体组成;
二、 Kafka的日志结构与数据存储
Kafka中的消息是以主题(Topic)为基本单位进行组织的,各个主题之间相互独立。在这里主题只是一个逻辑上的抽象概念,而在实际数据文件的存储中,Kafka中的消息存储在物理上是以一个或多个分区(Partition)构成,每个分区对应本地磁盘上的一个文件夹,每个文件夹内包含了日志索引文件(“.index”和“.timeindex”)和日志数据文件(“.log”)两部分。分区数量可以在创建主题时指定,也可以在创建Topic后进行修改。(ps:Topic的Partition数量只能增加而不能减少,这点内容超出本篇幅的减少范围,大家可以先思考下)。
在Kafka中正是因为使用了分区(Partition)的设计模型,通过将主题(Topic)的消息打散到多个分区,并分布保存在不同的Kafka Broker节点上实现了消息处理的高吞吐量。其生产者和消费者都可以多线程地并行操作,而每个线程处理的是一个分区的数据。
Kafka的Topic与Patition的关系结构图(官网).png
同时,Kafka为了实现集群的高可用性,在每个Partition中可以设置有一个或者多个副本(Replica),分区的副本分布在不同的Broker节点上。同时,从副本中会选出一个副本作为Leader,Leader副本负责与客户端进行读写操作。而其他副本作为Follower会从Leader副本上进行数据同步。
Kafka数据存储概述相关推荐
- Kafka数据存储详解
1.存储格式概述 每一个partion(文件夹)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件里.但每一个段segment file消息数量不一定相等,这样的特性方便old s ...
- Kafka数据存储结构
Kafka 的数据分为两部分:元数据.消息数据. 元数据:元数据包括集群信息.节点信息.队列信息.主从信息.分区信息.分区分布信息等,这类信息都存储在 Zookeeper 上,Kafka 的任何一个节 ...
- NEAR官方文档翻译(三)基础(Basics)- 数据存储(Data Storage)
文章目录 数据存储 概述 AssemblyScript集合类型 大O记号 Big-O Notation Gas消耗举例 Gas Consumption Examples PersistentVecto ...
- kafka数据和日志目录迁移教程
简介 Kafka在运行的过程中,存储在磁盘上的数据会逐渐扩大,甚至会撑爆系统盘,在线上环境我们通常会把kafka的数据存储目录和日志存储目录迁移到磁盘中,或者扩容kafka的存储磁盘.本文将一站式解决 ...
- CC00060.kafka——|Hadoopkafka.V45|——|kafka.v45|日志存储概述|
一.日志存储概述 ### --- 日志存储概述~~~ Kafka 消息是以主题为单位进行归类,各个主题之间是彼此独立的,互不影响. ~~~ 每个主题又可以分为一个或多个分区. ~~~ 每个分区各自存在 ...
- java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringB ...
- 05_ClickHouse、MergeTree系列引擎概述与存储结构、建表模板、建表语句、MergeTree设置、建表示例、数据存储、数据片段(data part)
2.MergeTree系列引擎概述与存储结构 2.1.建表模板 2.2.建表语句 2.3.MergeTree设置 2.4.建表示例 2.5.数据存储 2.6.数据片段(data part) 2.Mer ...
- Kafka的数据存储
目录 一.基本概念 二.存储位置及格式 1.存储位置 2.分区与存储方式的关系 三.操作演示 1.创建一个主题 2.查看数据目录中的效果 3.向此主题写入大批量数据 4.查看segment file ...
- Apache Durid 数据存储(Hadoop概述 安装 HDFS概述 数据存储遇到的问题)
Apache Durid 数据存储 Apache Durid 数据存储 1. 分布式技术 1.1 为什么需要分布式 1.1.1 计算问题 1.1.2 存储问题 1.2 分布式系统概述 1.3 分布式实 ...
最新文章
- CodeForces - 1325D Ehab the Xorcist(构造+异或)
- 读《系统虚拟化-原理与实现》-第一章
- 如何判断python是否安装成功_python怎么判断模块安装完成
- golang 连接多个mysql_Prometheus+Grafana监控MySQL
- PHP拼接唯一索引,合并两个数组数据
- android开发实战-记账本APP(二)
- 尚品汇Vue项目 前台+后台完成品源码(含在线演示)
- Element属性:scrollHeight,clientHeight,offsetHeight区别
- 目前总结最新最系统的Java程序员未来职业规划路线,请收藏
- PS剪切图的基本操作
- golang base64解码编码实现
- 46、建筑防烟排烟系统的维护保养要求
- 南京航空航天大学计算机组成原理,2017年南京航空航天大学计算机科学与技术学院829计算机专业基础之计算机组成原理考研题库...
- 第七课:BootRom的烧录
- ffmpeg对ts流的解析
- 雪糕大军纷纷网红出道,“天价”背后是什么让消费者买单?
- 鸿蒙如何用JS开发智能手表App
- 创建C++字符串最常用的五种方法,难吗?有手就行!
- SLAM自动驾驶行业交流(微信)群
- unordered_set和unordered_map用法详解
热门文章
- i.MX 6ULL 驱动开发 六:beep 驱动
- 【Matlab脑电信号】小波睡眠监测【含源码 595期】
- 形象理解线性代数(一)——什么是线性变换?
- Could not GET xxx.pom
- 莱茵特机器人奖金制度_TUV莱茵携手国机智能合作中国机器人规范制定
- airpods升系统_AirPods 也能升级系统了!真香……
- 村田噪声抑制基础教程-第一章 需要EMI静噪滤波器的原因
- java梯形法的递推化_计算方法实验指导书(2011[1].7.19)
- 利用低代码优化人力资源配置,为软件开发降本提效
- iqc工作职责和工作内容_IQC岗位职责