一种Storm分布式实时计算方法及系统与流程

文档序号:28108150发布日期:2021-12-22 13:35阅读:165来源:国知局
一种Storm分布式实时计算方法及系统与流程
一种storm分布式实时计算方法及系统
技术领域
1.本技术属于分布式实时计算技术领域,尤其涉及一种storm分布式实时计算方法及系统。


背景技术:

2.随着互联网时代的到来,各业务系统每天都会产生大量的数据,与此同时,越来越多的应用场景要求能够对数据进行实时采集与分析计算,例如网站统计、推荐系统、预警系统、金融风控系统等等。apache storm是一个分布式实时大数据流式计算引擎,广泛地应用于上述业务场景。但是它并不能保证一致性消息传递“精确一次”(exactly

one)的消息交付语义,它采用了“至少一次”(at

least

once)数据处理语义,所以可能会有重复的数据,这样就违背了数据的准确性、一致性的原则。数据处理中“精确一次”(exactly

one)数据/消息交付语义保证,即在各种故障的情况下,对于每一条数据都保证只会被有且仅有一次的处理,防止数据处理中数据遗漏和重复计算的问题。
3.由于在分布式实时计算环境中,网络异常、计算节点或容器崩溃、应用部署以及系统重启的情况时有发生,因此这给在准确性要求高的场景下使用storm进行实时计算带来挑战。


技术实现要素:

4.本技术的目的是提供一种storm分布式实时计算方法及系统,为基于storm的分布式实时计算提供了“精确一次”的数据可靠性保障,使得storm可以应用在计算准确性要求高的场景下。
5.为了实现上述目的,本技术技术方案如下:
6.一种storm分布式实时计算方法,包括:
7.获取数据库日志,对数据库日志进行解析,获取行级别的变更数据,并将获取的变更数据按照统一的标准数据结构转换为标准数据;
8.将标准数据推送至消息中间件kafka,将标准数据对应的数据库唯一标识和变更数据在数据库日志中的位置信息注册到kafka的zookeeper组件中;
9.从消息中间件kafka中读取所述标准数据,获取读取所述标准数据前后每个主题的偏移量,生成当前状态的快照信息,并保存到kafka的zookeeper组件中;
10.对读取的标准数据执行storm分布式实时计算,如果计算发生错误,则从kafka的zookeeper组件中获取快照信息,并根据快照信息从kafka中再次获取对应的标准数据,然后重新计算。
11.进一步的,所述获取数据库日志,包括:
12.将数据采集端模拟为所要采集的数据库的备份数据库,从所要采集的数据库接收数据库日志。
13.进一步的,所述标准数据结构包括数据库唯一标识、表名、操作类型、变更前后的
数据值以及变更数据在数控库日志中的位置。
14.进一步的,所述storm分布式实时计算方法,还包括:
15.如果数据采集端发生故障需要重新启动或者重新部署,启动后,从kafka的zookeeper组件中获取到数据库唯一标识和变更数据的位置信息n,从数据库日志n+1位置处开始解析数据库日志。
16.进一步的,所述快照信息包括:
17.当前计算的数据库唯一标识、队列名称、读取前偏移量、读取后偏移量。
18.本技术还提出了一种storm分布式实时计算系统,所述storm分布式实时计算系统,包括数据源、数据采集端、消息中间件kafka和storm分布式实时计算端,其中:
19.所述数据采集端,用于从数据源获取数据库日志,对数据库日志进行解析,获取行级别的变更数据,并将获取的变更数据按照统一的标准数据结构转换为标准数据;将标准数据推送至消息中间件kafka,将标准数据对应的数据库唯一标识和变更数据在数据库日志中的位置信息注册到kafka的zookeeper组件中;
20.所述storm分布式实时计算端,用于从消息中间件kafka中读取所述标准数据,获取读取所述标准数据前后每个主题的偏移量,生成当前状态的快照信息,并保存到kafka的zookeeper组件中;对读取的标准数据执行storm分布式实时计算,如果计算发生错误,则从kafka的zookeeper组件中获取快照信息,并根据快照信息从kafka中再次获取对应的标准数据,然后重新计算。
21.进一步的,所述数据采集端获取数据库日志,执行如下操作:
22.将数据采集端模拟为所要采集的数据库的备份数据库,从所要采集的数据库接收数据库日志。
23.进一步的,所述标准数据结构包括数据库唯一标识、表名、操作类型、变更前后的数据值以及变更数据在数控库日志中的位置。
24.进一步的,所述数据采集端,还执行如下操作:
25.如果数据采集端发生故障需要重新启动或者重新部署,启动后,从kafka的zookeeper组件中获取到数据库唯一标识和变更数据的位置信息n,从数据库日志n+1位置处开始解析数据库日志。
26.进一步的,所述快照信息包括:
27.当前计算的数据库唯一标识、队列名称、读取前偏移量、读取后偏移量。
28.本技术提供的一种storm分布式实时计算方法及系统,实时监听和捕获数据库日志,解析日志,生成统一的数据结构并记录数据在数据库日志中的位置。监听消息中间件kafka,保存数据在kafka中的偏移量,以备后续实时计算失败时恢复到当前状态。为基于storm的分布式实时计算提供了“精确一次”的数据可靠性保障,使得storm可以应用在计算准确性要求高的场景下。
附图说明
29.图1为本技术一种storm分布式实时计算方法流程图;
30.图2为本技术实施例storm分布式实时计算系统交互示意图。
具体实施方式
31.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本技术,并不用于限定本技术。
32.本技术提供的一种storm分布式实时计算方法,如图1所示,包括:
33.步骤s1、获取数据库日志,对数据库日志进行解析,获取行级别的变更数据,并将获取的变更数据按照统一的标准数据结构转换为标准数据。
34.本技术通过数据库日志实时获取行级别的变更数据,基于数据库日志的实时数据采集利用数据库的主从复制模式(热备份模式),所要采集的数据库为主数据库,数据采集端将自己模拟成只读的备份数据库。这样备份数据库能够实时从主数据库接受数据库日志,捕获行级别的变更数据。
35.通过数据库日志能够实时获取行级别的变更数据,但不同类型的数据库之间没有统一的日志格式协议,如mysql采用专用协议binlog,oracle采用redo log重做日志,这给后续的进一步数据处理带来不便。
36.本技术数据采集端使用与数据库类型相对应的日志格式协议按照日志发生顺序进行解析,为所有的变更数据提供了一个统一的数据模型,统一生成标准的最小化的json、avro、thrift或protocol buffers格式的数据结构,包括数据库唯一标识、表名、操作类型、变更前后的数据值以及变更数据在数控库日志中的位置。
37.需要说明的是,本技术从数据库获取数据库日志,还可以由数据采集端实时去数据库抓取日志,本技术不限于获取数据库日志的具体实现方式。此外,对于标准数据结构,不仅可以是json格式数据结构,还可以是任何一种格式的数据结构,统一即可,这里不再赘述。
38.步骤s2、将标准数据推送至消息中间件kafka,将标准数据对应的数据库唯一标识和数据变更在数据库日志中的位置信息注册到kafka的zookeeper组件中。
39.kafka是一个开源的分布式消息系统,具有高水平扩展、高容错性和高吞吐量的特点。kafka可以确保所有这些变更事件数据都能够多副本并且总体上是有序的。
40.这里将json格式的标准数据推送到kafka,kafka的topic名称为数据库唯一标识+表名,并将该变更数据对应的数据库唯一标识和数据的位置信息注册到kafka的zookeeper组件中。
41.如果数据采集端发生故障需要重新启动或者重新部署,启动后,从kafka的zookeeper组件中获取到数据库唯一标识和数据的位置信息n,从数据库日志n+1位置处开始解析日志,这样就可以保证日志解析的连续性和不重复。
42.步骤s3、从消息中间件kafka中读取所述标准数据,获取读取所述标准数据前后每个主题的偏移量,生成当前状态的快照信息,并保存到kafka的zookeeper组件中。
43.监听kafka,后续storm分布式实时计算可能需要从kafka一个topic或多个topic读取数据。获取读取数据前后每个topic的偏移量offset,生成当前状态的快照,其内容包括:当前计算的数据库唯一标识、队列名称、读取前偏移量、读取后偏移量。然后将这些信息保存到kafka的zookeeper组件中。
44.步骤s4、读取的标准数据执行storm分布式实时计算,如果计算发生错误,则从
kafka的zookeeper组件中获取快照信息,并根据快照信息从kafka中再次获取对应的标准数据,然后重新计算。
45.保存好当前快照信息后,执行后续计算任务。如果计算发生错误,则从kafka的zookeeper组件中获取快照信息,然后使用当前计算的数据库唯一标识,从快照中获取当前计算对应的kafka队列名称、读取前偏移量、读取后偏移量,根据这些信息重新从队列中读取两个偏移量之间的数据,即数据重放,再进行重新计算。当多次重放失败后,停止计算任务,记录错误日志;并通过邮件和即时消息等途径进行告警,由人工介入排查和解决问题。
46.本技术为基于storm的分布式实时计算提供了“精确一次”的数据可靠性保障,使得storm可以应用在计算准确性要求高的场景下。在数据采集端故障时,可以从记录的位置处开始解析数据,保证日志解析的连续性和不重复。在试行storm分布式实时计算时,如果计算发生错误,则可以根据快照信息再次获取对应的数据,重新计算。
47.在另一个实施例中,本技术还提供了一种storm分布式实时计算系统,如图2所示,包括数据源、数据采集端、消息中间件kafka和storm分布式实时计算端,其中:
48.所述数据采集端,用于从数据源获取数据库日志,对数据库日志进行解析,获取行级别的变更数据,并将获取的变更数据按照统一的标准数据结构转换为标准数据;将标准数据推送至消息中间件kafka,将标准数据对应的数据库唯一标识和变更数据在数据库日志中的位置信息注册到kafka的zookeeper组件中;
49.所述storm分布式实时计算端,用于从消息中间件kafka中读取所述标准数据,获取读取所述标准数据前后每个主题的偏移量,生成当前状态的快照信息,并保存到kafka的zookeeper组件中;对读取的标准数据执行storm分布式实时计算,如果计算发生错误,则从kafka的zookeeper组件中获取快照信息,并根据快照信息从kafka中再次获取对应的标准数据,然后重新计算。
50.具体的,如图2所示,数据源可以是oracle数据库或mysql数据库,本技术不限于具体的数据库类型。数据采集端从数据源获取数据库日志,并解析数据库日志,将标准数据推送给消息中间件kafka,并记录日志当前位置等信息,注册到kafka的zookeeper组件中。
51.storm分布式实时计算端从kafka获取数据,生成快照信息,并保存到kafka的zookeeper组件中。然后对读取的数据进行计算,如果计算成功则返回继续读取数据,再继续进行计算。如果计算失败,则获取快照信息,重新从kafka读取数据,再次进行计算。
52.关于storm分布式实时计算系统的具体限定可以参见上文中对于storm分布式实时计算方法的限定,在此不再赘述。
53.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1