CN113612832A - 流式数据分发方法与系统 - Google Patents

流式数据分发方法与系统 Download PDF

Info

Publication number
CN113612832A
CN113612832A CN202110863347.9A CN202110863347A CN113612832A CN 113612832 A CN113612832 A CN 113612832A CN 202110863347 A CN202110863347 A CN 202110863347A CN 113612832 A CN113612832 A CN 113612832A
Authority
CN
China
Prior art keywords
files
data
partition
layer
module
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
CN202110863347.9A
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.)
Shanghai Bilibili Technology Co Ltd
Original Assignee
Shanghai Bilibili 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 Shanghai Bilibili Technology Co Ltd filed Critical Shanghai Bilibili Technology Co Ltd
Priority to CN202110863347.9A priority Critical patent/CN113612832A/zh
Publication of CN113612832A publication Critical patent/CN113612832A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/133Protocols for remote procedure calls [RPC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种流式数据分发方法,所述方法包括:获取上游节点提供的数据流;通过多个并发任务对所述数据流进行处理,以通过所述多个并发任务得到多个文件;对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件;将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点。本申请实施例提供的技术方法,可以对多个并发任务得到的多个文件进行合并,例如:将多个文件合并成一个大文件或若干个文件,从而减少写入到ODS层的文件数量,可以有效降低ODS层的IO服务压力。

Description

流式数据分发方法与系统
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种流式数据分发方法、装置、计算机设备以及计算机可读存储介质,以及一种流式数据分发系统。
背景技术
数据传输链路一般由数据源、网关、数据缓冲层、数据分发层和数据存储层构成。当数据源产生新数据时,该新数据会最终落地到数据存储层。数据存储层包括ODS(操作数据存储)层、DW(数据仓库)层和ADS(应用数据存储)层等。但是,在现有技术中,在数据分发层的数据处理并发度较高的情形下,将数据分发层处理得到的数据写入到数据存储层(ODS层),容易造成IO负担过重。
发明内容
本申请实施例的目的是提供一种流式数据分发系统以及一种流式数据分发方法、装置、计算机设备以及计算机可读存储介质,用于解决以下问题:在数据分发层的数据处理并发度较高的情形下,将数据分发层处理得到的数据写入到数据存储层(ODS层),容易造成IO负担过重。
本申请实施例的一个方面提供了一种流式数据分发方法,所述方法包括:
获取上游节点提供的数据流;
通过多个并发任务对所述数据流进行处理,以通过所述多个并发任务得到多个文件;
对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件;
将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点。
可选地,所述数据流包括Protobuf数据;所述方法还包括:
监测所述数据流的Schema是否发生变化;及
若所述数据流的Schema发生变化,则动态变更用于生成所述Protobuf数据的类。
可选地,对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件,包括:
根据时间策略和/或文件合并大小策略,对所述多个文件中的至少部分文件进行合并操作。
可选地,还包括:根据所述下游节点的数据读取时效需求和/或所述下游节点的IO负载,确定所述时间策略;其中,所述时间策略用于指示以预定时间隔间执行一次合并操作。
可选地,还包括:以预设时间间隔生成对应于一个目标时间分区的分区增量索引,所述分区增量索引包括在所述目标时间分区写入到所述下游节点的一个或多个文件的索引信息。
可选地,所述将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点,包括:
以Append模式将所述一个或多个文件写入到所述下游节点中,并为每个文件设置一个检查点。
本申请实施例的再一个方面提供了一种流式数据分发装置,所述装置包括:
获取模块,用于获取上游节点提供的数据流;
处理模块,用于通过多个并发任务对所述数据流进行处理,以通过所述多个并发任务得到多个文件;
合并模块,用于对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件;
下发模块,用于将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点。
本申请实施例的再一个方面提供了一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时用于实现上述流式数据分发方法的步骤。
本申请实施例的又一个方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时用于上述流式数据分发方法的步骤。
本申请实施例的再一个方面提供了一种流式数据分发系统,用于Flink集群中,所述系统包括:
数据输入模块,用于从上游节点消费数据流,所述数据流包括Protobuf数据;
数据处理模块,用于通过多个任务并行处理所述数据流中的Protobuf数据,生成多个Parquet文件;
数据输出模块,用于输出所述多个Parquet文件;
数据合并模块,用于接收所述数据输出模块提供的多个Parquet文件,并对所述多个Parquet文件中的至少部分Parquet文件进行合并操作,得到一个或多个Parquet文件;其中,所述一个或多个Parquet文件用于写入到所述Flink集群下游的ODS层。
作为示例,还包括:
分区索引模块,用于以预设时间间隔生成对应于一个目标时间分区的分区增量索引;
其中,所述分区增量索引包括在所述目标时间分区写入到所述ODS层的一个或多个文件的索引信息。
本申请实施例提供的流式数据分发方法、装置、计算机设备以及计算机可读存储介质,以及数据分发系统,具有以下优势:对多个并发任务得到的多个文件进行合并操作,例如:将多个文件合并成一个大文件或若干个文件,从而减少写入到ODS层(下游节点)的文件数量,可以有效降低ODS层的IO服务压力。
附图说明
图1示意性示出了根据本申请实施例的传输链路图;
图2示意性示出了根据本申请实施例一的流式数据分发系统的框架图;
图3示意性示出了根据本申请实施例二的流式数据分发方法的流程图;
图4示意性示出了根据本申请实施例二的流式数据分发方法的新增流程图;
图5为图3中步骤S304的子流程图;
图6为图5中步骤S500的子流程图;
图7示意性示出了根据本申请实施例二的流式数据分发方法的新增流程图;
图8为图3中步骤S306的子流程图;
图9示意性示出了根据本申请实施例三的流式数据分发装置的框图;
图10示意性示出了根据本申请实施例四的适于实现数据处理装置的计算机设备的硬件架构示意图。
具体实施方式
为了使本申请实施例的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
为了方便理解,以下提供了一些术语解释:
Flink集群(Flink Cluster),是一个分布式系统,用于对无界和有界数据流进行有状态计算。Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
MySQL数据库,是一种基于关系型数据库管理系统的数据库。
Kafka,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,也可以作为消息队列系统。Kafka可以用于Web/Nginx日志、访问日志,消息服务等。Kafka是按秒进行任务的计算和应用,用于实时推荐、实时计算等场景中。
HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),是一个分布式文件系统。
Binlog日志,是记录所有数据库表结构变更(如CREATE、ALTER TABLE)及表数据修改(INSERT、UPDATE、DELETE)的二进制日志。Binlog日志的格式为JSON。
ODS(Operation Data Store)层,为操作数据存储层,用于存放原始数据,如Binlog日志、数据。
DW(Data Warehouse)层,为数据仓库层,可以ODS层获取数据并按照主题建立各种数据模型,方便数据分析。其中,DW可以包括DWD层(Data Warehouse Detail,明显数据层)、DWS层(Data Warehouse Service,服务数据层)和DWT层(Data Warehouse Topic,数据主题层)。DWD层可以对ODS层的数据进行清洗(去除空值、脏数据)、维度化、脱敏等。DWS层可以以DWD层的数据为基础,按天进行轻度汇总。DWT层可以以DWS层的数据为基础,按主题进行汇总。
ADS(Application Data Store)层,为应用数据存储层。所述ADS层可以基于DW层的数据并结合业务场景,得到的面向实际应用(报表、业务系统)的数据。
流标识(LogId),可以通过三段式语义(如,部门+项目+业务)进行定义,以便可以快速锁定数据所属的范畴,同时,所述流标识还可以定义有其他附属信息,如,创建者信息等。数据流可以定义有schema(数据库的组织与结构),如字段、类型、必填与否等信息。schema可以用于所述数据流的分析和评估操作。根据定义的schema,所述数据流的元数据信息中可以被发送相应的字段值,如业务场景等,不同业务场景可以配置不同的SLA(Service-Level Agreement,服务等级协议)质量保障。需要说明的是,这些字段值可以被用户或管理发送和修改的。
Protobuf(Google Protocol Buffer),由google公司用于数据交换的序列结构化数据格式。
Parquet,是面向分析型业务的列式存储格式。
数据输入模块(Source),作为数据输入接口,用于从数据缓冲层中相应的主题(Topic)下消费数据。
数据解析模块(Parser),用于对Source接收到的数据进行解析。
数据导出模块(Exporter),用于将数据进行格式转换和/或类型转换,以得到转换后的数据。
数据输出模块(Sink),作为数据输出接口,用于将数据分到数据存储层的存储终端。
分区消息提交模块(Commiter),用于分区索引等提交给元数据信息存储节点。
Append模式,指将新增数据追到DW层,而非将新增数据替换DW层中的已存储数据。
图1示意性示出了根据本申请实施例的数据传输链路。其中,所述数据传输系统可以由下几部分组成:数据源层、网关、消息系统、数据分发层、数据存储层等。
数据源层,可以包括内部数据源,也可以是连接外部数据源的数据接口。所述数据源层中可以有多种格式的数据,例如,APP和Web的上报数据是HTTP(HyperText TransferProtocol,超文本传输协议)格式的数据,服务端的内部通信数据是RPC(Remote ProcedureCall,远程过程调用)格式的数据。如图1所示,所述数据源层的数据可以是通过一个或多个边缘节点接收的移动终端上报的日志数据等,也可以是数据库(如,Mysql)、日志代理(LogAgent)等各个系统或设备提供的数据。
经由网关和消息系统,数据源层可以将数据传输到数据分发层。其中:
网关,用于将数据源层提供的数据转发到消息系统中。所述网关可以适应各种不同的业务场景和数据协议,例如,被配置用于兼容解析HTTP(HyperText TransferProtocol,超文本传输协议)协议的APP和Web数据,和GRPC协议的内部通信数据。
消息系统,可以由一个或多个Kafka集群构成,用于将所述数据源层中的数据发布到相应的主题下。不同重要性、优先级、数据吞吐量的数据,可以被分流到不同的kafka集群中,以保障不同类型数据的价值,避免系统故障影响整体数据。
数据分发层可以消费相应主题下的数据并对数据进行实时处理,即保障数据从消息系统获取并写入到数据存储层(例如,ODS层),ODS层可以是HDFS、Kafka、Hbase、ES(Elasticsearch)等。在本实施例中,所述数据分发层可以包括Flink集群。
数据存储层,用于存储数据,可以由不同形式的数据库构成。其中,数据存储层包括ODS层、DW层和ADS层等。DW层依赖于ODS层,ADS层依赖于DW层。
即,所述数据传输链路的数据流向如下:数据源层→网关→消息系统→数据分发层→ODS层。通过所述数据传输链路,数据源中的数据可以被传输到ODS层。具体如下:数据源层可以输出以LogId为流标识的数据流,通过HTTP、RPC等协议将这些数据上报给边缘节点,并依次经过网关、消息系统、Flink集群,并最终进入到ODS层。数据源层也可以将数据库变更日志(如Mysql的Binlog日志)等通过Log Agent经由网关、消息系统、数据分发层进入ODS层中。
实施例一
图2示意性示出了根据本申请实施例一的流式数据分发系统的架构图。
如图2所示,所述流式数据分发系统可以包括:
①数据输入模块(Kafkasource):
数据输入模块,用于从上游节点消费数据流,所述数据流包括Protobuf数据。其中:
所述数据流可以是通过埋点收集的移动终端实时产生的数据,或实时得到的其他数据。
所述数据流可以是离线数据的流式变更日志。
所述流式变更日志,可以是基于MySQL的Binlog日志,或描述数据库数据变更的其他日志。
②数据处理模块(Transform):
数据处理模块,用于通过多个任务并行处理所述数据流中的Protobuf数据,生成多个Parquet文件。
每个Tranform包括解析模块(Parser)、ETL模块(ETL)和适配模块(Exporter)。其中,所述解析模块,用于对所述数据流中的Protobuf数据进行解析操作(如解压、反序列化等),以得到解析后的数据。所述ETL模块,用于根据所述数据流的流标识,对所述解析后的数据进行相应的ETL(Extract-Transform-Load,数据抽取、转换和加载)处理,以得到ETL处理后的数据。所述适配模块,用于将所述ETL处理后的数据进行数据格式和类型转换,以得到Parquet文件。所述ETL模块可以对不同的数据流进行不同的数据清洗操作。示例性的,用户可以自定义所述相应的数据流的数据清洗规则,并经由广播模块(ConfigBroadcast)将包括数据清洗规则的Metadata(元数据信息)发送到ETL模块中,从而所述ETL模块可以对所述相应的数据流执行相应的ETL操作。
作为示例,所述数据处理模块还用于:监测所述数据流的Schema是否发生变化;及若所述数据流的Schema发生变化,则动态变更用于生成所述Protobuf数据的类(.class文件)。Schema变更,可以包括字段类型增、减,以及更改分区等。在本实施例中,在Schema发生变化后,不需要重新引入新类文件,而是动态变更即可。
③数据输出模块(HDFSSink):
数据输出模块,用于输出所述多个Parquet文件。
④数据合并模块(HDFSMerger):
数据合并模块,用于接收所述数据输出模块提供的多个Parquet文件,并对所述多个Parquet文件中的至少部分Parquet文件进行合并操作,得到一个或多个Parquet文件;其中,所述一个或多个Parquet文件用于写入到所述Flink集群下游的ODS层。
针对本申请实施例所述的流式数据分发系统,分析如下:
本发明人所了解到的是:在Flink集群中,往往会开启多个并发任务,并通过多个并发任务对一条数据流进行并发处理,从而可以提高数据流的处理速度。举例来说,可以开启100个并发任务对数据流A进行处理,每次处理理论上都会产生100个Parquet文件(小文件),那么需将这100个小文件分别写到ODS层,这种大量的小文件的写入,会极大地增加ODS层的IO(输入/输出)服务压力。
在本实施例中,可以通过数据合并模块将这100个小文件尽量地进行合并,例如:合并成一个大文件或若干个文件。相对于将100个小文件写入到ODS层,将这一个大文件或若干个文件写入到ODS层,可以有效降低ODS层的IO服务压力。
经过数据合并模块得到的各个文件可以以Append模式写入到ODS层,并为每个文件设置一个检查点(Checkpoint)。本发明人了解到:在未设置数据合并模块之前,高并发任务下生成大量的小文件,如果为每个小文件分别设置检测点(即,将已存储到ODS层的每个小文件的状态实时设置为“可读写状态”),会导致在ODS层出现大量的文件,因此通常做法是:每隔一个小时将所有写入的文件设置为“可读写状态”,因此对DW层来说,最近的一个小时内的文件虽然已经写入到ODS层,但是这些文件是不可读的,时效性非常差。在本实施例中,由于实施了合并操作,极大减少了文件数量,因此可以为每个文件分别设置检测点(即,将已存储到ODS层的每个文件的状态实时设置为“可读写状态”),提高时效性。
以下提供一些可选方案。
作为示例,数据合并模块,还用于:
根据时间策略和/或文件合并大小策略,对所述多个文件中的至少部分文件进行合并操作。
作为示例,所述数据合并模块,被预先配置为:
根据所述ODS层的数据读取时效需求和/或所述ODS层的IO负载,确定所述时间策略;其中,所述时间策略用于指示以预定时间隔间执行一次合并操作。
数据读取时效需求,可以是DW层对所述ODS层的读取时效要求。如果DW层对数据时效要求高,则可缩短所述预定时间间隔,反之,则可延长所述预定时间间隔。
所述ODS层的IO负载,包括ODS层的IO吞吐量/秒,作为调节ODS层服务压力的依据。
举例1:可以设置每隔1秒,执行一次合并操作。
举例2:可以设置文件合并大小为128兆。
在合并操作中,若合并之后的大文件小于128兆,则直接将这个合并之后的大文件写到ODS层中。
在合并操作中,若待合并的文件的总和大于128兆,则尽量合并为一个128兆的大文件,其余的文件不合并,并将合并后的大文件和未合并的文件写入到ODS层中。
即,数据合并模块在既定策略下,尽量将多个文件合并为大文件。为了保证将文件写入到ODS层的效率,会在执行合并操作后直接执行写入,而不会等待下次合并操作。
作为示例,所述系统还可以包括:
⑤分区索引模块,用于以预设时间间隔生成对应于一个目标时间分区的分区增量索引。
其中,所述分区增量索引包括在所述目标时间分区写入到所述ODS层的一个或多个文件的索引信息。
本发明人所了解到的是:在现有技术中,各个Parquet文件存储到ODS层后,DW层需要依赖分区(Partition)来查找相应的Parquet文件,从而可能出现如下问题:ODS层需要在数据落库一段时间(如一个小时或一天)之后,才会创建分区,因此,处于下游的DW层需要每隔一个小时或一天,才可以从ODS层拿到一批数据。如果要提高ODS层和DW层间的时效性,如实时地将ODS层的数据写入DW层,则需要不断地遍历整个分区目录下的文件,从而增加ODS层的服务压力。
在本实施例中,每个时间分区的数据成功写入到ODS层后,分区索引模块会生成相应分区的分区索引,且可以将生成的分区索引存储到HMS(Hive MetaStore)中。举例来说,2021年7月20日16:10至2021年7月20日16:15期间的数据均成功写入到ODS层,则将这5分钟为作为一个目标分区并生成分区增量索引。其中,所述目标索引文件包括文件名、文件路径等信息。DW层可以通过扫描所述分区增量索引即可知道“2021年7月20日16:10至2021年7月20日16:15期间的数据已经成功存储到ODS层,且可读取”。在本实施例中,是采用分区粒度扫描,实际上只是读取个别文件,从而避免扫描目录,进而降低服务压力。另外,针对ad-hoc(自组织网)、离线ETL、OLAP(On-Line Transaction Processing,联机事务处理)等业务分析场景,可以充分地充分发挥数据布局优势。
实施例二
本实施例提供的流式数据分发方法,具体细节可以参见上文。
图3示意性示出了根据本申请实施例二的流式数据分发方法的流程图。下面计算机设备为执行主体进行示例性描述。该计算机设备可以服务器或服务器集群,如Flink集群。
如图3所示,该流式数据分发方法可以包括步骤S300~S306,其中:
步骤S300,获取上游节点提供的数据流。
步骤S302,通过多个并发任务对所述数据流进行处理,以通过所述多个并发任务得到多个文件。
步骤S304,对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件。
步骤S306,将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点。
针对本申请实施例所述的流式数据分发方法,可以包括如下技术优势:可以通过数据合并模块将这并发任务得到的多个文件尽量地进行合并,例如:合并成一个大文件或若干个文件。相对于将并发任务得到的各个文件直接写入到下游节点,将这一个大文件或若干个文件写入到下游节点,可以有效降低下游节点的IO服务压力。
所述下游节点可以为ODS层中的存储节点。需要说明的是,为了方面描述,下文在描述各个实施例的应用效果时,使用到的“ODS层”均指代“所述下游节点。”
作为示例,所述数据流包括Protobuf数据;如图4所示,所述方法还包括:步骤S400,监测所述数据流的Schema是否发生变化;及步骤S402,若所述数据流的Schema发生变化,则动态变更用于生成所述Protobuf数据的类。在本实施例中,在Schema发生变化后,不需要重新引入新类文件,而是动态变更即可。
作为示例,如图5所示,所述步骤S304可以包括步骤S500。其中:步骤S500,根据时间策略和/或文件合并大小策略,对所述多个文件中的至少部分文件进行合并操作。在本实施例中,可以兼顾DW层的时效性要求以及ODS层的服务压力,基于时间策略和/或文件合并大小策略,可以尽量将多个文件合并为大文件。
作为示例,如图6所示,所述方法还可以包括步骤S600。其中:步骤S600,根据所述下游节点的数据读取时效需求和/或所述下游节点的IO负载,确定所述时间策略;其中,所述时间策略用于指示以预定时间隔间执行一次合并操作。数据读取时效需求,可以是DW层对所述ODS层的读取时效要求。如果DW层对数据时效要求高,则可缩短所述预定时间间隔,反之,则可延长所述预定时间间隔。所述ODS层的IO负载,包括ODS层的IO吞吐量/秒,作为调节ODS层服务压力的依据。在本实施例中,可以兼顾DW层的时效性要求和ODS层的服务压力,确定时间策略,并在既定时间策略下,可以尽量将多个文件合并为大文件。
作为示例,如图7所示,所述方法还可以包括步骤S700。其中:步骤S700,以预设时间间隔生成对应于一个目标时间分区的分区增量索引,所述分区增量索引包括在所述目标时间分区写入到所述下游节点的一个或多个文件的索引信息。在本实施例中,每个时间分区的数据成功写入到ODS层后,会生成相应分区的分区索引。举例来说,2021年7月20日16:10至2021年7月20日16:15期间的数据均成功写入到ODS层,则将这5分钟为作为一个目标分区并生成分区增量索引。其中,所述目标索引文件包括文件名、文件路径等信息。DW层可以通过扫描所述分区增量索引即可知道“2021年7月20日16:10至2021年7月20日16:15期间的数据已经成功存储到ODS层,且可读取”。在本实施例中,是采用分区粒度扫描,实际上只是读取个别文件,从而避免扫描目录,进而降低服务压力。另外,针对ad-hoc(自组织网)、离线ETL、OLAP(On-Line Transaction Processing,联机事务处理)等业务分析场景,可以充分地充分发挥数据布局优势。
作为示例,如图8所示,所述步骤S306可以包括步骤S800。其中:步骤S800,以Append模式将所述一个或多个文件写入到所述下游节点中,并为每个文件设置一个检查点。在本实施例中,由于对多个并发任务得到的多个文件实施了合并操作,极大减少了文件数量,因此可以为每个文件分别设置检测点(即,将已存储到ODS层的每个文件的状态实时设置为“可读写状态”),提高时效性。
实施例三
图9示出了根据本申请实施例三的流式数据分发装置的框图,该流式数据分发装置可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。如图9所示,流式数据分发装置900可以包括以下组成部分:
获取模块910,用于获取上游节点提供的数据流;
处理模块920,用于通过多个并发任务对所述数据流进行处理,以通过所述多个并发任务得到多个文件;
合并模块930,用于对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件;
下发模块940,用于将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点。
作为示例,所述数据流包括Protobuf数据;所述装置还包括变更模块(未图示),用于:
监测所述数据流的Schema是否发生变化;及
若所述数据流的Schema发生变化,则动态变更用于生成所述Protobuf数据的类。
作为示例,所述合并模块930,还用于:
根据时间策略和/或文件合并大小策略,对所述多个文件中的至少部分文件进行合并操作。
作为示例,所述装置还包括确定模块(未图示),用于:
根据所述下游节点的数据读取时效需求和/或所述下游节点的IO负载,确定所述时间策略;其中,所述时间策略用于指示以预定时间隔间执行一次合并操作。
作为示例,所述装置还包括索引生成模块(未图示),用于:
以预设时间间隔生成对应于一个目标时间分区的分区增量索引,所述分区增量索引包括在所述目标时间分区写入到所述下游节点的一个或多个文件的索引信息。
作为示例,所述下发模块940,还用于:
以Append模式将所述一个或多个文件写入到所述下游节点中,并为每个文件设置一个检查点。
实施例四
图10示意性示出了根据本申请实施例四的适于实现流式数据分发装置的计算机设备的硬件架构示意图。所述计算机设备10000其是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是多个服务器所组成的服务器集群,所述多个服务器可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等。如图10所示,计算机设备10000至少包括但不限于:可通过系统总线相互通信链接存储器10010、处理器10020、网络接口10030。其中:
存储器10010至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器10010可以是计算机设备10000的内部存储模块,例如该计算机设备10000的硬盘或内存。在另一些实施例中,存储器10010也可以是计算机设备10000的外部存储设备,例如该计算机设备10000上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,存储器10010还可以既包括计算机设备10000的内部存储模块也包括其外部存储设备。本实施例中,存储器10010通常用于存储安装于计算机设备10000的操作系统和各类应用软件,例如流式数据分发装置的程序代码等。此外,存储器10010还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器10020在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器10020通常用于控制计算机设备10000的总体操作,例如执行与计算机设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器10020用于运行存储器10010中存储的程序代码或者处理数据。
网络接口10030可包括无线网络接口或有线网络接口,该网络接口10030通常用于在计算机设备10000与其他计算机设备之间建立通信连接。例如,网络接口10030用于通过网络将计算机设备10000与外部终端相连,在计算机设备10000与外部终端之间的建立数据传输通道和通信连接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,简称为GSM)、宽带码分多址(Wideband Code Division Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图10仅示出了具有部件10010-10030的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器10010中的流式数据分发装置还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器10020)所执行,以完成本申请。
实施例五
本实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的流式数据分发装置的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中的流式数据分发装置的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

Claims (11)

1.一种流式数据分发方法,其特征在于,所述方法包括:
获取上游节点提供的数据流;
通过多个并发任务对所述数据流进行处理,以通过所述多个并发任务得到多个文件;
对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件;
将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点。
2.根据权利要求1所述的流式数据分发方法,其特征在于,所述数据流包括Protobuf数据;所述方法还包括:
监测所述数据流的Schema是否发生变化;及
若所述数据流的Schema发生变化,则动态变更用于生成所述Protobuf数据的类。
3.根据权利要求1所述的流式数据分发方法,其特征在于,
对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件,包括:
根据时间策略和/或文件合并大小策略,对所述多个文件中的至少部分文件进行合并操作。
4.根据权利要求3所述的流式数据分发方法,其特征在于,还包括:
根据所述下游节点的数据读取时效需求和/或所述下游节点的IO负载,确定所述时间策略;其中,所述时间策略用于指示以预定时间隔间执行一次合并操作。
5.根据权利要求1至4任意一项所述的流式数据分发方法,其特征在于,还包括:
以预设时间间隔生成对应于一个目标时间分区的分区增量索引,所述分区增量索引包括在所述目标时间分区写入到所述下游节点的一个或多个文件的索引信息。
6.根据权利要求1至4任意一项所述的流式数据分发方法,其特征在于,
所述将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点,包括:
以Append模式将所述一个或多个文件写入到所述下游节点中,并为每个文件设置一个检查点。
7.一种流式数据分发装置,其特征在于,所述装置包括:
获取模块,用于获取上游节点提供的数据流;
处理模块,用于通过多个并发任务对所述数据流进行处理,以通过所述多个并发任务得到多个文件;
合并模块,用于对所述多个文件中的至少部分文件进行合并操作,得到一个或多个文件;
下发模块,用于将所述一个或多个文件下发到下游节点中,以将所述一个或多个文件存储到所述下游节点。
8.一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时用于实现权利要求1至6任一项所述流式数据分发方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时用于实现权利要求1至6任一项所述流式数据分发方法的步骤。
10.一种流式数据分发系统,其特征在于,用于Flink集群中,所述系统包括:
数据输入模块,用于从上游节点消费数据流,所述数据流包括Protobuf数据;
数据处理模块,用于通过多个任务并行处理所述数据流中的Protobuf数据,生成多个Parquet文件;
数据输出模块,用于输出所述多个Parquet文件;
数据合并模块,用于接收所述数据输出模块提供的多个Parquet文件,并对所述多个Parquet文件中的至少部分Parquet文件进行合并操作,得到一个或多个Parquet文件;其中,所述一个或多个Parquet文件用于写入到所述Flink集群下游的ODS层。
11.根据权利要求10所述的流式数据分发系统,其特征在于,还包括:
分区索引模块,用于以预设时间间隔生成对应于一个目标时间分区的分区增量索引;
其中,所述分区增量索引包括在所述目标时间分区写入到所述ODS层的一个或多个文件的索引信息。
CN202110863347.9A 2021-07-29 2021-07-29 流式数据分发方法与系统 Pending CN113612832A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110863347.9A CN113612832A (zh) 2021-07-29 2021-07-29 流式数据分发方法与系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110863347.9A CN113612832A (zh) 2021-07-29 2021-07-29 流式数据分发方法与系统

Publications (1)

Publication Number Publication Date
CN113612832A true CN113612832A (zh) 2021-11-05

Family

ID=78306004

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110863347.9A Pending CN113612832A (zh) 2021-07-29 2021-07-29 流式数据分发方法与系统

Country Status (1)

Country Link
CN (1) CN113612832A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117632860A (zh) * 2024-01-25 2024-03-01 云粒智慧科技有限公司 基于Flink引擎的小文件合并方法、装置及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003167813A (ja) * 2001-11-30 2003-06-13 Oki Electric Ind Co Ltd ストリームデータの蓄積・配信方法及びストリームデータの蓄積・配信システム
US8414390B1 (en) * 2009-09-30 2013-04-09 Amazon Technologies, Inc. Systems and methods for the electronic distribution of games
CN112019605A (zh) * 2020-08-13 2020-12-01 上海哔哩哔哩科技有限公司 数据流的数据分发方法和系统
CN112637288A (zh) * 2020-12-11 2021-04-09 上海哔哩哔哩科技有限公司 流式数据分发方法和系统
CN112988696A (zh) * 2019-12-18 2021-06-18 浙江宇视科技有限公司 文件整理方法、装置及相关设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003167813A (ja) * 2001-11-30 2003-06-13 Oki Electric Ind Co Ltd ストリームデータの蓄積・配信方法及びストリームデータの蓄積・配信システム
US8414390B1 (en) * 2009-09-30 2013-04-09 Amazon Technologies, Inc. Systems and methods for the electronic distribution of games
CN112988696A (zh) * 2019-12-18 2021-06-18 浙江宇视科技有限公司 文件整理方法、装置及相关设备
CN112019605A (zh) * 2020-08-13 2020-12-01 上海哔哩哔哩科技有限公司 数据流的数据分发方法和系统
CN112637288A (zh) * 2020-12-11 2021-04-09 上海哔哩哔哩科技有限公司 流式数据分发方法和系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117632860A (zh) * 2024-01-25 2024-03-01 云粒智慧科技有限公司 基于Flink引擎的小文件合并方法、装置及电子设备

