CN112051968B - 基于Kafka的分布式数据流分级缓存自动迁移方法 - Google Patents
基于Kafka的分布式数据流分级缓存自动迁移方法 Download PDFInfo
- Publication number
- CN112051968B CN112051968B CN202010785947.3A CN202010785947A CN112051968B CN 112051968 B CN112051968 B CN 112051968B CN 202010785947 A CN202010785947 A CN 202010785947A CN 112051968 B CN112051968 B CN 112051968B
- Authority
- CN
- China
- Prior art keywords
- value
- data
- score
- kafka
- migration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于大数据存储领域,涉及一种基于Kafka的分布式数据流分级缓存自动迁移方法。根据Kafka数据访问的特点,设计了热数据的存储结构,不仅减少了存储空间,而且能够根据该结构来管理热数据的元数据信息。根据热数据的结构,提出了结合访问热度和迁移频率的数据自动迁移方法(HHF‑Migrate),系统会根据该数据识别方法计算所有TopicPartition数据的访问热度和迁移频率,自动将热度和频率低的冷数据从SSD迁移至HDD,而HDD中热度和频率高的热数据将自动迁移至SSD,从未实现分级缓存。本发明设计的系统提升了Kafka的吞吐量,提供较低的延迟并减少存储成本。
Description
技术领域
本发明属于大数据存储领域,涉及基于Kafka的分布式数据流分级缓存自动迁移方法。
背景技术
Kafka是当下十分热门的分布式消息系统,Kafka中消息是以话题(topic)进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。在Kafka中,topic是逻辑上的概念,而分区(partition)则是物理上的概念。一个topic可能被拆分成多个分区(partition)来存储,每个主题保存在多个partition中,因此一个TopicPartition代表了正在记录的log对象的topic名称和相应的partition编号。Kafka每个分区有多个副本,其中有一个leader副本和多个follower副本。
日常使用的存储设备主要有机械硬盘(Hard Disk Drive,HDD)和固态硬盘(SolidState Disk,SSD)。HDD的存储容量能够满足人们的要求,但是速度方面限制过多。随着硬件技术的发展,SSD的出现基本能够满足人们日常对于存储速度的要求。SSD相对于HDD,具有随机读写速度快的优点,其每秒的读写次数(Input/Output Operations Per Second,IOPS)是HDD的数百倍或者更多。但是SSD还存在一些问题和缺点,例如价格很高,并且数据持久性随着写的次数不断下降,具有有限次的擦除次数。所以,利用HDD和SSD的不同特点,将不同的数据按照访问热度和频率等重要条件存储在最适合的存储设备上,即进行分级缓存,可以达到提高数据访问速度、提高存储容量、减少存储成本、较少功耗等目的。通过分级存储,将数据中热度较高的保存在那些性能好读写速度快的存储设备上,例如SSD上,用来保证访问的低延迟,而将热度低的数据保存在那些廉价、存储空间比较大的存储设备上,例如HDD上,这样就可以减少整体的存储成本,还能够满足系统对于存储容量的要求。数据会根据一定的置换策略在SSD和HDD之间自动迁移,比如SSD中访问热度低的数据会自动迁移到HDD,同时HDD中访问热度高的数据会自动迁移到SSD中。
Kafka系统作为缓存中间件可以提供高吞吐量、解耦生产者和消费者、匹配生产消费的速度、处理各种数据结构的数据、动态扩展、低延迟等功能,但是Kafka提供高吞吐量、低延迟主要依赖于I/O优化,普通的磁盘I/O即使使用零拷贝,但是还是会受限于磁盘本身的物理特性。为了提供高吞吐量和低延迟的功能,可以使用更快的存储设备,比如SSD,由于SSD的价格限制,不能够大量的使用,所以可以使用SSD和HDD的混合存储为Kafka提升吞吐量、减少延迟。由于Kafka分布式消息系统本身并不支持分级缓存,在此考虑分布式大数据环境下,结合存储介质的发展规律,对分布式消息系统Kafka进行改进,实现数据流可以基于HDD/SSD进行分级缓存,扩展Kafka的功能,使其能够支持更大量的数据,可以应对更多的社会需求。
发明内容
针对Kafka系统不支持分级存储的问题,本发明提出了结合访问热度和迁移频率的数据自动迁移方法(HHF-Migrate),它通过对日志的热数据信息进行统计,计算TopicPartition的访问热度和迁移频率,自动将热度和频率低的冷数据从SSD迁移至HDD,而HDD中热度和频率高的热数据将自动迁移至SSD,从而实现数据的分级缓存。实验表明本发明通过分级缓存可以提高Kafka系统的流处理性能,减少存储成本并降低功耗。
本发明提出的数据自动迁移方法,首先统计所有TopicPartition的热数据信息,然后根据热数据信息计算每个TopicPartition对应的访问热度和迁移频率,再将TopicPartition按照迁移频率由高到低排序,从排序的后一半中按照访问热度再次从大到小进行排序,综合存储空间确定需要进行迁移的TopicPartition。具体步骤如下:
步骤一:统计TopicPartition的热数据信息
在一段时间内发生读写的数据在以后继续被访问的几率也更高,应该存放在SSD中,而SSD中长时间未使用的数据在未来再次被访问到的几率则很低,应该将其迁移到HDD中,即依据数据的访问热度进行自动迁移,所以需要对本地所有的TopicPartition进行基本热数据(HotData)统计,其中TopicPartition代表了正在记录的log对象的topic名称和partition编号;SsdOrHdd则代表该TopicPartition目前是在SSD还是在HDD;LastReadTime代表该TopicPartiton最近的一次读时间;LastWriteTime代表该TopicPartition最近一次的写时间;UsableSpace代表该TopicPartition占用的空间大小。
步骤二:计算访问热度score
根据HotData信息,对本地所有的TopicPartition进行score统计,score越大则代表数据访问热度越高,计算过程如下:
判断所有本地副本集合valueToBrokerId中是否包含该TopicPartition,如果不包含则初始化其score值:TopicPartition为leader副本时score=I_L,为follower副本时score=I_F。I_L和I_F是根据不同硬件配置设置的score初始化参数,并且保证I_L>I_F>0(防止刚初始化就将其从SSD置换出去)。如果包含该TopicPartition,则更新其score值,如公式(1)所示:
score=score+sleader+sread+swrite (1)
其中sleader、sread和swrite代表一个log对象的三个不同方面的统计得分:若该TopicPartition是leader副本,sleader取值为S_L(系统参数,表示leader得分),否则取值为0;若发生读,sread取值为S_R(系统参数,表示读操作得分),否则取值为0;若发生写,swrite取值为S_W(系统参数,表示写操作得分),否则取值为0。计算完score之后,将最新的HotData数据存储在valueToBrokerId中。valueToBrokerId是HashMap结构,key对应TopicPartition,value对应该TopicPartition的HotData值,该集合的数据会用于下一轮计算。
步骤三:计算迁移频率counter
若仅按照访问热度确定迁移的TopicPartition,有些特殊的workload会存在不断进行迁移的情况,波动性比较大。针对这个问题,可以对迁移的次数进行统计,记录TopicPartition的迁移频率,迁移频率低的数据继续被访问的概率也低,应该迁移到HDD中,而迁移频率高的数据则不进行迁移,这样就可以避免频繁迁移导致的系统资源浪费。所以,HotData中还需要记录一个counter值,用来统计TopicPartition的迁移频率,值越大代表迁移的频率越高,其计算过程分为增加和衰减两个过程:
如果每命中一次就进行增加,那么随着log对象的命中该counter值会非常大,因此将该值控制在0-255之间。每次命中时,计算一个增加阈值p,并更新counter值,计算方式如公式(2):
其中FlogFactor是增长系数,值越大意味着counter值越难增加。r是一个随机数,只有其小于阈值p时才会更新counter值。公式(2)保证在上百万次的命中时才会有可能增加到255,这样既节省了存储的空间,又保证该值能够代表TopicPartition的命中率。
但是只增加命中率不能够很好的代表该TopicPartition被迁移的频率,因为迁移具有一定的时效性,如果数据很长时间没有发生迁移,其在未来会被迁移的概率也是很低的,所以counter值需要根据时间进行衰减。在衰减时,计算一个衰减阈值q,并更新counter值,计算方式如公式(3)
其中FDecayTime是衰减系数,值越大代表counter衰减越慢,time是当前系统时间,LastDecreTime是HotData中统计的上次衰减时间。随着时间推移,公式(3)将长时间未命中的TopicPartition的counter值置0,这样的TopicPartition应该被迁移到HDD中。
步骤四:按照迁移频率和访问热度排序,确定需要迁移的TopicPartition。
对本地所有的TopicPartition根据counter数值由大到小进行排序,因为排序在前面的具有较高的迁移频率,不再进行迁移,所以排序的后一半数据再根据score值从大到小重新排序,结合SSD的存储空间确定哪些TopicPartition可以迁移进入SSD。后一半数据中,score值越高的数据热度越高,若SSD的存储空间能够容纳这些数据,则将他们迁移到SSD中。而score值越低的数据热度相对较低,将自动迁移到HDD中。
本发明具备的有益效果:
本发明基于Kafka系统,结合数据的访问热度和迁移频率对Kafka集群中存储在SSD/HDD的TopicPartition进行自动迁移,可以提高Kafka系统的流处理性能,减少存储成本,更加合理地发挥SSD的优质性能,扩展了Kafka系统的功能。
附图说明
图1是Kafka分级缓存模型。
图2是HotData数据结构。
图3是数据迁移具体流程。
图4是生产者吞吐量结果对比图。
图5是消费者吞吐量结果对比图。
具体实施方式
下面结合附图对本发明的具体实施做详细说明。
本实施方式在集群环境下进行,集群包括三个节点,软件环境为Ubuntu16.04系统,编程语言为Java/scala,每个节点的分级存储系统均基于三星固态硬盘SSD(250GB)和希捷机械硬盘HDD(1TB)构建。集群相应的工作参数如下:topic的副本系数是2,broker(服务器)数量是3,Partition系数也是3,生产者和消费者的数量都是6。生产者发布消息到分级缓存系统,消费者从缓存系统读取消息。Kafka集群中对TopicPartition的log进行读写时,如图1中log模块所示,使用read()和append()函数。
步骤一:对本地所有的TopicPartition进行基本热数据(HotData)统计,其数据结构如图2所示,包括上次读写时间等信息。
步骤二:计算数据访问热度score。
根据硬件配置设置score初始化参数,设置I_L=8,I_F=3,S_L=4,S_R=1,S_W=2。若valueToBrokerId中不包含该TopicPartition,则根据是否是leader进行score的初始化,如果是leader则score=8,否则score=3;如果包含该TopicPartition,则更新score值:若是leader,更新score=score+4,若发生写,更新score=score+2,若发生读,更新score=score+1。计算所有TopicPartition的score,结果如图3的score计算部分所示。
步骤三:计算数据迁移频率counter。
设置增长困难系数FlogFactor=10,衰减系数FDecayTime=100。在增加时,由当前counter和FlogFactor值计算阈值p并根据随机数r的大小更新counter;在衰减时,获取当前系统时间time以及HotData中统计的上次衰减时间LastDecreTime,根据FDecayTime、LastDecreTime和time计算此次的衰减阈值q,依据其大小更新counter。计算所有TopicPartition的counter值,结果如图3的更新counter部分所示。
步骤四:按照迁移频率和访问热度排序,确定需要迁移的TopicPartition。
对本地所有的TopicPartition根据counter值由大到小排序,从排序的后一半数据中再根据score值从大到小重新排序。后一半数据中,score值越高的数据热度越高,应该放置到SSD中,但需要满足SSD的存储空间要能容纳迁移的数据。而score值越低的数据热度相对较低,将自动迁移到HDD中。
实验结果如图4和图5所示。图4是生产者的吞吐量,可以看到,相对于仅使用HHD或SSD的存储方法,分级存储的性能显著提高,最高可以达到将近两倍的吞吐量。图5是消费者的吞吐量,只有在topic数为1时,分级存储略逊于SSD存储,在其余情况,分级存储的性能都优于HHD和SSD的存储方法。以上实验结果表明,本发明通过分级缓存可以提高Kafka系统的流处理性能,减少存储成本。
Claims (2)
1.一种基于Kafka的分布式数据流分级缓存自动迁移方法,其特征在于,以下步骤:
步骤一:对本地所有的TopicPartition进行基本热数据HotData统计,包括最近一次的读写时间信息;
步骤二:计算访问热度score
根据HotData信息,对本地所有的TopicPartition进行score统计,score越大则代表数据热度越高,计算过程如下:
判断所有本地副本集合valueToBrokerId中是否包含该TopicPartition,如果不包含则初始化其score值:TopicPartition为leader副本时score=I_L,为follower副本时score=I_F;I_L和I_F是根据不同硬件配置设置的score初始化参数,并且保证I_L>I_F>0;如果包含该TopicPartition,则更新其score值,如公式(1)所示:
score=score+sleader+sread+swrite (1)
其中sleader、sread和swrite代表一个log对象的三个不同方面的统计得分:若该TopicPartition是leader副本,sleader取值为S_L,S_L表示leader得分,否则取值为0;若发生读,sread取值为S_R,S_R表示读操作得分,否则取值为0;若发生写,swrite取值为S_W,S_W表示写操作得分,否则取值为0;
步骤三:计算迁移频率counter
统计TopicPartition的迁移频率counter,值越大代表迁移的频率越高,其计算过程分为增加和衰减两个过程:
如果每命中一次就进行增加,那么随着log对象的命中该counter值会非常大,因此将该值控制在0-255之间;每次命中时,计算一个增加阈值p,并更新counter值,计算方式如公式(2):
其中FlogFactor是增长系数,值越大意味着counter值越难增加;r是一个随机数,只有其小于阈值p时才会更新counter值;
在衰减时,计算一个衰减阈值q,并更新counter值,计算方式如公式(3):
其中FDecayTime是衰减系数,值越大代表counter衰减越慢,time是当前系统时间,LastDecreTime是HotData中统计的上次衰减时间;
步骤四:按照迁移频率和访问热度排序,确定需要迁移的TopicPartition;
对所有TopicPartition按迁移频率由高到低排序,排序靠前的不进行迁移,排序的后一半数据再根据score值从大到小重新排序;后一半数据中,score值越高的数据热度越高,若SSD的存储空间能够容纳这些数据,则将他们迁移到SSD中;而score值越低的数据热度相对较低,将自动迁移到HDD中。
2.如权利要求1所述的一种基于Kafka的分布式数据流分级缓存自动迁移算法,其特征在于,步骤三中,所述的公式(2)保证在上百万次的命中时才会增加到255,这样既节省了存储的空间,又保证该值能够代表TopicPartition的命中率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010785947.3A CN112051968B (zh) | 2020-08-07 | 2020-08-07 | 基于Kafka的分布式数据流分级缓存自动迁移方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010785947.3A CN112051968B (zh) | 2020-08-07 | 2020-08-07 | 基于Kafka的分布式数据流分级缓存自动迁移方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112051968A CN112051968A (zh) | 2020-12-08 |
CN112051968B true CN112051968B (zh) | 2021-10-22 |
Family
ID=73602170
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010785947.3A Active CN112051968B (zh) | 2020-08-07 | 2020-08-07 | 基于Kafka的分布式数据流分级缓存自动迁移方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112051968B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799597A (zh) * | 2021-02-08 | 2021-05-14 | 东北大学 | 面向流数据处理的分级存储容错方法 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9542100B2 (en) * | 2014-09-02 | 2017-01-10 | International Business Machines Corporation | Management of memory pages |
US10346354B2 (en) * | 2016-10-28 | 2019-07-09 | Netapp, Inc. | Reducing stable data eviction with synthetic baseline snapshot and eviction state refresh |
CN107294801B (zh) * | 2016-12-30 | 2020-03-31 | 江苏号百信息服务有限公司 | 基于海量实时互联网dpi数据的流式处理方法及系统 |
US10073903B1 (en) * | 2017-02-27 | 2018-09-11 | Timescale, Inc. | Scalable database system for querying time-series data |
CN107844269B (zh) * | 2017-10-17 | 2020-06-02 | 华中科技大学 | 一种基于一致性哈希的分层混合存储系统 |
CN108038226A (zh) * | 2017-12-25 | 2018-05-15 | 郑州云海信息技术有限公司 | 一种数据快速采集系统及方法 |
CN109165207B (zh) * | 2018-07-16 | 2021-11-26 | 华南农业大学 | 基于Hadoop的饮用水海量数据存储管理方法和系统 |
CN110209526B (zh) * | 2018-08-14 | 2023-06-06 | 腾讯科技(深圳)有限公司 | 一种存储层同步系统、及存储介质 |
CN110334075B (zh) * | 2019-04-04 | 2023-06-20 | 平安科技(深圳)有限公司 | 基于消息中间件的数据迁移方法及相关设备 |
CN110716913B (zh) * | 2019-07-31 | 2022-12-20 | 安徽四创电子股份有限公司 | 一种Kafka与Elasticsearch数据库数据的互相迁移方法 |
CN110532247B (zh) * | 2019-08-28 | 2021-12-21 | 北京皮尔布莱尼软件有限公司 | 数据迁移方法和数据迁移系统 |
CN111046099A (zh) * | 2019-11-12 | 2020-04-21 | 上海麦克风文化传媒有限公司 | 一种热数据高性能存储架构 |
CN110990340B (zh) * | 2019-11-12 | 2024-04-12 | 上海麦克风文化传媒有限公司 | 一种大数据多层次存储架构 |
CN111049898A (zh) * | 2019-12-10 | 2020-04-21 | 杭州东方通信软件技术有限公司 | 一种实现计算集群资源跨域架构的方法及系统 |
CN111064789B (zh) * | 2019-12-18 | 2022-09-20 | 北京三快在线科技有限公司 | 数据迁移的方法和系统 |
CN111367984B (zh) * | 2020-03-11 | 2023-03-21 | 中国工商银行股份有限公司 | 高时效的数据加载入数据湖的方法及系统 |
CN111427969B (zh) * | 2020-03-18 | 2022-05-27 | 清华大学 | 一种分级存储系统的数据替换方法 |
-
2020
- 2020-08-07 CN CN202010785947.3A patent/CN112051968B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112051968A (zh) | 2020-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193646B (zh) | 一种基于混合主存架构的高效动态页面调度方法 | |
US9069484B2 (en) | Buffer pool extension for database server | |
RU2671049C2 (ru) | Выгрузка в файловой системе | |
CN103246696A (zh) | 高并发数据库的访问方法及应用于多服务器系统的方法 | |
CN107888687B (zh) | 一种基于分布式存储系统的代理客户端存储加速方法及系统 | |
CN108089825B (zh) | 一种基于分布式集群的存储系统 | |
WO2023207562A1 (zh) | 一种数据处理方法、装置及设备 | |
CN112346659B (zh) | 一种分布式对象存储元数据的存储方法、设备及存储介质 | |
CN108572799B (zh) | 一种双向哈希链表的异构内存系统数据页迁移方法 | |
CN112799597A (zh) | 面向流数据处理的分级存储容错方法 | |
CN106909323B (zh) | 适用于dram/pram混合主存架构的页缓存方法及混合主存架构系统 | |
CN112051968B (zh) | 基于Kafka的分布式数据流分级缓存自动迁移方法 | |
CN103548005A (zh) | 替换缓存对象的方法和装置 | |
CN107728938B (zh) | 一种低能耗集群环境下基于频度关联的冷数据放置策略 | |
CN113672169A (zh) | 流处理系统的数据读写方法和流处理系统 | |
CN103605482A (zh) | 一种硬盘内数据高性能存储方法 | |
CN112463073A (zh) | 一种对象存储分布式配额方法、系统、设备和存储介质 | |
CN108664217A (zh) | 一种降低固态盘存储系统写性能抖动的缓存方法及系统 | |
CN110716940B (zh) | 一种增量式数据存取系统 | |
Zhao et al. | LS-AMS: An adaptive indexing structure for realtime search on microblogs | |
CN110659305A (zh) | 基于非易失存储系统的高性能关系型数据库服务 | |
CN107870875A (zh) | 一种基于分布式内存可定制智能数据缓存方法 | |
CN103365897A (zh) | 一种支持Bigtable数据模型的片段缓存方法 | |
CN112817982A (zh) | 一种基于lsm树的动态幂律图存储方法 | |
CN112364061A (zh) | 一种基于mysql高并发访问数据库的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |