CN110618860A - 基于Spark的Kafka消费并发处理方法及装置 - Google Patents

基于Spark的Kafka消费并发处理方法及装置 Download PDF

Info

Publication number
CN110618860A
CN110618860A CN201910857602.1A CN201910857602A CN110618860A CN 110618860 A CN110618860 A CN 110618860A CN 201910857602 A CN201910857602 A CN 201910857602A CN 110618860 A CN110618860 A CN 110618860A
Authority
CN
China
Prior art keywords
kafka
consumption
spark
topic partition
slice
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.)
Pending
Application number
CN201910857602.1A
Other languages
English (en)
Inventor
周朝卫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Unihub China Information Technology Co Ltd
Zhongying Youchuang Information Technology Co Ltd
Original Assignee
Unihub China Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Unihub China Information Technology Co Ltd filed Critical Unihub China Information Technology Co Ltd
Priority to CN201910857602.1A priority Critical patent/CN110618860A/zh
Publication of CN110618860A publication Critical patent/CN110618860A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种基于Spark的Kafka消费并发处理方法及装置,该方法包括:对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;并行执行每个Topic分区的多个切片对应的多个Spark任务。本发明可以实现并发消费Kafka数据,效率高。

Description

基于Spark的Kafka消费并发处理方法及装置
技术领域
本发明涉及互联网领域,尤其涉及一种基于Spark的Kafka消费并发处理方法及装置。
背景技术
在现有的Kafka消费模型中,一个Kafka的Topic分区只能有一个消费者,图1为现有技术Kafka消费示意图,如图1所示,Kafka的某一Topic有4个分区(或称为4个Topic分区),如果给Spark分配了5个CPU Core(分别为core1、core2、core3、core4和core5),而Spark将启动与Kafka的Topic分区数相同的任务数,即最多同时执行4个Spark任务(task),每个CPU Core对应一个spark的task,则会剩余一个CPU Core不会消费任何数据。因此,现有的Kafka消费模型存在以下几个问题:第一,Spark的最大任务数与Kafka的Topic分区数相同,Kafka的每个Topic分区只能对应一个Spark任务,一个Topic分区的数据不能并发消费,剩余的Spark资源(CPU Core)不会消费Kafka数据,也不会释放,因此,消费Kafka数据的效率低且资源浪费;第二,增加Kafka分区数可以提高消费Kafka数据的并发度,但是增加分区数的操作非常困难,且不能无限增加,过多的Kafka分区会影响Kafka的容错能力,从异常中恢复的时间也会明显增加,同样效率不高。
发明内容
本发明实施例提出一种基于Spark的Kafka消费并发处理方法,用以实现并发消费Kafka数据,效率高,该方法包括:
对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;
确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;
并行执行每个Topic分区的多个切片对应的多个Spark任务。
本发明实施例提出一种基于Spark的Kafka消费并发处理装置,用以实现并发消费Kafka数据,效率高,该装置包括:
切片模块,用于对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;
任务映射模块,用于确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;
执行模块,用于并行执行每个Topic分区的多个切片对应的多个Spark任务。
本发明实施例还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述基于Spark的Kafka消费并发处理方法。
本发明实施例还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述基于Spark的Kafka消费并发处理方法的计算机程序。
在本发明实施例中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;并行执行每个Topic分区的多个切片对应的多个Spark任务。在上述过程中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片,因此可以并行执行每个Topic分区的多个切片对应的多个Spark任务,即每个Topic分区的数据可以并发消费,从而提高了消费Kafka数据的并发度,即提高了消费Kafka数据的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为现有技术Kafka消费示意图;
图2为本发明实施例中基于Spark的Kafka消费并发处理方法的流程图;
图3为本发明实施例中对Kafka的每个Topic分区进行切片的示意图;
图4为本发明实施例提出的基于Spark的Kafka消费并发处理方法的详细流程图;
图5为本发明实施例中基于Spark的Kafka消费并发处理装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
在本说明书的描述中,所使用的“包含”、“包括”、“具有”、“含有”等,均为开放性的用语,即意指包含但不限于。参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”等的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本申请的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
图2为本发明实施例中基于Spark的Kafka消费并发处理方法的流程图,如图2所示,该方法包括:
步骤201,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;
步骤202,确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;
步骤203,并行执行每个Topic分区的多个切片对应的多个Spark任务。
在本发明实施例中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;并行执行每个Topic分区的多个切片对应的多个Spark任务。在上述过程中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片,因此可以并行执行每个Topic分区的多个切片对应的多个Spark任务,即每个Topic分区的数据可以并发消费,从而提高了消费Kafka数据的并发度,即提高了消费Kafka数据的效率。
具体实施时,Spark是专为大规模数据处理而设计的快速通用的计算引擎,是一个通用引擎,可用它来完成各种各样的运算,包括SQL查询、文本处理、机器学习等,而在Spark出现之前,一般需要学习各种各样的引擎来分别处理这些需求。
Kafka是一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic,因此Kafka包括多个Topic分区,在现有技术中,每个Topic分区对应一个Spark任务,在步骤201中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片,图3为本发明实施例中对Kafka的每个Topic分区进行切片的示意图,可以看到每个Topic分区包括三个切片;在步骤202中,确定每个Topic分区的每个切片对应的Spark任务,如图3所示,即增加了每个Topic分区对应的Spark任务数,在步骤203中,并行执行每个Topic分区的多个切片对应的多个Spark任务,即使得一个Kafka的Topic分区可同时被多个消费者并行消费,从而提高了消费Kafka数据的并发度,即提高了消费Kafka数据的效率。
具体实施时,对Kafka的每个Topic分区进行切片的方法有多种,下面给出其中一个实施例。
在一实施例中,对Kafka的每个Topic分区进行切片,包括:
确定每个Topic分区的Kafka待消费数据范围,所述Kafka待消费数据范围包括消费偏移量范围和/或时间戳范围;
根据每个Topic分区的Kafka待消费数据范围,对Kafka的每个Topic分区进行切片。
在上述实施例中,Kafka待消费数据范围包括消费偏移量范围和/或时间戳范围,即可以根据消费偏移量范围,对Kafka的每个Topic分区进行切片;也可以根据时间戳范围,对Kafka的每个Topic分区进行切片;还可以联合使用消费偏移量范围和时间戳范围,对Kafka的每个Topic分区进行切片。其中,消费偏移量范围即Offset范围,是由start_offset(开始Offset)、end_offset(结束Offset)限制的Offset范围;时间戳范围是由start_timestamp(开始时间戳)、end_timestamp(结束时间戳)限制的范围。
具体实施时,根据每个Topic分区的Kafka待消费数据范围,对Kafka的每个Topic分区进行切片的方法有多种,下面给出其中一个实施例。
在一实施例中,根据每个Topic分区的Kafka待消费数据范围,对Kafka的每个Topic分区进行切片,包括:
确定每个Topic分区的Kafka待消费数据范围和并发度;
根据每个Topic分区的Kafka待消费数据范围和并发度,确定每个Topic分区的切片数;
根据每个Topic分区的Kafka待消费数据范围和切片数,确定每个Topic分区的每个切片的Kafka待消费数据范围;
根据每个Topic分区的每个切片的Kafka待消费数据范围,对每个Topic分区进行切片。
在上述实施例中,以Offset范围为例,即确定每个Topic分区的Offset范围和并发度;在初次数据消费时,Offset范围中的start_offset(开始Offset)可以是每个Topic分区的earliest(最早)或latest(最新)的数据位置。每次消费结束后,可将Kafka的end_offset(结束Offset)保存到外部存储,再次消费Kafka的待消费数据时,从外部存储读取上次消费的end_offset(结束Offset),作为本次消费的start_offset(开始Offset)。每个Topic分区的消费偏移量范围的确定方法有多种,下面给出其中一个实施例。
在一实施例中,基于Spark的Kafka消费并发处理方法还包括:
若Kafka待消费数据范围为消费偏移量范围,根据消费限速参数和Kafka生产端的最大消费偏移量,确定每个Topic分区的消费偏移量范围,所述消费限速参数用于确定每个Topic分区消费的最大记录数。
每个Topic分区的并发度可用concurrencyPerPartition表示,可以动态调整,下面给出一个进行动态调整的实施例。
在一实施例中,基于Spark的Kafka消费并发处理方法还包括:
根据Kafka的历史消费数据记录,确定每个Topic分区的并发度,所述Kafka的历史消费数据记录包括历史消费数据量、历史消费时长、历史资源利用率、历史并发度数据积压量中的其中一种或任意组合。
在上述实施例中,根据Kafka的历史消费数据记录,可采用回归算法,确定每个Topic分区的并发度。
在一实施例中,在根据每个Topic分区的Kafka待消费数据范围和并发度,确定每个Topic分区的切片数之前,还包括:
确定每个切片的最大消费记录数;
根据每个Topic分区的Kafka待消费数据范围,确定每个Topic分区的消费总记录数;
根据每个Topic分区的Kafka待消费数据范围和并发度,确定每个Topic分区的切片数,包括:
根据每个Topic分区的消费总记录数、并发度以及每个切片的最大消费记录数,确定每个Topic分区的切片数。
在上述实施例中,根据每个Topic分区的Kafka待消费数据范围,确定每个Topic分区的消费总记录数时,以Kafka待消费数据范围为Offset范围为例,每个Topic分区的消费总记录数total_records=start_offset-end_offset。
在一实施例中,采用如下公式,根据每个Topic分区的消费总记录数、并发度以及每个切片的最大消费记录数,确定每个Topic分区的切片数:
A=total_records/maxEventsPerSlice+1
slice_num=max(concurrencyPerPartition,A)
其中,slice_num为每个Topic分区的切片数;
concurrencyPerPartition为每个Topic分区的并发度;
total_records为每个Topic分区的消费总记录数;
maxEventsPerSlice为每个切片的最大消费记录数。
在一实施例中,根据每个Topic分区的Kafka待消费数据范围和切片数,确定每个Topic分区的每个切片的Kafka待消费数据范围,包括:
根据每个Topic分区的切片数和消费总记录数,确定每个切片的消费记录数;
根据每个Topic分区的Kafka待消费数据范围和切片数,以及每个切片的消费记录数,确定每个Topic分区的每个切片的Kafka待消费数据范围。
在一实施例中,采用如下公式,根据每个Topic分区的切片数和消费总记录数,确定每个切片的消费记录数:
sizePerSlice=total_records/slice_num+1
其中,sizePerSlice为每个切片的消费记录数;
total_records为每个Topic分区的消费总记录数;
slice_num为每个Topic分区的切片数。
经过上述实施例,获得了每个Topic分区的Kafka待消费数据范围和切片数,以及每个切片的消费记录数,之后即可确定每个Topic分区的每个切片的Kafka待消费数据范围,以Kafka待消费数据范围为Offset范围为例,每个Topic分区的每个切片的Offset范围如下:
第一个切片:[start_offset,start_offset+sizePerSlic×1);
第二个切片:[start_offset+sizePerSlice×1,start_offset+sizePerSlice×2);
第N个切片:[start_offset+sizePerSlice×(N-1),start_offset+sizePerSlice×N);
最后一个切片:[start_offset+sizePerSlice×(slice_num-1),min(start_offset+sizePerSlice×slice_num,end_offset))。
在上述实施例中,在Kafka待消费数据范围为时间戳范围时,可用于即席查询的场景。
在一实施例中,在确定每个Topic分区的每个切片对应的Spark任务之后,还包括:
将Kafka的待消费数据映射至Spark的表中。
在上述实施例中,当需要对Kafka的数据做关联、分析时,无需将Kafka的待消费数据先抽取到HDFS、Hbase等存储,可直接使用Spark的数据源接口,将Kafka的待消费数据映射至Spark的表,实现查询、过滤、与其它数据源关联等功能。
在一实施例中,并行执行每个Topic分区的多个切片对应的多个Spark任务,包括:
根据Spark的表,采用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务。
在上述实施例中,Spark任务包括关联、转换、过滤等操作,而经过将Kafka的待消费数据映射至Spark的表中,采用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务,可以使得无需将Kafka的待消费数据先抽取到HDFS、Hbase等存储,可直接使用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务,从而提高消费Kafka数据的效率。下面给出一个采用Spark SQL并行执行该Topic分区的多个切片对应的多个Spark任务的示例。
val df=spark.read.format("org.unios.kafka")//加载数据源;
option("kafka.bootstrap.servers","host1:port1,host2:port2")
option("subscribe","topic1,topic2")
option("startingOffsets","""{"topic1":{"0":23,"1":22},"topic2":{"0":13}}""")//指定offset范围中的start_offset;
option("endingOffsets","""{"topic1":{"0":50,"1":35},"topic2":{"0":41}}""")//指定offset范围中的end_offset;
option("concurrencyPerPartition","5")//指定每个Topic分区的并发度;
option("maxEventsPerSlice","100")//指定每个切片的最大消费记录数;
.load()
df.createOrReplaceTempView("kafka_table")//将Kafka的待消费映射为Spark的表,此表会根据上面的配置将每个切片映射为spark的一个任务,任务数越多,并发消费的能力越高;
spark.sql("sellect value from kafka_table")//采用Spark SQL进行选择操作。
上述给出了并行执行每个Topic分区的多个切片对应的多个Spark任务的一个实施例。还有其他并行执行每个Topic分区的多个切片对应的多个Spark任务的方法,下面给出另一个实施例。
在一实施例中,在确定每个Topic分区的每个切片对应的Spark任务之后,还包括:
确定能够并发执行的Spark任务数;
根据每个Topic分区的多个切片的数量,以及并发执行的Spark任务数,确定并发执行次数;
将一次执行的Kafka的待消费数据映射至Spark的一个表中;
根据Spark的表,采用Spark SQL多次并行执行每个Topic分区的多个切片对应的多个Spark任务。
在上述实施例中,例如,给Spark程序分配了5个Cpu Core,即任务资源池的大小为5,该资源池能够同时并发执行5个Spark任务,而所有Topic分区的切片的数量为10,采用Spark SQL最多可同时执行5个Spark任务,剩余的5个任务排队等待,当其中某个任务执行完成,将排队的任务取出一个调度到任务资源池,从而提高并行每个Topic分区的多个切片对应的多个Spark任务的灵活度,且每次执行的Kafka的待消费数据在一个表中,有利于Spark任务的高效率执行。
基于上述实施例,本发明提出如下一个实施例来说明基于Spark的Kafka消费并发处理方法的详细流程,图4为本发明实施例提出的基于Spark的Kafka消费并发处理方法的详细流程图,如图4所示,在一实施例中,基于Spark的Kafka消费并发处理方法的详细流程包括:
步骤401,确定每个Topic分区的Kafka待消费数据范围,所述Kafka待消费数据范围包括消费偏移量范围和/或时间戳范围;
步骤402,确定每个Topic分区的Kafka待消费数据范围和并发度;
步骤403,确定每个切片的最大消费记录数;
步骤404,根据每个Topic分区的Kafka待消费数据范围,确定每个Topic分区的消费总记录数;
步骤405,根据每个Topic分区的消费总记录数、并发度以及每个切片的最大消费记录数,确定每个Topic分区的切片数;
步骤406,根据每个Topic分区的切片数和消费总记录数,确定每个切片的消费记录数;
步骤407,根据每个Topic分区的Kafka待消费数据范围和切片数,以及每个切片的消费记录数,确定每个Topic分区的每个切片的Kafka待消费数据范围;
步骤408,根据每个Topic分区的每个切片的Kafka待消费数据范围,对每个Topic分区进行切片,获得每个Topic分区的多个切片;
步骤409,确定每个Topic分区的每个切片对应的Spark任务;
步骤410,将Kafka的待消费数据映射至Spark的表中;
步骤411,根据Spark的表,采用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务。
当然,可以理解的是,上述基于Spark的Kafka消费并发处理方法的详细流程还可以有其他变化例,相关变化例均应落入本发明的保护范围。
综上所述,在本发明实施例提出的方法中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的待消费数据;并行执行每个Topic分区的多个切片对应的多个Spark任务。在上述过程中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片,因此可以并行执行每个Topic分区的多个切片对应的多个Spark任务,即每个Topic分区的数据可以并发消费,从而提高了消费Kafka数据的并发度,即提高了消费Kafka数据的效率。另外,根据Spark的表,采用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务,可以使得无需将Kafka的待消费数据先抽取到HDFS、Hbase等存储,可直接使用Spark SQL并行执行Topic分区的多个切片对应的多个Spark任务,从而提高消费Kafka数据的效率。
基于同样的发明构思,本发明实施例还提供了一种基于Spark的Kafka消费并发处理装置,如下面的实施例所述。由于这些解决问题的原理与基于Spark的Kafka消费并发处理方法相似,因此装置的实施可以参见方法的实施,重复之处不在赘述。
图5为本发明实施例中基于Spark的Kafka消费并发处理装置的示意图,如图5所示,该装置包括:
切片模块501,用于对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;
任务映射模块502,用于确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;
执行模块503,用于并行执行每个Topic分区的多个切片对应的多个Spark任务。
在一实施例中,基于Spark的Kafka消费并发处理装置还包括数据映射模块,用于:将Kafka的待消费数据映射至Spark的表中;
执行模块503,具体用于:根据Spark的表,采用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务。
在一实施例中,切片模块501具体用于:
确定每个Topic分区的Kafka待消费数据范围,所述Kafka待消费数据范围包括消费偏移量范围和/或时间戳范围;
根据每个Topic分区的Kafka待消费数据范围,对Kafka的每个Topic分区进行切片。
确定每个Topic分区的Kafka待消费数据范围和并发度;
根据每个Topic分区的Kafka待消费数据范围和并发度,确定每个Topic分区的切片数;
根据每个Topic分区的Kafka待消费数据范围和切片数,确定每个Topic分区的每个切片的Kafka待消费数据范围;
根据每个Topic分区的每个切片的Kafka待消费数据范围,对每个Topic分区进行切片。
在一实施例中,切片模块501具体用于:
确定每个切片的最大消费记录数;
根据每个Topic分区的Kafka待消费数据范围,确定每个Topic分区的消费总记录数;
根据每个Topic分区的消费总记录数、并发度以及每个切片的最大消费记录数,确定每个Topic分区的切片数。
在一实施例中,切片模块501具体用于:
根据每个Topic分区的切片数和消费总记录数,确定每个切片的消费记录数;
根据每个Topic分区的Kafka待消费数据范围和切片数,以及每个切片的消费记录数,确定每个Topic分区的每个切片的Kafka待消费数据范围。
在一实施例中,基于Spark的Kafka消费并发处理装置还包括并发度确定模块,用于:
根据Kafka的历史消费数据记录,确定每个Topic分区的并发度,所述Kafka的历史消费数据记录包括历史消费数据量、历史消费时长、历史资源利用率、历史并发度数据积压量中的其中一种或任意组合。
在一实施例中,基于Spark的Kafka消费并发处理装置还包括消费偏移量范围确定模块,用于:
若Kafka待消费数据范围为消费偏移量范围,根据消费限速参数和Kafka生产端的最大消费偏移量,确定每个Topic分区的消费偏移量范围,所述消费限速参数用于确定每个Topic分区消费的最大记录数。
在一实施例中,采用如下公式,根据每个Topic分区的消费总记录数、并发度以及每个切片的最大消费记录数,确定每个Topic分区的切片数:
A=total_records/maxEventsPerSlice+1
slice_num=max(concurrencyPerPartition,A)
其中,slice_num为每个Topic分区的切片数;
concurrencyPerPartition为每个Topic分区的并发度;
total_records为每个Topic分区的消费总记录数;
maxEventsPerSlice为每个切片的最大消费记录数。
在一实施例中,采用如下公式,根据每个Topic分区的切片数和消费总记录数,确定每个切片的消费记录数:
sizePerSlice=total_records/slice_num+1
其中,sizePerSlice为每个切片的消费记录数;
total_records为每个Topic分区的消费总记录数;
slice_num为每个Topic分区的切片数。
综上所述,在本发明实施例提出的装置中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;并行执行每个Topic分区的多个切片对应的多个Spark任务。在上述过程中,对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片,因此可以并行执行每个Topic分区的多个切片对应的多个Spark任务,即每个Topic分区的数据可以并发消费,从而提高了消费Kafka数据的并发度,即提高了消费Kafka数据的效率。另外,根据Spark的表,采用Spark SQL并行执行,每个Topic分区的多个切片对应的多个Spark任务,可以使得无需将Kafka的待消费数据先抽取到HDFS、Hbase等存储,可直接使用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务,从而提高消费Kafka数据的效率。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (15)

1.一种基于Spark的Kafka消费并发处理方法,其特征在于,包括:
对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;
确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中数据;
并行执行每个Topic分区的多个切片对应的多个Spark任务。
2.如权利要求1所述的基于Spark的Kafka消费并发处理方法,其特征在于,对Kafka的每个Topic分区进行切片,包括:
确定每个Topic分区的Kafka待消费数据范围,所述Kafka待消费数据范围包括消费偏移量范围和/或时间戳范围;
根据每个Topic分区的Kafka待消费数据范围,对Kafka的每个Topic分区进行切片。
3.如权利要求2所述的基于Spark的Kafka消费并发处理方法,其特征在于,根据每个Topic分区的Kafka待消费数据范围,对Kafka的每个Topic分区进行切片,包括:
确定每个Topic分区的Kafka待消费数据范围和并发度;
根据每个Topic分区的Kafka待消费数据范围和并发度,确定每个Topic分区的切片数;
根据每个Topic分区的Kafka待消费数据范围和切片数,确定每个Topic分区的每个切片的Kafka待消费数据范围;
根据每个Topic分区的每个切片的Kafka待消费数据范围,对每个Topic分区进行切片。
4.如权利要求3所述的基于Spark的Kafka消费并发处理方法,其特征在于,在根据每个Topic分区的Kafka待消费数据范围和并发度,确定每个Topic分区的切片数之前,还包括:
确定每个切片的最大消费记录数;
根据每个Topic分区的Kafka待消费数据范围,确定每个Topic分区的消费总记录数;
根据每个Topic分区的Kafka待消费数据范围和并发度,确定每个Topic分区的切片数,包括:
根据每个Topic分区的消费总记录数、并发度以及每个切片的最大消费记录数,确定每个Topic分区的切片数。
5.如权利要求4所述的基于Spark的Kafka消费并发处理方法,其特征在于,根据每个Topic分区的Kafka待消费数据范围和切片数,确定每个Topic分区的每个切片的Kafka待消费数据范围,包括:
根据每个Topic分区的切片数和消费总记录数,确定每个切片的消费记录数;
根据每个Topic分区的Kafka待消费数据范围和切片数,以及每个切片的消费记录数,确定每个Topic分区的每个切片的Kafka待消费数据范围。
6.如权利要求3所述的基于Spark的Kafka消费并发处理方法,其特征在于,还包括:
根据Kafka的历史消费数据记录,确定每个Topic分区的并发度,所述Kafka的历史消费数据记录包括历史消费数据量、历史消费时长、历史资源利用率、历史并发度数据积压量中的其中一种或任意组合。
7.如权利要求3所述的基于Spark的Kafka消费并发处理方法,其特征在于,还包括:
若Kafka待消费数据范围为消费偏移量范围,根据消费限速参数和Kafka生产端的最大消费偏移量,确定每个Topic分区的消费偏移量范围,所述消费限速参数用于确定每个Topic分区消费的最大记录数。
8.如权利要求1所述的基于Spark的Kafka消费并发处理方法,其特征在于,在确定每个Topic分区的每个切片对应的Spark任务之后,还包括:
将Kafka的待消费数据映射至Spark的表中。
9.如权利要求8所述的基于Spark的Kafka消费并发处理方法,其特征在于,并行执行每个Topic分区的多个切片对应的多个Spark任务,包括:
根据Spark的表,采用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务。
10.如权利要求4所述的基于Spark的Kafka消费并发处理方法,其特征在于,采用如下公式,根据每个Topic分区的消费总记录数、并发度以及每个切片的最大消费记录数,确定每个Topic分区的切片数:
A=total_records/maxEventsPerSlice+1
slice_num=max(concurrencyPerPartition,A)
其中,slice_num为每个Topic分区的切片数;
concurrencyPerPartition为每个Topic分区的并发度;
total_records为每个Topic分区的消费总记录数;
maxEventsPerSlice为每个切片的最大消费记录数。
11.如权利要求5所述的基于Spark的Kafka消费并发处理方法,其特征在于,采用如下公式,根据每个Topic分区的切片数和消费总记录数,确定每个切片的消费记录数:
sizePerSlice=total_records/slice_num+1
其中,sizePerSlice为每个切片的消费记录数;
total_records为每个Topic分区的消费总记录数;
slice_num为每个Topic分区的切片数。
12.一种基于Spark的Kafka消费并发处理装置,其特征在于,包括:
切片模块,用于对Kafka的每个Topic分区进行切片,获得每个Topic分区的多个切片;
任务映射模块,用于确定每个Topic分区的每个切片对应的Spark任务,其中,每个切片对应的Spark任务用于消费该切片中的数据;
执行模块,用于并行执行每个Topic分区的多个切片对应的多个Spark任务。
13.如权利要求12所述的基于Spark的Kafka消费并发处理装置,其特征在于,还包括数据映射模块,用于:
将Kafka的待消费数据映射至Spark的表中;
执行模块,具体用于:根据Spark的表,采用Spark SQL并行执行每个Topic分区的多个切片对应的多个Spark任务。
14.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11任一项所述方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至11任一项所述方法的计算机程序。
CN201910857602.1A 2019-09-09 2019-09-09 基于Spark的Kafka消费并发处理方法及装置 Pending CN110618860A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910857602.1A CN110618860A (zh) 2019-09-09 2019-09-09 基于Spark的Kafka消费并发处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910857602.1A CN110618860A (zh) 2019-09-09 2019-09-09 基于Spark的Kafka消费并发处理方法及装置