Similar Documents

Publication Publication Date Title
CN112507029B (zh) 数据处理系统及数据实时处理方法
CN112559475B (zh) 数据实时捕获和传输方法及系统
CN109034993A (zh) 对账方法、设备、系统及计算机可读存储介质
US11860741B2 (en) Continuous data protection
CN113010565B (zh) 基于服务器集群的服务器实时数据处理方法及系统
CN113535856B (zh) 数据同步方法及系统
CN110019267A (zh) 一种元数据更新方法、装置、系统、电子设备及存储介质
CN109918349A (zh) 日志处理方法、装置、存储介质和电子装置
CN111966943A (zh) 流式数据分发方法和系统
CN112019605B (zh) 数据流的数据分发方法和系统
CN113282611B (zh) 一种流数据同步的方法、装置、计算机设备及存储介质
CN111970195B (zh) 数据传输方法和流式数据传输系统
WO2023082681A1 (zh) 基于批流一体的数据处理方法、装置、计算机设备和介质
CN114385760A (zh) 增量数据实时同步的方法、装置、计算机设备及存储介质
CN112948492A (zh) 一种数据处理系统、方法、装置、电子设备及存储介质
CN113010542B (zh) 业务数据处理方法、装置、计算机设备及存储介质
CN113468199B (zh) 索引更新方法及系统
CN114722119A (zh) 数据同步方法及系统
CN112506870A (zh) 数据仓库增量更新方法、装置及计算机设备
CN114090529A (zh) 一种日志管理方法、装置、系统和存储介质
CN114661823A (zh) 数据同步的方法、装置、电子设备及可读存储介质
CN117131059A (zh) 报表数据处理方法、装置、设备及存储介质
CN113612832A (zh) 流式数据分发方法与系统
CN113568966A (zh) 用于ods层和dw层之间的数据处理方法与系统
CN111125161A (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

Application publication date: 20211105

RJ01 Rejection of invention patent application after publication