一种基于Kafka和SQL的数据查询方法技术

技术编号:21547831 阅读:29 留言:0更新日期:2019-07-06 21:24
本发明专利技术公开了一种基于Kafka和SQL的数据查询方法,包括以下步骤:采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位;采用非结构化数据协议,根据不同的数据协议分配不同的机构化构造器,通过构造器将数据扁平化,构建出表,增加内置的三个字段,结构化数据协议;以SQL形式进行数据查询。采用本发明专利技术实施例的方法使得在Kafka中查询某一条数据的时间由小时级优化至亚秒级甚至秒级。

A Data Query Method Based on Kafka and SQL

【技术实现步骤摘要】
一种基于Kafka和SQL的数据查询方法
本专利技术属于大数据
,具体涉及一种基于Kafka和SQL的数据查询方法。
技术介绍
近年来,伴随着物联网和互联网+概念的推动,数据量从GB升为TB甚至PB,由此大数据技术在国内有了突飞猛进的发展,被广泛认可的Hadoop,后来居上的Spark等层出不穷的技术框架出现在大数据领域。与此同时,Kafka作为分布式消息队列,可以对海量数据起到中间缓冲的作用,在大数据众多技术框架中占据了不可撼动的地位,每天几十亿的数据流过Kafka是很常见的场景。Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中所有的动作流数据。这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。在实际应用中,Kafka在debug和运维场景下,Kafka原生的支持显得很无力,查询数据只能低效率的从头开始遍历,数据量太大导致无法精准定位出具有某一条特征的数据等,都是会经常遇到的问题。探索运用高效率算法结合Kafka本身提供的技术特性来实现快速数据查询系统,并结合数据结构化查询语言SQL(结构化查询语言,StructuredQueryLanguage),将原本在Kafka中查询某一条数据的时间由小时级优化至亚秒级甚至秒级,将原本复杂的数据筛选统计优化为灵活的SQL表达式,为大数据的debug和运维提供技术工具支撑。针对Kafka的SQL查询功能,Confluentinc公司推出了KSQL系统,主要的系统特性及标签为分布式和实时,KSQL通过分布式的计算引擎,将Kafka数据实时接入消费,客户端通过SQL可以实时查询到Kafka的数据和聚合结果。该技术方案缺点在于:该方案立足于分布式计算引擎,最大的缺点就是复杂,当需要使用KSQL,那么不仅需要把KSQL系统部署在Kafka集群的各个节点上,还需要把Ksql的数据接入引擎Kafka-stream部署在Kafka集群的各个节点,这意味着需要同时维护3个集群。
技术实现思路
本专利技术要解决的技术问题是提供一种基于Kafka和SQL的数据查询方法,使得在Kafka中查询某一条数据的时间由小时级优化至亚秒级甚至秒级。为解决上述技术问题,本专利技术采用如下的技术方案:一种基于Kafka和SQL的数据查询方法,包括以下步骤:采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位;采用非结构化数据协议,根据不同的数据协议分配不同的机构化构造器,通过构造器将数据扁平化,构建出表,增加内置的三个字段,结构化数据协议;以SQL形式进行数据查询。优选地,采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位具体为:判断是否基于时间戳定位,若是,获取待查询topic当前第一条和最后一条数据的offset,通过粗定位和细定位两种方式定位到查询时间戳的offset,粗定位为通过二分法查找到与该时间戳接近的offset,细定位为基于粗定位的offset遍历topic直到找到该时间戳,输出定位offset;若否,直接遍历topic,对每条数据进行验证后输出定位offset。优选地,所述二分法具体为:每次取partition中的一条数据和查询的时间戳对比,如果topic中的数据时间戳大,那么直接将offset/2再取拉取数据,如果topic中的时间戳小,那么将之前的offset由offset/2改为offset/4再次拉取数据并对比时间戳。优选地,三个字段分别为kafka分区id:_partition,kafka数据序号:_offset,kafka时间戳:_timestamp。采用本专利技术具有如下的有益效果:本专利技术技术方案中采用基于时间戳的二分查找。众所周知,Kafka数据查找没有类似mysql索引的概念,唯一可以入手的地方就是时间戳,由Kafka的系统特性可知,对于每个partition,数据是有序的,因此数据中的时间戳也是有序的。这个方案可以在控制资源的使用情况下极大的提升查询数据的效率。附图说明图1为本专利技术实施例的基于Kafka和SQL的数据查询方法的步骤流程图;图2为本专利技术实施例中offset的定位流程图;图3为本专利技术实施例中数据结构化流程图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。参照图1,所示为本专利技术实施例的基于Kafka和SQL的数据查询方法的步骤流程图,其包括:采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位;采用非结构化数据协议,根据不同的数据协议分配不同的机构化构造器,通过构造器将数据扁平化,构建出表,增加内置的三个字段,结构化数据协议;以SQL形式进行数据查询。基于对数据查询的灵活性和扩展性考虑,SQL无疑是最优秀的数据查询语言,可以覆盖实际场景中大部分的需求,并且可以通过udf(自定义方法)灵活的扩展SQL。参见图2,采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位具体为:判断是否基于时间戳定位,若是,获取待查询topic当前第一条和最后一条数据的offset,通过粗定位和细定位两种方式定位到查询时间戳的offset,粗定位为通过二分法查找到与该时间戳接近的offset,细定位为基于粗定位的offset遍历topic直到找到该时间戳,输出定位offset;若否,直接遍历topic,对每条数据进行验证后输出定位offset。offset的定位是针对每个partition而言的,也就是说一个topic中每个partition都有独立的offset定位者,这个在并发定位的角度考虑也是必要的。由于offset定位直接影响到数据查询的效率,可以说是及其重要的,如果一个简单的点查要耗费几十分钟的时间,那么查询工具将失去存在的意义。图2的流程图中,第一种基于遍历的offset定位一般只是在特殊情况下使用,比如数据量不大的情况,不建议对海量数据直接遍历,其定位流程也是简单直接的扫描topic中的每条数据。第二种offset定位是本方案建议使用的定位方式,在kafka每个partition有序的大前提下,时间戳可以作为很好的查询索引。基于时间戳的定位中粗定位采用二分法,每次取partition中的一条数据和查询的时间戳对比,如果topic中的数据时间戳大,那么直接将offset/2再取拉取数据,如果topic中的时间戳小,那么将之前的offset由offset/2改为offset/4再次拉取数据并对比时间戳。为了防止粗定位的粒度过细,设置了两个终结条件,终结点之后的offse本文档来自技高网
...