Publications (1)

Publication Number Publication Date
CN110618860A true CN110618860A (zh) 2019-12-27

Family

ID=68922798

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910857602.1A Pending CN110618860A (zh) 2019-09-09 2019-09-09 基于Spark的Kafka消费并发处理方法及装置

Country Status (1)

Country Link
CN (1) CN110618860A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111880922A (zh) * 2020-08-07 2020-11-03 北京达佳互联信息技术有限公司 并发任务的处理方法、装置及设备
CN112269765A (zh) * 2020-11-13 2021-01-26 中盈优创资讯科技有限公司 提升Spark结构化流文件数据源读取性能方法及装置
CN112800073A (zh) * 2021-01-27 2021-05-14 浪潮云信息技术股份公司 一种基于NiFi更新Delta Lake的方法
CN114401269A (zh) * 2021-12-08 2022-04-26 国电南瑞科技股份有限公司 一种业务数据分发方法、系统及物联管理平台
CN115150471A (zh) * 2022-06-27 2022-10-04 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648904A (zh) * 2017-01-09 2017-05-10 大连理工大学 一种流式数据处理自适应速率控制方法
US20170242887A1 (en) * 2016-02-24 2017-08-24 Salesforce.Com, Inc. Efficient access scheduling for super scaled stream processing systems
CN107885779A (zh) * 2017-10-12 2018-04-06 北京人大金仓信息技术股份有限公司 一种Spark并行访问MPP数据库的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170242887A1 (en) * 2016-02-24 2017-08-24 Salesforce.Com, Inc. Efficient access scheduling for super scaled stream processing systems
CN106648904A (zh) * 2017-01-09 2017-05-10 大连理工大学 一种流式数据处理自适应速率控制方法
CN107885779A (zh) * 2017-10-12 2018-04-06 北京人大金仓信息技术股份有限公司 一种Spark并行访问MPP数据库的方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
JOOHYUN KYONG: "Improving scalability of apache spark-based scale-up server through docker container-based partitioning", 《PROCEEDINGS OF THE 6TH INTERNATIONAL CONFERENCE ON SOFTWARE AND COMPUTER APPLICATIONS》 *
李晓东: "大规模LTE信令数据处理系统研究", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 *
袁景凌: "《Spark案例与实验教程》", 30 April 2017 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111880922A (zh) * 2020-08-07 2020-11-03 北京达佳互联信息技术有限公司 并发任务的处理方法、装置及设备
CN112269765A (zh) * 2020-11-13 2021-01-26 中盈优创资讯科技有限公司 提升Spark结构化流文件数据源读取性能方法及装置
CN112800073A (zh) * 2021-01-27 2021-05-14 浪潮云信息技术股份公司 一种基于NiFi更新Delta Lake的方法
CN114401269A (zh) * 2021-12-08 2022-04-26 国电南瑞科技股份有限公司 一种业务数据分发方法、系统及物联管理平台
CN115150471A (zh) * 2022-06-27 2022-10-04 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品
CN115150471B (zh) * 2022-06-27 2024-03-29 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品

