CN106648904B - 一种流式数据处理自适应速率控制方法 - Google Patents
一种流式数据处理自适应速率控制方法 Download PDFInfo
- Publication number
- CN106648904B CN106648904B CN201710011464.6A CN201710011464A CN106648904B CN 106648904 B CN106648904 B CN 106648904B CN 201710011464 A CN201710011464 A CN 201710011464A CN 106648904 B CN106648904 B CN 106648904B
- Authority
- CN
- China
- Prior art keywords
- data
- batch
- processing
- message queue
- rate
- 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.)
- Expired - Fee Related
Links
- 238000012545 processing Methods 0.000 title claims abstract description 199
- 238000000034 method Methods 0.000 title claims abstract description 62
- 230000003044 adaptive effect Effects 0.000 title claims abstract description 21
- 238000013467 fragmentation Methods 0.000 claims abstract description 15
- 238000006062 fragmentation reaction Methods 0.000 claims abstract description 15
- 239000012634 fragment Substances 0.000 claims description 71
- 238000005192 partition Methods 0.000 claims description 44
- 238000004364 calculation method Methods 0.000 claims description 25
- 238000004422 calculation algorithm Methods 0.000 claims description 11
- 238000013507 mapping Methods 0.000 claims description 9
- 238000000638 solvent extraction Methods 0.000 claims description 9
- 230000008859 change Effects 0.000 claims description 5
- 230000000903 blocking effect Effects 0.000 claims description 2
- 230000001186 cumulative effect Effects 0.000 claims description 2
- 230000032297 kinesis Effects 0.000 claims description 2
- 230000003139 buffering effect Effects 0.000 claims 2
- 238000004883 computer application Methods 0.000 abstract description 2
- 230000008569 process Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 238000011144 upstream manufacturing Methods 0.000 description 3
- 230000001934 delay Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- ZLIBICFPKPWGIZ-UHFFFAOYSA-N pyrimethanil Chemical compound CC1=CC(C)=NC(NC=2C=CC=CC=2)=N1 ZLIBICFPKPWGIZ-UHFFFAOYSA-N 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明属于计算机应用技术领域,一种流式数据处理自适应速率控制方法。该方法基于常用的数据接收消息队列和大数据分布式计算框架,根据当前计算集群的情况,通过预分片的方式调整数据处理的并行度,并通过自适应实时速率控制方法动态调整集群当前处理数据的数量,保证计算集群的稳定性,降低数据流式处理的延迟。随着“大数据”逐步深入到各个行业中,海量数据实时处理的应用范围逐步扩大。海量数据处理系统的实时性和稳定性是十分重要的。该方法在不增加计算集群硬件数量和任务编程复杂度的情况下,在一定程度上提升了计算集群的稳定性和处理效率。
Description
技术领域
本发明属于计算机应用技术领域,涉及一种流式数据处理自适应速率控制方法。
背景技术
当前,随着技术的发展,数据量日益增加,“大数据”技术已经渗透到各行各业。目前,许多设备都会收集大量的数据,并希望对数据及时处理从而发掘其中的价值。例如智能手机、传感器、物联网设备、社交网络和在线事务系统产生的数据都需要不断的收集,通过实时的对数据进行分析,从而实现快速响应。因此,如何提升数据实时分析处理的能力也成为一个十分重要的问题。
当前一些主流的大数据实时处理框架有Spark,Storm,Flink等。Spark Streaming是对Spark核心API的扩展,它是按照一定的时间间隔将任务分成一系列短小的批处理作业进行处理。Storm是以单条记录为粒度进行处理的流式处理系统,拥有良好的实时性。Flink和Spark类似,其核心是流式数据流引擎,为数据流上的分布式计算提供了数据分发、通信和容错。但是和Spark Streaming相比,Storm的吞吐量较低,且实现复杂的统计需求较为困难。Flink的批处理和流式处理是两个独立的模块,无法进行结合。Spark Streaming因为使用Micro-batch处理数据,可以达到较高的吞吐率,在满足秒级的实时性要求同时可以达到较高的效率。
流式处理系统需要良好的实时性,并且在处理突发任务时能保证系统的稳定。通常,流式处理架构通过以下几种方式保证系统的实时性和稳定性:1.当处理的负载超过系统处理能力上限时,通过丢弃部分数据降低工作负载;2.动态资源管理;3.动态批次大小。但是丢弃数据通常会造成计算结果不准确,动态资源 管理为了针对数据处理洪峰需要更多的硬件资源,动态批次大小使得运行延迟变得不确定。
集群的状态不是一成不变的,因而人为设置的静态数据处理速率上限可能是不准确的,太小可能造成在处理突发的速率增加时无法充分利用计算资源,太大则可能导致系统接收过多的数据,造成计算集群的高延迟,从而导致系统不稳定。
发明内容
针对现有技术中存在的问题,本发明提供了一种海量数据的流式处理自适速率控制方法。该方法基于常用的数据汇总消息队列和流式数据分布式计算框架,根据当前计算集群的情况,通过预分片的方式调整数据处理的并行度,并通过自适应实时速率控制方法动态调整集群当前处理数据的数量,使得每一批输入数据的处理时间和批次间隔保持一致,保证计算集群的稳定性,降低数据流式处理的延迟。
用户可以利用本技术提供的方法实现如下功能:海量数据的实时接收和预处理;数据的实时处理;数据预分片及数据处理的并行化调整;实时处理数据数量的动态调整;处理结果输出到数据库中。
本发明的技术方案:
一种流式数据处理自适应速率控制方法,步骤如下:
第一步,数据接收和分区缓存
流式数据处理系统接收的数据,其格式由用户定义。要求一条完整的数据为一行,或者使用无歧义的特殊分隔符对数据进行分割。使用通用的消息队列作为数据源对数据进行汇总,并对数据按照分区规则将数据保存到消息队列中的某个分区中。本步骤使得消息队列中各个分片中的数据数量较为均匀,消息 队列中的数据供之后的步骤读取计算。
第二步,数据预分片
从消息队列中读取数据前,将消息队列中单个数据分片映射到多个流式数据处理集群的分片中,映射的数量根据集群虚拟核心数量进行设置;避免了之后在计算集群中对数据进行重新分片以及task发送到工作节点的消耗。预分片方式在将数据获取推迟到计算时进行,从而将原来的数据读取、重新分片、task连同分片发送到工作节点进行计算,这三个步骤整合为在计算时对按照分片规则分片的数据进行读取并计算。
分片的数量决定了系统能达到的最大的并行度,从而影响端到端延迟。方法在任务开始时确定了分片的数量,当集群的各个工作节点的性能差距不大时,可以设置分片数量为集群可用虚拟核心的整数倍,这样可以保证任务可以平均分配到每一个CPU核心上,避免正常运行过程中出现某个节点空闲的情况,从而充分利用硬件资源。
通过本步骤,系统得到了消息队列和流式数据处理集群之间分片的映射关系,之后数据读取按照该映射关系确定每一条数据的流向。
第三步,处理速率实时反馈控制
从消息队列中读取数据,并根据当前的数据处理速率上限确定最多可以从消息队列中读取的数据数量,避免读取的数据数量超过计算集群的最大处理能力;实时速率控制器的处理速率上限计算方法如下:
3.1)通过慢启动的方式开始进行调整,初始的数据处理速率上限设置为消息队列的每个分片每秒获取n条数据,50<n<1000;
3.2)第一批完成后,对以后每一批按照以下的步骤对数据处理速率上限进行计算;
3.2.1)在批次开始时,提交当前批次的开始时间t_batchst给速率控制器;
3.2.2)在批次完成时,提交当前批次的处理结束时间t_batched,处理该批次用时t_proclast,,该批次在批次队列中的等待时间t_waitlast,该批次处理数据的数量elemnumlast;
3.2.3)在当前批次提交时,对当前批次的数据处理速率上限进行计算,分为以下三种情况:第一种情况,在当前批次提交时,上一批次执行完成,且上一批次数据的处理时间与流式数据批处理集群的批次间隔t_interval相差大于松弛参数prelx;第二种情况,当前批次提交时,上一批次执行完成,且上一批次数据的处理时间位于t_interval-prelx和t_interval之间,prelx=min(50,t_interval×0.05);第三种情况,当前批次提交时,上一批次尚未完成。
第一种情况和第三种情况都基于PID控制算法对数据处理速率上限计算:
newRate=latesRate-Kp×error-Ki×historicaiError-Kd×dError (1)
其中,latestRate为最新处理完成批次的数据处理速率上限;Kp为比例系数,取值为1;error为数据处理速率的估计误差;Ki为积分系数,取值为0.2;historicalError为数据处理速率的累积误差;Kd为微分系数,为了减小噪声数据对系统的影响,取值为0;dError为偏差速率变化率;
数据处理速率的估计误差error为:
其中,elemnumlast为最新处理完成的批次处理数据的数量;t_proclast为最新处理完成的批次处理的时间;Kblock为阻塞系数,阻塞系数取值0.3;blockTime为估计的处理时间增加值;当为第一种情况时,blockTime取值为0,此时由公 式(2)计算得到的结果为数据处理速率的估计误差;当为第三种情况时,blockTime计算如公式(3)所示:
blockTime=max(t_interval-(submit_time-t_batchst),brelx) (3)
其中,t_interval为批次提交的间隔;submit_time为任务的提交时间;在批次间隔大于1000ms时,brelx=50ms,当批次间隔小于1000ms时,brelx=t_interval×0.05;
数据处理速率的累积误差historicalError的计算如公式(4)所示:
其中,t_waitlast为最新处理完成的批次在批次队列中等待的时间;当为第一种情况时,blockTime取值为0;当为第三种情况时,blockTime计算如公式(3)所示;processingRate表示最新处理完成批次的数据处理速率,其计算如公式(5)所示:
偏差速率变化率dError的计算如公式(6)所示:
其中,latestError表示前一个处理完成批次的速率估计误差,delaySinceUpdate表示前一个处理完成批次和最近完成批次之间经过的时间,其计算方式如公式(7)所示:
delaySinceUpdate=lastProcessingEndTime-latestTime (7)
第二种情况,使用最新处理完成批次的数据处理速率上限latestRate作为当前批次的数据处理速率上限newRate;
进一步地,如果最新完成的三个批次的处理时间都位于t_interval-prelx和t_interval之间时,则使用公式(8)对速率上限进行计算:
其中rlast表示最新完成批次的处理速率,r2nd-last表示倒数第二个完成批次的处理速率,r3rd-last表示倒数第三个完成批次的处理速率。
第四步,数据的读取和实时处理。流式数据批处理集群按照计算好的数据处理速率上限和预分片规则对数据进行读取。在预分片的过程中,只是获取了当前批次需要从消息队列各个分片中获取数据的partition ID、起始偏移量和终止偏移量。数据只有在流式数据批处理集群开始处理时才进行读取。在本批次数据处理完成之后,将结果实时输出到数据库中。
进一步地,所述的第一步的数据接收和分区缓存的具体方法为:
消息队列中包含多个主题的信息,一个主题为一类消息,每个主题将被分成多个分区。为了避免数据倾斜,消息队列在接收到数据后,按照分片规则将数据缓存到消息队列的某个分区中。数据分区的流程如图3所示。
消息队列从数据源中接收数据。在接收到数据后,按照以下方法对数据发送到哪个消息队列的分区进行计算:
partNum=MD5(key)mod numPartition
其中key表示数据的ID,如果数据没有ID,则以随机数来替代,MD5(key)表示数据key的MD5值,numPartition表示消息队列分区的数量。消息队列将数据按照partNum指示的ID保存在消息队列指定的分区中,等待消费者对数据进行读取。
进一步地,所述的第二步的预分片的具体方法为:
1)流式数据处理集群以批次的时间间隔为周期,获取消息队列的分片信息; 对于每一个批次,计算集群都需要获取消息队列中的n个数据分片,则消息队列中数据分片信息表示为s_partition=(s_partitioni|i=1...n);对于当前批次,消息队列每一个分片s_partitioni的信息包括:分片所属的主题topic、消息队列分片的唯一ID、当前批次需要获取的数据在消息队列指定分片中的起始位置start_offset、当前批次需要获取的数据在消息队列指定分片中的终止位置end_offset。
2)流式数据处理集群将批次信息提交到批次消息队列中;在集群没有开始对数据进行处理之前,即前一批次的数据尚未处理完成时,数据并未真正读到计算集群中,提交的只有消息队列的分片的信息。
3)根据当前批次的消息队列分片信息计算流式数据处理集群的分片对应消息队列中哪一个分片的哪一部分数据。
3.1)计算消息队列中分片的数量source_num和流式数据处理集群中空闲虚拟核心的数量core_num的最小公倍数为spark_num,并由此得到每一个消息队列分片需要映射到的流式数据批处理集群的分片数量为map_num=spark_num/source_num。
3.2)计算消息队列和流式数据处理集群分片的映射关系;对消息队列中当前批次的每一个分片的信息s_partition=(s_partitioni|i=1...n)进行处理;获取当前分片s_partitioni中数据的数量elem_num=end_offset-start_offset+1,将当前批次消息队列一个分片中的数据平均分配到map_num个流式数据处理集群的分片中,每一个流式数据处理集群分片中的数据量为each_num=elem_num/map_num;若当前批次数据源分片中的数据无法被map_num整除,则先计算多余出来的数据的条数为left_num=elem_num%map_num,在每一个消息队列分片对应的map_num个流式 数据处理集群分片中前left_num个数据分片中的数据数量为eachnum+1,其余map_num-left_num个分片中数据量为eachnum。
进一步地,所述的第四步的数据读取和实时处理的具体方法为:
1)对消息队列中每一个分片中进行处理,若分片中未处理的数据量小于newRate×tinterval÷s_partition,则直接读取该分片的所有剩余未处理数据,否则,该分片读取数据数量为newRate×tinterval÷s_partition。
2)消息队列的单个分片对应流式数据处理集群的多个分片,由于预分片已经实现了这种一对多的映射,因此流式数据处理集群在将数据读取到集群的工作节点之后,每一个流式数据处理集群的分片生成一个任务,并且在工作节点本地执行,执行结束后将结果保存到下游数据库中。
进一步地,所述的消息队列为Kafka、Flume、Kinesis或者其他适用于流式数据处理的消息队列。
进一步地,所述的流式批处理计算框架为Spark、Flink或者其他适用于流式数据计算的框架。
本系统由消息队列,海量流式数据,流式数据计算框架,数据分区,数据预分片算法,自适应实时速率控制算法组成。其中消息队列用于对多个数据源的数据进行汇总收集,用于支持海量数据的实时汇总分发以及数据暂存。其上游可以是多个数据服务器,下游为数据实时计算框架。流式数据计算框架从上游数据队列接收数据,并按照一定的时间间隔将任务分成若干个小的批处理作业,从而实现准实时的数据处理。
系统实时接收数据进行处理,数据分区在消息队列的数据生产者端实现,方法以每一条数据的ID为依据对分区进行计算;数据预分片算法根据消息队列的分区数和流式数据处理集群的虚拟核心数量确定分片关系;自适应实时速率 控制算法由Scala实现,通过控制器实时跟踪当前计算集群任务处理状态,确定数据处理速率上限值。
本发明的有益成果:本发明通过将数据分区、预分片、自适应实时速率控制和流式数据处理框架结合,对海量数据进行实时处理。本发明有如下优点:1)低延迟:通过对数据预分片提升数据处理的并行度,每条数据直接由计算该条数据的节点进行读取,避免了计算集群先接收数据之后再进行重新分片造成的网络带宽消耗、磁盘读写消耗以及任务分发的延迟。2)高稳定性:根据计算集群实时的处理状态,动态调整流入计算集群的数据量,使得数据处理时间和批次间隔保持一致,从而保证计算集群任务队列中的任务能按时完成,避免突发数据量增加导致的队列阻塞。3)应用:大数据技术逐步深入到各个行业中,面对持续大量的数据流,实时数据处理系统需要快速响应处理。本发明适用于多种基于批次的流式数据处理系统,应用范围广泛。
附图说明
图1是本方法采用的系统架构图。
图2是本方法的整体处理流程图。
图3是本方法的数据分区示意图。
图4是流式批处理系统的数据处理流程。
图5(a)是重新分片的数据流向示意图。
图5(b)是预分片方法的数据流向示意图。
图6展示了批次队列的详细结构和不同阶段所执行的操作。
图7展示了自适应速率控制器的整体结构。
图8是repartition方式和预分片方式的处理延迟示意图。
图9是流式数据的生成速率。
图10是本方法的排队延迟图。
具体实施方式
以下结合附图和技术方案,进一步说明本发明的具体实施方式。
系统架构如图1所示。系统可以使用多种数据源,发送的字节数据流通过解析器进行解析,系统使用Kafka作为消息队列对数据进行汇总缓存。数据源中解析得到的数据通过Kafka的producer发送到Kafka集群。系统使用Spark Streaming对数据进行流式处理。Kafka集群作为Spark Streaming的上游数据源,Spark Streaming持续拉取数据进行计算。Zookeeper对当前处理数据的偏移量进行记录,数据库和下游Kafka集群用于输出结果的管理。
本方法的处理流程如图2所示。数据源持续产生大量的数据,首先解析数据并通过数据分区规则将数据汇总到Kafka消息队列集群中,提供给后续计算集群读取。读取数据时根据预分片算法得到的分片结果对数据进行读取。读取数据的数量由当前消息队列中拥有的数据量和数据处理速率上限共同决定。数据处理速率上限由基于PID的自适应实时速率控制算法计算,通过周期读取集群的当前状态和批次计算的信息来保证计算的准确性。在数据处理结束后将数据输出存储到下游数据库。
首先数据源持续大量的产生数据,Kafka消息队列接收数据后对数据进行解析,并按照给定的数据分区方法计算数据的分区,并提交到Kafka集群中指定的partition中,数据分区的过程如图3所示。数据分区之后,数据源中的数据缓存到Kafka集群的多个partition中,用于下游计算集群拉取处理。
接下来Spark Streaming从Kafka消息队列中拉取数据并将数据组织为批次提交到批次队列。图4为流式批处理系统的创建处理流程。批次生成器从Kafka消息队列接收数据,并按照一定的时间间隔将数据组织为批次,一个批次有多个分片,批次生成之后放在批次队列中。Streaming processor按先后顺序从批次队列中获得一个批次进行处理,之后将处理结果输出。
方法在将数据组织为批次并提交到批次队列时,提交的实际上为批次的信息,而数据在批次队列中之前的批次都处理完之后才进行读取并处理。批次中每一个分片的信息通过预分片的方式来进行计算。图5(a)为传统的数据接收架构,没有采用预分片的方式。使用Direct方式接收数据,Kafka的分片和Spark的分片数量是一一对应的。因此在数据接收之后为了增加并行性,需要重新分片。图5(b)是预分片方式的数据接收架构。Spark集群按照预分片规则对数据进行接收,一个Kafka分片中的数据被平均分配到了多个SparkStreaming的分片中。
流式批处理系统由于是一种准实时的数据处理系统,数据不会在提交之后立刻被执行,而是一小段时间内的多条数据组成一个批次,按照批次对数据进行处理。因此数据处理的过程分为三个阶段,分别为批次提交、批次开始处理、批次处理完成。图6解释了在批次处理的不同阶段,分别需要进行的操作。以batch1到batch3的提交为例进行分析。首先批次按照固定的时间间隔进行提交,因此首先执行第一步:batch2提交时根据上一批次的执行情况计算速率上限,但是batch2在提交之后并未立刻开始执行,而是等到batch1完成之后,才开始执行第二步:batch1完成,接收并处理批次2。在第一步开始经过了batch interval之后,执行第三步:batch3提交时根据上一批次的执行情况计算速率上限。从batch2提交到batch3提交经过的时间就是batch interval。之后当batch2完成时,batch3开始接收并处理。
在每次批次提交时,该批次的数据处理速率上限已经由速率控制模块计算确定。图7解释了自适应速率控制模块的设计结构。速率控制器仍然基于Spark Streaming设计实现。Spark的Job生成器从数据源接收数据,生成Spark Streaming需要处理的Job。Job生成器在生成Job时获取速率控制器计算的速率上限,并将Job发送给Job处理器。Job处理器按顺序处理Job,并且将batch的信息发送给速率控制器。速率控制器使用批次的统计信息,利用自适应速率控制算法计算数据处理速率上限,并将信息反馈给Spark的Job生成器。用于控制下一批的数据数量。在执行期间,速率控制器一直监听Job的处理情况,在batch 提交时、batch开始时、batch完成时分别获取控制器需要的不同阶段的batch统计数据。
对于本发明对性能的提升,该部分说明预分片方法和重新分片方法处理相同数量数据所需的时间对比。图8展示了预分片方式和重新分片repartition方式的处理延迟。集群限定每个partition每秒读取数据量上限为40000条数据,提交batch的时间间隔限定为4秒,不进行速率反馈控制使得每一批接收的数据量始终保持最大值。限定数据locality优先级改变的时间间隔为100毫秒。采用原始的Spark Streaming数据接收方法,每个批次执行的时间平均为7秒,其中数据接收的时间约为3秒,数据处理的时间约为4秒。预分片的方法接收并处理数据,每个批次执行的时间平均为5秒,包括数据接收和数据处理的时间。
图9表示了数据源生成模拟数据的速率。数据源生成数据的速率以10秒为周期,每个周期前半部分生成60万条数据。这个数据量超过了Spark Streaming的平均处理速率,用于模拟数据量突然增加的情形。
图10用于评估本方法对性能的提升。Spark Streaming计算的批次间隔为1秒,每一条数据计算的时间复杂度为线性时间复杂度。对于原始的控制算法和自适应实时速率控制算法进行对比,对比主要为排队延迟scheduling delay,表示每个batch在队列中等待前一个batch完成处理所等待的时间;
sdelay=t_batchst-submit_time
其中sdelay表示scheduling delay,t_batchst表示批次开始时间,
submit_time表示批次提交时间。
Scheduling delay由平均106.18毫秒降低到62.89毫秒。
Claims (10)
1.一种流式数据处理自适应速率控制方法,其特征在于,包括如下步骤:
第一步,数据接收和分区缓存
流式数据处理系统接收的数据,将一条完整的数据视为一行,或者使用无歧义的特殊分隔符对数据进行分割;使用消息队列作为数据源对数据进行汇总,并对数据按照分区规则将数据保存到消息队列中的某个分区中;
第二步,数据预分片
从消息队列中读取数据前,将消息队列中单个数据分片映射到多个流式数据处理集群的分片中,映射的数量根据集群虚拟核心数量进行设置;
第三步,处理速率实时反馈控制
从消息队列中读取数据,并根据当前的数据处理速率上限确定最多可以从消息队列中读取的数据数量,避免读取的数据数量超过计算集群的最大处理能力;实时速率控制器的处理速率上限计算方法如下:
3.1)通过慢启动的方式开始进行调整,初始的数据处理速率上限设置为消息队列的每个分片每秒获读取n条数据,50<n<1000;
3.2)第一批完成后,对以后每一批按照以下的步骤对数据处理速率上限进行计算;
3.2.1)在批次开始时,提交当前批次的开始时间t_batchst给速率控制器;
3.2.2)在批次完成时,提交当前批次的处理结束时间t_batched,处理该批次用时t_proclast,该批次在批次队列中的等待时间t_waitlast,该批次处理数据的数量elemnumlast;
3.2.3)在当前批次提交时,对当前批次的数据处理速率上限进行计算,分为以下三种情况:第一种情况,在当前批次提交时,上一批次执行完成,且上一批次数据的处理时间与流式数据批处理集群的批次间隔t_interval相差大于松弛参数prelx;第二种情况,当前批次提交时,上一批次执行完成,且上一批次数据的处理时间位于t_interval-prelx和t_interval之间;prelx=min(50,t_interval×0.05);第三种情况,当前批次提交时,上一批次尚未完成;
第一种情况和第三种情况都基于PID控制算法对数据处理速率上限计算:
newRate=latestRate-Kp×error-Ki×historicalError-Kd×dError (1)
其中,latestRate为最新处理完成批次的数据处理速率上限;Kp为比例系数,取值为1;error为数据处理速率的估计误差;Ki为积分系数,取值为0.2;historicalError为数据处理速率的累积误差;Kd为微分系数,为了减小噪声数据对系统的影响,取值为0;dError为偏差速率变化率;
数据处理速率的估计误差error为:
其中,elemnumlast为最新处理完成的批次处理数据的数量;t_proclast为最新处理完成的批次处理的时间;Kblock为阻塞系数,阻塞系数取值0.3;blockTime为估计的处理时间增加值;当为第一种情况时,blockTime取值为0,此时由公式(2)计算得到的结果为数据处理速率的估计误差;当为第三种情况时,blockTime计算如公式(3)所示:
blockTime=max(t_interval-(submit_time-t_batchst),brelx) (3)
其中,t_interval为批次提交的间隔;submit_time为任务的提交时间;在批次间隔大于1000ms时,brelx=50ms,当批次间隔小于1000ms时,brelx=t_interval×0.05;
数据处理速率的累积误差historicalError的计算如公式(4)所示:
其中,t_waitlast为最新处理完成的批次在批次队列中等待的时间;当为第一种情况时,blockTime取值为0;当为第三种情况时,blockTime计算如公式(3)所示;processingRate表示最新处理完成批次的数据处理速率,其计算如公式(5)所示:
偏差速率变化率dError的计算如公式(6)所示:
其中,latestError表示前一个处理完成批次的速率估计误差,delaySinceUpdate定义为前一个处理完成批次和最近完成批次之间经过的时间,其计算方式如公式(7)所示:
delaySinceUpdate=lastProcessingEndTime-latestTime (7)
第二种情况,使用最新处理完成批次的数据处理速率上限latestRate作为当前批次的数据处理速率上限newRate;
第四步,数据的读取和实时处理;流式数据批处理集群按照第三步计算的数据处理速率上限和第二步预分片规则对数据进行读取;在本批次数据处理完成之后,将结果实时输出到数据库中。
2.根据权利要求1所述的一种流式数据处理自适应速率控制方法,其特征在于,所述的第二步的数据预分片的具体方法为:
1)流式数据处理集群以批次的时间间隔为周期,获取消息队列的分片信息;对于每一个批次,计算集群都需要获取消息队列中的n个数据分片,则消息队列中数据分片信息表示为s_partition=(s_partitioni|i=1...n);对于当前批次,消息队列每一个分片s_partitioni的信息包括:分片所属的主题topic、消息队列分片的唯一ID、当前批次需要获取的数据在消息队列指定分片中的起始位置start_offset、当前批次需要获取的数据在消息队列指定分片中的终止位置end_offset;
2)流式数据处理集群将批次信息提交到批次消息队列中;
3)根据当前批次的消息队列分片信息计算流式数据处理集群的分片对应消息队列中哪一个分片的哪一部分数据;
3.1)计算消息队列中分片的数量source_num和流式数据处理集群中空闲虚拟核心的数量core_num的最小公倍数为spark_num,并由此得到每一个消息队列分片需要映射到的流式数据批处理集群的分片数量为map_num=spark_num/source_num;
3.2)计算消息队列和流式数据处理集群分片的映射关系;对消息队列中当前批次的每一个分片的信息s_partition=(s_partitioni|i=1...n)进行处理;获取当前分片s_partitioni中数据的数量elem_num=end_offset-start_offset+1,将当前批次消息队列一个分片中的数据平均分配到map_num个流式数据处理集群的分片中,每一个流式数据处理集群分片中的数据量为each_num=elem_num/map_num;若当前批次数据源分片中的数据无法被map_num整除,则先计算多余出来的数据的条数为left_num=elem_num%map_num,在每一个消息队列分片对应的map_num个流式数据处理集群分片中前left_num个数据分片中的数据数量为eachnum+1,其余map_num-left_num个分片中数据量为eachnum。
3.根据权利要求1或2所述的一种流式数据处理自适应速率控制方法,其特征在于,所述的第四步的数据读取和实时处理的具体方法为:
1)对消息队列中每一个分片进行处理,若分片中未处理的数据量小于newRate×t_interval÷s_partition,则直接读取该分片的所有剩余未处理数据,否则,该分片读取数据数量为newRate×t_interval÷s_partition;
2)消息队列的单个分片对应流式数据处理集群的多个分片,流式数据处理集群在将数据读取到集群的工作节点之后,每一个流式数据处理集群的分片生成一个任务,并且在工作节点本地执行,执行结束后将结果保存到下游数据库中。
4.根据权利要求1或2所述的一种流式数据处理自适应速率控制方法,其特征在于,所述的第一步的数据接收和分区缓存具体方法为:
消息队列从数据源中接收数据;在接收到数据后,按照以下方法将数据发送到某个消息队列的分区进行计算:
partNum=MD5(key)mod numPartition
其中,key表示数据的ID,若数据没有ID,则以随机数来替代,MD5(key)表示数据key的MD5值,numPartition表示消息队列分区的数量;消息队列将数据按照partNum指示的ID保存在消息队列指定的分区中,等待对数据进行读取。
5.根据权利要求3所述的一种流式数据处理自适应速率控制方法,其特征在于,所述的第一步的数据接收和分区缓存具体方法为:
消息队列从数据源中接收数据;在接收到数据后,按照以下方法将数据发送到某个消息队列的分区进行计算:
partNum=MD5(key)mod numPartition
其中,key表示数据的ID,若数据没有ID,则以随机数来替代,MD5(key)表示数据key的MD5值,numPartition表示消息队列分区的数量;消息队列将数据按照partNum指示的ID保存在消息队列指定的分区中,等待对数据进行读取。
9.根据权利要求1或2或5或7或8所述的一种流式数据处理自适应速率控制方法,其特征在于,所述的消息队列为Kafka、Flume或者Kinesis。
10.根据权利要求1所述的一种流式数据处理自适应速率控制方法,其特征在于,流式处理计算框架为Spark或者Flink。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710011464.6A CN106648904B (zh) | 2017-01-09 | 2017-01-09 | 一种流式数据处理自适应速率控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710011464.6A CN106648904B (zh) | 2017-01-09 | 2017-01-09 | 一种流式数据处理自适应速率控制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106648904A CN106648904A (zh) | 2017-05-10 |
CN106648904B true CN106648904B (zh) | 2020-06-12 |
Family
ID=58843822
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710011464.6A Expired - Fee Related CN106648904B (zh) | 2017-01-09 | 2017-01-09 | 一种流式数据处理自适应速率控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106648904B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107748800A (zh) * | 2017-11-15 | 2018-03-02 | 北京易讯通信息技术股份有限公司 | 一种分布式实时数据处理政务服务数据的融合与共享方法 |
CN108289125B (zh) * | 2018-01-26 | 2021-05-28 | 华南理工大学 | 基于流式处理的tcp会话重组与统计数据提取方法 |
CN110555038A (zh) * | 2018-03-28 | 2019-12-10 | 阿里巴巴集团控股有限公司 | 一种数据处理系统、方法及装置 |
CN110825533B (zh) * | 2018-08-10 | 2022-12-20 | 网宿科技股份有限公司 | 一种数据发射方法及装置 |
CN110859012B (zh) * | 2018-08-25 | 2023-07-18 | 华为技术有限公司 | 一种速率控制的方法、装置和系统 |
CN109254982B (zh) * | 2018-08-31 | 2020-09-29 | 杭州安恒信息技术股份有限公司 | 一种流数据处理方法、系统、装置及计算机可读存储介质 |
CN109361629B (zh) * | 2018-10-26 | 2020-11-03 | 江苏大学 | 一种基于Kafka大消息可靠传输方法 |
CN111163118B (zh) * | 2018-11-07 | 2023-04-07 | 株式会社日立制作所 | 一种Kafka集群中的消息传输方法及装置 |
CN110704206B (zh) * | 2019-09-09 | 2022-09-27 | 上海斑马来拉物流科技有限公司 | 一种实时计算方法、计算机存储介质及电子设备 |
CN110618860A (zh) * | 2019-09-09 | 2019-12-27 | 中盈优创资讯科技有限公司 | 基于Spark的Kafka消费并发处理方法及装置 |
CN111092931B (zh) * | 2019-11-15 | 2021-08-06 | 中国科学院计算技术研究所 | 电力系统在线超实时仿真的流式数据快速分发方法及系统 |
CN111049807B (zh) * | 2019-11-25 | 2022-03-11 | 杭州安恒信息技术股份有限公司 | 旁路报文限速方法和系统 |
CN111538459B (zh) * | 2020-04-16 | 2023-07-21 | 北京奇艺世纪科技有限公司 | 数据倾斜的确定方法、装置、电子设备及可读存储介质 |
CN111209310B (zh) * | 2020-04-23 | 2020-07-31 | 太平金融科技服务(上海)有限公司 | 基于流计算的业务数据处理方法、装置和计算机设备 |
CN111600774B (zh) * | 2020-05-13 | 2021-11-12 | 北京奇艺世纪科技有限公司 | 消费延迟确定方法、系统、装置、设备及可读存储介质 |
US11640402B2 (en) | 2020-07-22 | 2023-05-02 | International Business Machines Corporation | Load balancing in streams parallel regions |
CN111884883A (zh) * | 2020-07-29 | 2020-11-03 | 北京宏达隆和科技有限公司 | 一种用于业务接口的快速审计处理方法 |
CN111782640B (zh) | 2020-09-04 | 2021-02-19 | 苏州浪潮智能科技有限公司 | 一种云平台的数据处理方法、系统、电子设备及存储介质 |
CN112181618A (zh) * | 2020-09-22 | 2021-01-05 | 北京金山云网络技术有限公司 | 数据传输方法、装置、计算机设备及存储介质 |
CN112202692A (zh) * | 2020-09-30 | 2021-01-08 | 北京百度网讯科技有限公司 | 数据分发方法、装置、设备以及存储介质 |
CN112231340B (zh) * | 2020-12-09 | 2021-03-23 | 金锐同创(北京)科技股份有限公司 | 数据展示方法、装置及电子设备 |
CN112667614A (zh) * | 2020-12-25 | 2021-04-16 | 大众问问(北京)信息科技有限公司 | 一种数据处理方法、装置及计算机设备 |
CN112364063B (zh) * | 2021-01-12 | 2021-06-04 | 北京智慧星光信息技术有限公司 | 流计算系统及其数据处理方法、电子设备及介质 |
CN113590708B (zh) * | 2021-06-17 | 2024-02-20 | 贝壳找房(北京)科技有限公司 | 自适应延迟消费方法、程序产品及存储介质 |
CN113535354A (zh) * | 2021-06-30 | 2021-10-22 | 深圳市云网万店电子商务有限公司 | 调整Flink SQL算子并行度的方法及装置 |
CN113434303A (zh) * | 2021-08-27 | 2021-09-24 | 湖北星地智链科技有限公司 | 批处理的遥感影像智能处理模型预测性能优化系统及方法 |
CN114356513B (zh) * | 2021-10-30 | 2024-09-17 | 杭州迪普科技股份有限公司 | 用于集群模式的任务处理方法及装置 |
CN116521963A (zh) * | 2023-07-04 | 2023-08-01 | 北京智麟科技有限公司 | 一种基于组件化的计算引擎数据处理方法及系统 |
CN116737349B (zh) * | 2023-08-16 | 2023-11-03 | 中国移动紫金(江苏)创新研究院有限公司 | 流式数据处理方法、系统及存储介质 |
CN118409884B (zh) * | 2024-06-27 | 2024-08-27 | 杭州海康威视数字技术股份有限公司 | 分布式数据传输方法、装置、系统、设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160262153A1 (en) * | 2013-03-08 | 2016-09-08 | Ray W. Sanders | Methods and systems for forming network connections |
CN105512297A (zh) * | 2015-12-10 | 2016-04-20 | 中国测绘科学研究院 | 一种基于分布式流式计算的空间数据处理方法与系统 |
CN105677489B (zh) * | 2016-03-04 | 2017-06-20 | 山东大学 | 离散流处理模型下批次间隔大小的动态设置系统及方法 |
-
2017
- 2017-01-09 CN CN201710011464.6A patent/CN106648904B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN106648904A (zh) | 2017-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648904B (zh) | 一种流式数据处理自适应速率控制方法 | |
Lohrmann et al. | Elastic stream processing with latency guarantees | |
CN106778033B (zh) | 一种基于Spark平台的Spark Streaming异常温度数据报警方法 | |
US9436513B2 (en) | Method of SOA performance tuning | |
US20070297327A1 (en) | Method for applying stochastic control optimization for messaging systems | |
CN110046048B (zh) | 一种基于工作量自适应快速重分配的负载均衡方法 | |
US20120297216A1 (en) | Dynamically selecting active polling or timed waits | |
CN105677489B (zh) | 离散流处理模型下批次间隔大小的动态设置系统及方法 | |
Liao et al. | An enforcement of real time scheduling in Spark Streaming | |
Zhang et al. | Adaptive block and batch sizing for batched stream processing system | |
KR101660860B1 (ko) | 분산 시스템에 기반한 스트리밍 방식으로 데이터 큐브를 생성하는 방법 및 장치 | |
CN103701635A (zh) | 一种在线配置Hadoop参数的方法和装置 | |
CN111142942A (zh) | 窗口数据的处理方法、装置、服务器及存储介质 | |
JP2016526719A (ja) | 時間調整を使用したストリームデータ処理方法 | |
Wu et al. | A reactive batching strategy of apache kafka for reliable stream processing in real-time | |
CN114428786A (zh) | 分布式流水线的数据处理方法、装置及存储介质 | |
CN111629216B (zh) | 边缘网络环境下基于随机森林算法的vod业务缓存替换方法 | |
CN117806929A (zh) | MySQL慢日志采集分析方法、系统、设备及存储介质 | |
WO2023077451A1 (zh) | 一种基于列存数据库的流式数据处理方法及系统 | |
Farhat et al. | Leaving stragglers at the window: Low-latency stream sampling with accuracy guarantees | |
CN115495202A (zh) | 一种异构集群下的大数据任务实时弹性调度方法 | |
WO2020189360A1 (ja) | パイプライン演算装置、プログラマブルロジックコントローラ、及び、パイプライン処理の実行方法 | |
Cheng et al. | Slice-Level Scheduling for High Throughput and Load Balanced LLM Serving | |
Chakravarthy et al. | Scheduling strategies and their evaluation in a data stream management system | |
CN118550920B (zh) | 一种基于时序数据计算点的计算方法与装置 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200612 Termination date: 20210109 |