基于Spark Streaming读取Kafka数据的处理方法技术

技术编号:15542360 阅读:890 留言:0更新日期:2017-06-05 11:20
本发明专利技术公开了一种基于Spark Streaming读取Kafka数据的处理方法,包括如下步骤:S1)利用Kafka将数据存储在话题中;S2)利用Spark Streaming把实时输入数据流以时间片为单位切分成块;S3)预先根据Kafka数据失败记录数,设置SparkStreaming补数调度时间;S4)实时监控SparkStreaming读取Kafka数据过程;S5)通过SparkStreaming重新读取Kafka数据。本发明专利技术根据Kafka数据失败记录数设置SparkStreaming补数调度时间,实时监控读取过程并重新读取失败记录数进行补数,更加灵活、便捷地做到零丢数保证。

Processing method of reading Kafka data based on Spark Streaming

The invention discloses a processing method based on Spark Streaming read Kafka data, which comprises the following steps: S1) using Kafka data stored in the topic; S2) using Spark Streaming real-time input data stream to time unit divided into blocks; S3) according to the Kafka data pre failure record number, set SparkStreaming complement scheduling time; S4) real-time monitoring SparkStreaming Kafka data read process; S5) through the SparkStreaming to read Kafka data. According to the data failure record number of the Kafka data, the invention sets up the SparkStreaming complement scheduling time, monitors the reading process in real time and re reads the number of failed records to supplement the number, thereby ensuring more flexible and convenient zero loss guarantee.

【技术实现步骤摘要】
基于SparkStreaming读取Kafka数据的处理方法
本专利技术涉及一种Kafka数据处理方法,尤其涉及一种基于SparkStreaming读取Kafka数据的处理方法。
技术介绍
SparkStreaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark,也就是把SparkStreaming的输入数据按照batchsize(如1秒)分成一段一段的数据(DiscretizedStream),每一段数据都转换成Spark中的RDD(ResilientDistributedDataset),然后将SparkStreaming中对DStream的Transformation操作变为针对Spark中对RDD的Transformation操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠加,或者存储到外部设备。图1显示了SparkStreaming的整个流程。Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据,如图2所示。众所周知,大数据时代对数据处理的实时性、稳定性、准确性要求越来越高;现在兴起的组合架构有SparkStreaming对接Kafka,借助SparkStreaming基于内存迭代计算优势和Kafka高并发数据分发能力,进而达到数据处理的实时性;但SparkStreaming对接kafka过程中,仍然难免会出现潜在的数据丢失场景,具体过程如下:1、两个Exectuor已经从接收器中接收到输入数据,并将它缓存到Exectuor的内存中;2、接收器通知输入源数据已经接收;3、Exectuor根据应用程序的代码开始处理已经缓存的数据;4、这时候Driver突然挂掉了;5、从设计的角度看,一旦Driver挂掉之后,它维护的Exectuor也将全部被kill;6、既然所有的Exectuor被kill了,所以缓存到它们内存中的数据也将被丢失。结果,这些已经通知数据源但是还没有处理的缓存数据就丢失了;7、缓存的时候不可能恢复,因为它们是缓存在Exectuor的内存中,所以数据被丢失了。由上可见,急需一种防止零丢数的方法来保证SparkStreaming对接Kafka数据处理稳定性。
技术实现思路
本专利技术所要解决的技术问题是提供一种基于SparkStreaming读取Kafka数据的处理方法,能够有效防止数据丢失,在失败恢复之后从Kafka中重新消费数据,从而在SparkStreaming程序异常情况下,更加灵活、便捷地做到零丢数保证。本专利技术为解决上述技术问题而采用的技术方案是提供一种基于SparkStreaming读取Kafka数据的处理方法,包括如下步骤:S1)利用Kafka将数据存储在话题中,每个话题均包含若干可配置数量的分区;S2)利用SparkStreaming把实时输入数据流以时间片为单位切分成块,每个块均生成一个SparkJob处理;S3)预先根据Kafka数据失败记录数,设置SparkStreaming补数调度时间;S4)实时监控SparkStreaming读取Kafka数据的处理过程;S5)根据Kafka数据失败记录数和调度时间,通过SparkStreaming重新读取失败丢失的Kafka数据。上述的基于SparkStreaming读取Kafka数据的处理方法,其中,所述步骤S3)使用关系型数据库创建两张数据库表,分别为调度表和失败记录数表,所述调度表中存放调度编号id,开始时间,结束时间,状态和创建时间信息,所述失败数记录表中存放失败记录id,偏移量,Kafka话题,Kafka节点列表信息,所述调度表中的调度编号id和失败数记录表的失败记录id为主外键关系。上述的基于SparkStreaming读取Kafka数据的处理方法,其中,所述步骤S4)包括:在SparkStreaming读取Kafka数据过程中,如果对应的Kafka话题数据不为空,则获取到正在从Kafka读取到数据的偏移量,并将该数据偏移量、Kafka话题以及Kafka节点列表信息入库到关系型数据库失败数记录表中,如果数据处理异常,则修改数据表中的状态为失败。上述的基于SparkStreaming读取Kafka数据的处理方法,其中,所述步骤S4)中SparkStreaming通过Direct方式直接连接到Kafka节点上,并通过createDirectStream方法获取到正在从Kafka读取到数据的偏移量,同时将调度表中的状态标识为正在进行中;当SparkStreaming对接Kafka读取处理数据过程中,出现异常造成程序不能正常执行,则修改调度表中的状态为失败。上述的基于SparkStreaming读取Kafka数据的处理方法,其中,所述步骤S5)包括:首先根据调度表状态字段作为查询条件,扫描调度表,根据创建时间字段作为排序降序,得到最早的调度记录,然后获得调度编号id,以该字段作为查询失败数记录表条件,获得所有Kafka失败记录数,再根据Kafka话题和偏移量重新读取Kafka数据。上述的基于SparkStreaming读取Kafka数据的处理方法,其中,所述步骤S4)先读取关系数据库中调度表和失败数记录表缓存到内存中,再通过线程定时更新缓存中的数据进行实时监控。本专利技术对比现有技术有如下的有益效果:本专利技术提供的基于SparkStreaming读取Kafka数据的处理方法,根据Kafka数据失败记录数,设置SparkStreaming补数调度时间,实时监控读取过程并重新读取失败记录数进行补数,从而能够有效防止数据丢失,在失败恢复之后从Kafka中重新消费数据,在SparkStreaming程序异常情况下,更加灵活、便捷地做到零丢数保证。附图说明图1为本专利技术使用的SparkStreaming架构图;图2为本专利技术使用的Kafka处理流式数据示意图;图3为本专利技术的调度表和失败数记录表模型结构图;图4为本专利技术的基于SparkStreaming读取Kafka数据的监控流程图;图5为本专利技术的失败记录补数流程图。具体实施方式下面结合附图和实施例对本专利技术作进一步的描述。本专利技术提供的基于SparkStreaming读取Kafka数据的处理方法,使用关系型数据库创建两张数据库表,分别为调度表(control)、失败记录数表(failure)。其中调度表存放的是调度信息,包括调度编号id,开始时间,结束时间,状态,创建时间等信息。失败数记录表存放具体失败数据记录详细信息,包括失败记录id,偏移量,话题(topic),Kafka节点列表等信息。其中调度表里面的调度编号id跟失败数记录表的id为主外键关系。SparkStreaming对接Kafka读取处理数据过程中,首先会先通过SparkStreaming的createDirectStream方法,获取到正在从Kafka读取到数据的偏移量,并且将该数据偏移量信息入库到关系型数据库失败数记录表中,状态表示为正在进行中。当SparkStreaming对接Kafka读取处理数据过程中本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/201611069230.html" title="基于Spark Streaming读取Kafka数据的处理方法原文来自X技术">基于Spark Streaming读取Kafka数据的处理方法</a>