【技术保护点】
1.一种基于Kafka和SQL的数据查询方法,其特征在于,包括以下步骤:采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位;采用非结构化数据协议,根据不同的数据协议分配不同的机构化构造器,通过构造器将数据扁平化,构建出表,增加内置的三个字段,结构化数据协议;以SQL形式进行数据查询。

【技术特征摘要】
1.一种基于Kafka和SQL的数据查询方法,其特征在于,包括以下步骤:采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位;采用非结构化数据协议,根据不同的数据协议分配不同的机构化构造器,通过构造器将数据扁平化,构建出表,增加内置的三个字段,结构化数据协议;以SQL形式进行数据查询。2.如权利要求1所述的基于Kafka和SQL的数据查询方法,其特征在于,采用基于时间戳的定位方式对数据进行定位,分别对数据进行粗定位和细定位具体为:判断是否基于时间戳定位,若是,获取待查询topic当前第一条和最后一条数据的offset,通过粗定位和细定位两种方式定位到查询时间戳的offset,粗定位为通过二分法查找到与该时间戳接近的offset,细定位为基于粗定位的o...

【专利技术属性】
技术研发人员:万敏陈小游蔡巍伟
申请(专利权)人:浙江新再灵科技股份有限公司
类型:发明
国别省市:浙江,33

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

1