Similar Documents

Publication Publication Date Title
CN110618860A (zh) 基于Spark的Kafka消费并发处理方法及装置
CN111339041B (zh) 文件解析入库、文件生成方法及装置
CN104166589A (zh) 一种心跳包的处理方法和装置
CN112182043B (zh) 日志数据查询方法、装置、设备及存储介质
CN112000703B (zh) 数据入库处理方法、装置、计算机设备和存储介质
CN110851234A (zh) 基于docker容器的日志处理方法及装置
CN106126731B (zh) 一种获取Elasticsearch分页数据的方法及装置
CN110807145A (zh) 查询引擎获取方法、设备和计算机可读存储介质
CN111143039A (zh) 一种虚拟机的调度方法、装置及计算机存储介质
US20240338366A1 (en) Dynamic database pipeline scheduler
CN117633116A (zh) 数据同步方法、装置、电子设备及存储介质
Dai et al. Research and implementation of big data preprocessing system based on Hadoop
CN108319604B (zh) 一种hive中大小表关联的优化方法
US9087140B2 (en) Self-parsing XML documents to improve XML processing
JP5692355B2 (ja) コンピュータシステム、制御システム、制御方法および制御プログラム
KR20170130178A (ko) 분산 환경 기반 빅데이터 실시간 분석을 위한 인-메모리 db 연결 지원형 스케줄링 방법 및 시스템
CN110750362A (zh) 生物信息的分析方法、装置和存储介质
Wang et al. Optimizing the cloud platform performance for supporting large-scale cognitive radio networks
CN115221116A (zh) 一种数据写入方法、装置、设备及可读存储介质
WO2017050177A1 (zh) 一种数据同步方法和装置
Suresh et al. Delay scheduling based replication scheme for hadoop distributed file system
CN111813512A (zh) 一种基于动态分区的高能效Spark任务调度方法
CN113886036B (zh) 用于优化分布式系统集群配置的方法和系统
CN113297002B (zh) 数据库工作模式的切换方法和装置
TWI731926B (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20191227