【技术保护点】
一种基于Spark Streaming读取Kafka数据的处理方法,其特征在于,包括如下步骤:S1)利用Kafka将数据存储在话题中,每个话题均包含若干可配置数量的分区;S2)利用Spark Streaming把实时输入数据流以时间片为单位切分成块,每个块均生成一个Spark Job处理;S3)预先根据Kafka数据失败记录数,设置SparkStreaming补数调度时间;S4)实时监控SparkStreaming读取Kafka数据的处理过程;S5)根据Kafka数据失败记录数和调度时间,通过SparkStreaming重新读取失败丢失的Kafka数据。

【技术特征摘要】
1.一种基于SparkStreaming读取Kafka数据的处理方法,其特征在于,包括如下步骤:S1)利用Kafka将数据存储在话题中,每个话题均包含若干可配置数量的分区;S2)利用SparkStreaming把实时输入数据流以时间片为单位切分成块,每个块均生成一个SparkJob处理;S3)预先根据Kafka数据失败记录数,设置SparkStreaming补数调度时间;S4)实时监控SparkStreaming读取Kafka数据的处理过程;S5)根据Kafka数据失败记录数和调度时间,通过SparkStreaming重新读取失败丢失的Kafka数据。2.如权利要求1所述的基于SparkStreaming读取Kafka数据的处理方法,其特征在于,所述步骤S3)使用关系型数据库创建两张数据库表,分别为调度表和失败记录数表,所述调度表中存放调度编号id,开始时间,结束时间,状态和创建时间信息,所述失败数记录表中存放失败记录id,偏移量,Kafka话题,Kafka节点列表信息,所述调度表中的调度编号id和失败数记录表的失败记录id为主外键关系。3.如权利要求2所述的基于SparkStreaming读取Kafka数据的处理方法,其特征在于,所述步骤S4)包括:在SparkStreaming读取Kafka数据过程中,如果对应的Kafka话题数据不为空,则获取到...

【专利技术属性】
技术研发人员:程永新谢涛王仁铮
申请(专利权)人:上海轻维软件有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1