CN115473858A - 数据传输方法和流式数据传输系统 - Google Patents

数据传输方法和流式数据传输系统 Download PDF

Info

Publication number
CN115473858A
CN115473858A CN202211081555.4A CN202211081555A CN115473858A CN 115473858 A CN115473858 A CN 115473858A CN 202211081555 A CN202211081555 A CN 202211081555A CN 115473858 A CN115473858 A CN 115473858A
Authority
CN
China
Prior art keywords
data
gateway
different
target
reporting
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.)
Granted
Application number
CN202211081555.4A
Other languages
English (en)
Other versions
CN115473858B (zh
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 CN202211081555.4A priority Critical patent/CN115473858B/zh
Publication of CN115473858A publication Critical patent/CN115473858A/zh
Application granted granted Critical
Publication of CN115473858B publication Critical patent/CN115473858B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/621Individual queue per connection or flow, e.g. per VC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/66Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种数据传输方法,所述方法包括:所述数据采集插件从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关;所述网关在接收到所述数据上报请求后,将所述数据上报请求中的数据存储至目标请求队列中;所述网关通过轮询方式从生产者池中确定每一个请求队列对应的目标生产者,并通过所述目标生产者在预设的时间段内将所述目标生产者对应的请求队列中的存储的数据缓存至所述Kafka集群的目标主题中;所述Flink集群通过多个Flink SQL作业消费Kafka集群的各个主题中缓存的数据,并将消费到的数据分发至目标终端中。本申请可以避免不同数据流的传输之间会相互影响。

Description

数据传输方法和流式数据传输系统
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种数据传输方法、流式数据传输系统、计算机设备及计算机可读存储介质。
背景技术
现有的流式数据传输系统从架构上可以划分为数据源层、数据网关层、数据缓存层、数据分发层及数据存储层,其中,数据源层采用数据采集插件从数据源中采集数据流并上报至数据网关层;数据网关层基于多个数据管道将数据缓存至数据缓存层;数据缓冲层使用kafka集群实现数据缓冲;数据分发层基于Flink集群实现将数据从数据缓存层同步至数据存储层。然而,发明人发现,现有的流式数据传输系统在进行数据流的传输时,数据流之间的隔离性差,当数据管道内部某个数据流的流量陡增时,会造成整个数据管道内的所有数据流分发出现延迟。
发明内容
本申请实施例的目的是提供一种数据传输方法、流式数据传输系统、计算机设备及计算机可读存储介质,可以用于解决现有的流式数据传输系统在传输数据的过程中,当数据管道内部某个数据流的流量陡增时,会造成整个数据管道内的所有数据流分发出现延迟的问题。
本申请实施例的一个方面提供了一种数据传输方法,应用于流式数据传输系统中,所述流式传输系统包括由多个数据采集插件组成的数据上报边缘层、由网关组成的数据上报网关层、由Kafka集群组成的数据缓存层、由Flink集群组成的数据分发层及由多个终端组成的数据存储层,所述方法包括:
所述数据采集插件从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关,其中,不同的数据流具有的数据流标识不同,每一个数据上报请求中包含的数据具有相同的数据流标识;
所述网关在接收到所述数据上报请求后,将所述数据上报请求中的数据存储至目标请求队列中,其中,具有不同的数据流标识的数据存储的请求队列不同;
所述网关通过轮询方式从生产者池中确定每一个请求队列对应的目标生产者,并通过所述目标生产者在预设的时间段内将所述目标生产者对应的请求队列中的存储的数据缓存至所述Kafka集群的目标主题中,其中,不同的请求队列对应的主题不同;
所述Flink集群通过多个Flink SQL作业消费Kafka集群的各个主题中缓存的数据,并将消费到的数据分发至目标终端中,其中,每一个Flink SQL作业消费一个主题中缓存的数据。
可选的,所述流式数据传输系统还包括数据传输管理模块,所述方法还包括:
所述数据传输管理模块根据用户对所述数据源中的待采集数据流的配置信息生成所述待采集数据流的元数据信息,并将所述元数据信息保存至预设的数据库中,其中,所述元数据信息包括所述待采集数据流的数据流标识,所述待采集数据流对应缓存的主题信息、所述待采集数据流分发的终端信息。
可选的,所述数据采集插件从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关包括:
所述数据采集插件通过不同的数据采集进程从数据源中采集不同的数据流,并采用不同的数据上报请求将不同的数据流中的数据上报至所述网关。
可选的,所述方法还包括:
所述网关在检测到数据流中的数据缓存至所述Kafka集群的主题中出现超时情况时,确定出现超时情况的主题中的分区,并在确定出现超时情况的主题中的分区后,停止向出现超时情况的主题中的分区缓存数据。
可选的,所述方法还包括:
所述网关在确定出现超时情况的主题中的分区后,将出现超时情况的主题中的其他分区作为缓存数据流中的数据的分区。
可选的,所述方法还包括:
所述Flink集群在检测到通过Flink SQL作业消费Kafka集群的主题中的数据出现延迟情况时,将出现延迟情况的主题向zookeeper注册为黑名单;
所述网关获取所述黑名单中包含的主题,并停止向所述黑名单中包含的主题缓存数据。
可选的,所述Kafka集群包括第一Kafka集群与第二Kafka集群,所述方法还包括:
所述网关实时监测缓存至Kafka集群中的数据的缓存状况,并根据所述缓存状况从所述一Kafka集群与所述第二Kafka集群选择用于缓存数据的Kafka集群。
可选的,所述方法还包括:
所述Flink集群在检测到通过Flink SQL作业消费Kafka集群的主题中的数据出现延迟情况时,将出现消费延迟情况的数据反压至对应的主题中。
本申请实施例的再一个方面提供了一种流式数据传输系统,所述系统包括:由多个数据采集插件组成的数据上报边缘层、由网关组成的数据上报网关层、由Kafka集群组成的数据缓存层、由Flink集群组成的数据分发层及由多个终端组成的数据存储层,其中:
所述数据采集插件,用于从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关,其中,不同的数据流具有的数据流标识不同,每一个数据上报请求中包含的数据具有相同的数据流标识;
所述网关,用于在接收到所述数据上报请求后,将所述数据上报请求中的数据存储至目标请求队列中,其中,具有不同的数据流标识的数据存储的请求队列不同;
所述网关,还用于通过轮询方式从生产者池中确定每一个请求队列对应的目标生产者,并通过所述目标生产者在预设的时间段内将所述目标生产者对应的请求队列中的存储的数据缓存至所述Kafka集群的目标主题中,其中,不同的请求队列对应的主题不同;
所述Flink集群,用于通过多个Flink SQL作业消费Kafka集群的各个主题中缓存的数据,并将消费到的数据分发至目标终端中,其中,每一个Flink SQL作业消费一个主题中缓存的数据。
本申请实施例的再一个方面提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,上述处理器执行上述计算机程序时用于实现如上任一项所述的数据传输方法的步骤。
本申请实施例的又一个方面提供了一种计算机可读存储介质,其上存储有计算机程序,上述计算机程序被处理器执行时用于实现如上任一项所述的数据传输方法的步骤。
本申请实施例提供的本实施例的数据传输方法,通过将不同的数据流的数据采用不同的数据上报请求上报网关,从而使得网关接收到是各个数据流的数据是相互隔离的,接着,通过网关在接收到各个数据流的数据后,将不同数据流的数据存储至不同的请求队列中,使得不同的数据流在网关中保持隔离,之后,通过不同的生产者将不同请求队列中的数据缓存至不同的主题中,使得不同的数据流在Kafka集群中也是相互隔离的,最后,通过不同的Flink SQL作业消费Kafka集群的不同主题中缓存的数据,并将消费到的数据分发至目标终端中,使得不同的数据流在数据分发过程中也是相互隔离的,实现了数据流在整个数据传输过程中都是相互隔离的,这样,当管道内部某个数据流的流量陡增时,将只会影响到该数据流的分发,对于管道内的其他数据流的分发将不会存在影响。
附图说明
图1示意性示出了流式数据传输系统的系统架构图;
图2示意性示出了根据本申请一实施例的数据传输方法的流程图;
图3为意性示出了根据本申请另一实施例的数据传输方法的流程图;
图4示意性示出了根据本申请实施例的流式数据传输系统的框图;以及
图5示意性示出了根据本申请实施例的适于实现数据传输方法的计算机设备的硬件架构示意图。
具体实施方式
为了使本申请实施例的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
图1示意性示出了一种流式数据传输系统,所述流式数据传输系统在于提供流式的数据传输服务,如用于实时流和离线流两大场景的数据收集和分发。实时流场景,对应于秒级别的数据时效性,主要用于将数据写入到kafka、hbase等数据库中。离线流场景,对应于小时级别或天级别的数据时效性,主要用于将数据写入到hdfs、hive等数据库中。所述流式数据传输系统可以由下几部分组成:数据源1、数据传输层2、数据缓存层3、数据分发层4、数据存储层5和数据传输管理模块6等。
所述数据源1,可以是内部数据源,也可以连接外部数据源的数据接口。所述数据源1中可以有多种格式的数据,例如,APP和Web的上报数据是HTTP(HyperText TransferProtocol,超文本传输协议)格式的数据,服务端的内部通信数据是RPC(Remote ProcedureCall,远程过程调用)格式的数据。
所述数据传输层2,可以通过一个或多个网关节点组成的网关集群实现,用于协议解析、打包和压缩等,以保障数据在不丢失的前提下写入到数据缓存层3。具体的,所述数据传输层2被配置连接于数据源1,并可以适应各种不同的业务场景和数据协议,例如,被配置用于兼容解析多种协议的数据,诸如基于HTTP(HyperText Transfer Protocol,超文本传输协议)协议的APP和Web数据,和基于RPC协议的服务端的内部通信数据。解析得到的数据可以被转换为标准格式数据库文件并被存储到数据缓冲层3。
所述数据缓存层3,可以通过Kafka集群(一种消息分发订阅系统)实现,起到数据削峰填谷的作用。不同重要性、优先级、数据吞吐量的数据流,可以被分流到kafka集群中的不同的Topic(主题)中,以保障不同类型的数据流的价值,避免系统故障影响整体数据。
数据分发层4,可以由Flink集群组成的流量分发系统(Collector)实现,用于内容转换和分发存储,即保障数据流从数据缓冲层3获取并写入到数据存储层5中对应的存储终端中。具体的,所述数据分发层4用于数据的分发落地,支持的分发场景包括HDFS(HadoopDistributed File System,Hadoop分布式文件系统)、Kafka、Hbase、ES(Elasticsearch)等,而在分发的过程中,由于不同存储终端的数据落地时效性要求可能不同,例如,HDFS的数据写入是按天进行任务的计算和应用,Kafka的数据写入一般是按秒进行任务的计算和应用,通常用于诸如实时推荐、实时计算等场景中。
所述数据存储层5,由多个终端组成,用于存储数据,各个终端可以由不同形式的数据库构成,所述数据库可以ES、Hive、Kafka、Hadoop、hdfs和Hbase等。
所述数据传输管理模块6,用于对传输数据流的逻辑管道进行管理,以及用于整条传输链路中所体现的传输质量进行监控。传输质量是衡量所述流式数据传输系统的重要指标之一,例如,所述流式数据传输系统数据丢失率、延迟率、接收数据量、分发数据量等。
为了帮助理解所述流式数据传输系统的工作原理,下面对其提供的数据传输服务进行介绍:数据源1可以以logId(数据流的数据流标识信息)为单位形成一批一批的数据流,其中每条数据流具有一个用于唯一区分不同的数据流的logId,通过HTTP、RPC等协议将这些数据上报给数据传输层2,并依次经过数据传输层2、数据缓存层3进入到数据分发层4,通过数据分发层4将这些数据发到数据存储层5中的终端中。
图2示意性示出了根据本申请实施例一的数据传输方法的流程图。应用于流式数据传输系统中,所述流式传输系统包括由多个数据采集插件组成的数据上报边缘层、由网关组成的数据上报网关层、由Kafka集群组成的数据缓存层、由Flink集群组成的数据分发层及由多个终端组成的数据存储层。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。如图2所示,该数据传输方法可以包括步骤S20~步骤S23,其中:
步骤S20,所述数据采集插件从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关,其中,不同的数据流具有的数据流标识不同,每一个数据上报请求中包含的数据具有相同的数据流标识。
具体地,数据采集插件(agent)部署在数据源中,用于从数据源中采集数据流。在本实施例中,不同类型的数据源部署的数据采集插件不同。具体在,当数据源为移动终端时,可以在边缘节点(CDN)上部署bfe-agent数据采集插件。当数据源为服务端时,可以在物理机上部署log-agent数据采集插件。
其中,log-agent数据采集插件可以基于go语音开发,并采用插件化架构,以实现可靠、高效的服务端数据上报。log-agent数据采集插件的架构可以划分为数据收集层、数据处理层及数据发送三层,并具有以下主要特性:
1、支持文件采集和unix sock两种数据上报方式;
2、与网关通过GRPC通信,并ACK机制、退避重试机制及流控机制;
3、数据流的上报以logid为单位实现,每个logid启动独立的进程进行采集、解析、发送;
4、数据发送受阻情况下,基于磁盘进行本地堆积。
bfe-agent数据采集插件也基于go语言进行开发,用于承载公网数据上报。bfe-agent整体实现架构与log-agent类似。
在本实施例中,部署在数据源中的数据采集插件在采集到数据流之后,针对具有不同数据流标识的数据流会生成不同的数据上报请求以将采集到的数据上报至网关,同时,针对同一数据流中的多个数据可以通过一个或多个数据上报请求将数据上报至网关。一般而言,一个数据上报请求中可以包含有多个数据。
作为示例,假设通过数据采集插件采集到3条数据流,则在进行数据上报时,针对第1条数据流会生成多个数据上报请求以将第1条数据流中的数据上报至网关;针对第2条数据流也会生成多个数据上报请求以将第2条数据流中的数据上报至网关;针对第3条数据流也会生成多个数据上报请求以将第3条数据流中的数据上报至网关。
在一实施例中,数据采集插件在进行数据采集时,会通过不同的数据采集进程从数据源中采集不同的数据流,并采用不同的数据上报请求将不同的数据流中的数据上报至所述网关。比如,总共有3条数据流,则会通过数据采集进程a来采集第1条数据流;会通过数据采集进程b来采集第2条数据流;以及会通过数据采集进程c来采集第3条数据流。
在本实施例中,通过采用不同的数据采集进行实现数据的采集,从而可以实现不同数据流之间的隔离。
其中,所述数据流可以是由一批基于HTTP(S)、RPC等各类协议的数据组成的,所述数据流中的数据都携带有所述数据流的数据流标识(logId),该标识用于区分不同的数据流,该标识可以通过三段式语义(如,部门+项目+业务)进行定义,以便可以快速锁定数据所属的范畴。
在本实施例中,为了使得后续可以对不同的数据流进行对应的数据处理,所述流式数据传输系统还包括数据传输管理模块,所述数据传输管理模块根据用户对所述数据源中的待采集数据流的配置信息生成所述待采集数据流的元数据信息,并将所述元数据信息保存至预设的数据库中,其中,所述元数据信息包括所述待采集数据流的数据流标识,所述待采集数据流对应缓存的主题(Topic)信息、所述待采集数据流分发的终端信息。
其中,用户可以通过数据传输管理模块提供的配置界面来对待采集数据流进行配置。在一实施方式中,用户可以为该待采集数据流配置产生该待采集数据流的部门信息,产出该待采集数据流的项目信息,以及产生该待采集数据流的业务信息。在本实施例中,用户还可以为该待采集数据流配置数据优先级信息、数据重要性信息、数据价值信息、缓存的主题信息,分发的终端信息等等在本实施例中,在用户对数据流完成配置之后,该数据传输管理模块即可以根据用户的配置信息来生成所述数据流的元数据信息。
其中,该元数据信息中包含的数据流标识可以根据用户为该待采集数据流所配置的部门信息、项目信息及业务信息进行生成,比如,可以将用户为该待采集数据流配置的部门信息作为该待采集数据流的标识信息,也可以将用户为该待采集数据流配置的业务信息作为该待采集数据流的标识信息,可以将用户为该待采集数据流配置的项目信息作为该待采集数据流的标识信息,或者可以将用户为该待采集数据流配置的部门信息、项目信息及业务信息中的至少两者的组合作为该待采集数据流的标识信息。
其中,该元数据信息中包含的主题信息为用于确定缓存该待采集数据流的主题(Topic),比如,该主题信息(Topic)为Topic A,则在需要将该待采集数据流缓存至Kafka集群中的Topic A。
其中,该元数据信息中包含的终端信息为用于确定该待采集数据流需要分发的终端,比如,该终端信息包括Hbase、hdfs、Kafka,则表明该待采集数据流需要分发至Hbase终端、hdfs终端与Kafka终端中。
在本实施例中,数据传输管理模块在生成所述数据流的元数据信息后,会将该元数据信息存储至预设的数据库中。其中,所述预设的数据库为预先设定的数据库,该数据库可以为Mysql数据库,也可以为其他类型的数据库,比如,oracle数据库。
Kafka集群中可以缓存多个Topic的数据,每个Topic中用于存储一类消息,每个Topic还可以分为多个partition(消息分区)。
步骤S21,所述网关在接收到所述数据上报请求后,将所述数据上报请求中的数据存储至目标请求队列中,其中,具有不同的数据流标识的数据存储的请求队列不同。
具体地,请求队列为网关中用于对接收到的数据上报请求中的数据进行缓存的队列。所述目标请求队列为对当前接收到的数据上报请求中的数据进行缓存的队列。
在本实施例中,为了使得具有不同的数据流标识的数据可以缓存至不同的请求队列中,网关为预先为不同的数据流创建与其一一对应的请求队列,比如,数据流1对应请求队列1、数据流2对应请求队列2。
在本实施例中,网关在接收到数据上报请求后,会对当前数据上报请求中的数据的数据流标识进行解析,以获取数据的数据流标识,之后,可以根据数据流标识将数据存储至与数据流标识相对应的目标请求队列中。
需要说明的是,当目标请求队列中存储的数据已满时,则网关将会拒绝将当前数据上报请求中的数据缓存至目标队列中,而会将当前数据上报请求中的数据反压回数据采集插件。
步骤S22,所述网关通过轮询方式从生产者池中确定每一个请求队列对应的目标生产者,并通过所述目标生产者在预设的时间段内将所述目标生产者对应的请求队列中的存储的数据缓存至所述Kafka集群的目标主题中,其中,不同的请求队列对应的主题不同。
具体地,所述轮询的方式指的是在不同的时间片段与请求队列绑定的生产者不同,比如,对于请求队列1,若生产者1在当前时间片段与请求队列1绑定,则在下一个时间片段,生产者1将绑定请求队列2,下下个时间片段则将绑定请求队列3,以此轮询直到完成所有请求队列的绑定,继而继续轮询绑定。
所述预设的时间段为目标生产者服务于目标请求队列的时长,比如,所述预设的时间段为10分钟,则目标生产者在这10分钟中都会为目标请求队列服务,也就是说,在这10分钟内,目标生产者都会将目标队列中存储的数据缓存至目标主题中。
需要说明的是,生产者用于将请求队列中的数据缓存至所述Kafka集群的目标主题。所述目标生产者为对当前请求队列进行服务的生产者。所述目标主题为与当前的请求队列相对应的主题。
在本实施例中,每个kafka集群,会预先初始化一个包含有N个生产者的生产者池,这样后续在进行数据发送时,即可以通过轮询方式从生产者池中确定各个请求队列对应的生产者。
在本实施例中,对于每个数据流对应的的请求队列,为了保证公平性和隔离性,会从以下两个维度限制资源的占用。
维度1、限制每一个请求队列绑定的生产者数量;
维度2、基于时间片限定每一个生产者服务于单个请求队列的时长。
步骤S23,所述Flink集群通过多个Flink SQL作业消费Kafka集群的各个主题中缓存的数据,并将消费到的数据分发至目标终端中,其中,每一个Flink SQL作业消费一个主题中缓存的数据。
具体地,所述Flink SQL作业为一个用于从Kafka集群中消费缓存在对应主题(Topic)中的数据的任务,每一个Flink SQL作业对应一个主题(Topic),即每一个主题(Topic)在Flink集群中存在一个与其相对应的Flink SQL作业,通过该Flink SQL作业可以将该主题中缓存的数据消费出来。
其中,Flink SQL是面向用户的API层。
在本实施例中,在消费到所述主题中缓存的数据之后,该Flink SQL作业还会将该数据分发至对应的终端中。其中,该对应的终端可以根据该消费到的数据的数据流标识进行确定。具体地,每一个数据流中都会预先配置该数据流需要分发的终端,这样,在消费到该数据流中的数据之后,可以查询该数据流预先配置的分发终端,然后可以根据查询到的分发终端将数据分发至查找到的终端中。
本实施例的数据传输方法,通过将不同的数据流的数据采用不同的数据上报请求上报网关,从而使得网关接收到是各个数据流的数据是相互隔离的,接着,通过网关在接收到各个数据流的数据后,将不同数据流的数据存储至不同的请求队列中,使得不同的数据流在网关中保持隔离,之后,通过不同的生产者将不同请求队列中的数据缓存至不同的主题中,使得不同的数据流在Kafka集群中也是相互隔离的,最后,通过不同的Flink SQL作业消费Kafka集群的不同主题中缓存的数据,并将消费到的数据分发至目标终端中,使得不同的数据流在数据分发过程中也是相互隔离的,实现了数据流在整个数据传输过程中都是相互隔离的,这样,当管道内部某个数据流的流量陡增时,将只会影响到该数据流的分发,对于管道内的其他数据流的分发将不会存在影响。
在一示例性的实施方式中,为了避免分区局部过热,所述方法还包括:
所述网关在检测到数据流中的数据缓存至所述Kafka集群的主题中出现超时情况时,确定出现超时情况的主题中的分区,并在确定出现超时情况的主题中的分区后,停止向出现超时情况的主题中的分区缓存数据。
作为示例,当网关检测到数据流a中的数据缓存至Topic a中的数据出现超时情况时,即网关在规定的时间内没有将数据流a中的数据缓存至Topic a中,则网关会进一步确定当前是Topic a中的那个分区(Partition)出现了数据缓存延迟情况,比如为Topic a中的Partition1,则网关会将该Partition 1从Topic a的可用的分区列表中删除,同时,网关会停止向Partition1缓存数据,并将其他分区作为用于存储数据流中的数据的分区,比如,将Topic a中的Partition 2作为其他分区来缓存数据流中的数据。
在一实施方式中,为了节省存储资源,被删除的分区后续可以进行恢复性测试,如果数据可以正常缓存,将重新放入到可用的分区列表中。
在一示例性的实施方式中,为了避免Topic出现过热情况,参阅图3,所述方法还包括:
步骤S30,所述Flink集群在检测到通过Flink SQL作业消费Kafka集群的主题中的数据出现延迟情况时,将出现延迟情况的主题向zookeeper注册为黑名单;步骤S31,所述网关获取所述黑名单中包含的主题,并停止向所述黑名单中包含的主题缓存数据。
具体地,通过将数据生产者(网关)与数据消费者(Flink集群)进行联动,当数据消费者出现消费主题中的数据发生延迟情况时,Flink集群可以通过向zookeeper注册黑名单,同时通过数据消费者实时从黑名单中获取其中包含的主题,以便网关可以停止向黑名单中包含的主题缓存数据,从而实现将发生延迟情况的主题从所有可用的主题列表中剔除。
在一具体实施方式中,Flink集群中的Flink kafka source会基于flinkAggregateFunction机制,上报延迟情况(lag)到job manager,然后job manager基于全局lag判断是否注册黑名单到zookeeper。
黑名单注册判断逻辑:当单tp lag>min(全局lag平均值,全局lag中位数)*倍数&&单tp lag大于lag绝对值,其中"单tp lag大于lag绝对值"是为了规避此机制过于敏感,"单tp lag>min(全局lag平均值,全局lag中位数)*倍数"用于筛选出头部的lag tp。为了防止黑名单比例过大,黑名单剔除的tp数量上限不得大于全部tp数量的一定比例。
在一示例性的实施方式中,为了实现更加稳定的数据传输,所述Kafka集群包括第一Kafka集群与第二Kafka集群,所述方法还包括:
所述网关实时监测缓存至Kafka集群中的数据的缓存状况,并根据所述缓存状况从所述一Kafka集群与所述第二Kafka集群选择用于缓存数据的Kafka集群。
具体地,所述数据的缓存状况为数据成功缓存至Kafka集群中的次数情况以及数据失败缓存至Kafka集群中的次数情况。
在一具体实施方式中,参考Netflix Hystrix熔断原理,我们在网关层实现了一种动态kafka failover机制,网关可以根据实时的数据缓存状况来计算熔断率,之后,根据熔断率来从所述一Kafka集群与所述第二Kafka集群选择用于缓存数据的Kafka集群。
其中,熔断率可以基于滑动时间窗口来计算,比如,滑动窗口的大小为10,每个窗口中统计1s内成功和失败的次数。
在统计到滑动时间窗口内成功和失败的次数后,根据以下公式计算出熔断率:
熔断率=fail_total/sum_total,其中,fail_total为滑动时间窗口内失败的次数,sum_total为滑动时间窗口内成功的次数。
在得到熔断率后,即可以根据熔断率来从所述一Kafka集群(failover kafka)与所述第二Kafka集群(normal kafka)选择用于缓存数据的Kafka集群。
在为避免极端情况流量全切到failover kafka,熔断率需要有一个上限配置。熔断后的降级策略:normal kafka熔断后尝试切failover kafka,failover kafka如果也熔断的话就切回normal kafka。
在一示例性的实施方式中,所述方法还包括:
所述Flink集群在检测到通过Flink SQL作业消费Kafka集群的主题中的数据出现延迟情况时,将出现消费延迟情况的数据反压至对应的主题中。
具体地,为了保证数据流在系统中传输的稳定性,所述Flink集群在检测到通过Flink SQL作业消费Kafka集群的主题中的数据出现延迟情况时,将出现消费延迟情况的数据反压至对应的主题中,比如,Flink集群检测到消费Kafka集群的Topic b中的数据c出现延迟情况,则Flink集群检会将消费出的出现延迟情况的数据c反压存储至Topic b中。
图4示出了根据本申请实施例的流式数据传输系统的框图,该流式数据传输系统400可以包括:由多个数据采集插件组成的数据上报边缘层401、由网关组成的数据上报网关层402、由Kafka集群组成的数据缓存层403、由Flink集群组成的数据分发层404及由多个终端组成的数据存储层405,其中,
所述数据采集插件,用于从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关,其中,不同的数据流具有的数据流标识不同,每一个数据上报请求中包含的数据具有相同的数据流标识;
所述网关,用于在接收到所述数据上报请求后,将所述数据上报请求中的数据存储至目标请求队列中,其中,具有不同的数据流标识的数据存储的请求队列不同;
所述网关,还用于通过轮询方式从生产者池中确定每一个请求队列对应的目标生产者,并通过所述目标生产者在预设的时间段内将所述目标生产者对应的请求队列中的存储的数据缓存至所述Kafka集群的目标主题中,其中,不同的请求队列对应的主题不同;
所述Flink集群,用于通过多个Flink SQL作业消费Kafka集群的各个主题中缓存的数据,并将消费到的数据分发至目标终端中,其中,每一个Flink SQL作业消费一个主题中缓存的数据。
在一示例性的实施方式中,当所述Flink集群将数据流分发至目标终端hive出现断流情况时,会首先判定所有的StreamFileWriter函数连续两次checkpoint内是否未处理任何数据,在判定所有的StreamFileWriter函数连续两次checkpoint内是否未处理任何数据,StreamingFileCommiter函数会判定发生了断流,之后按照当前时间提交分区,以实现作业推进至下一个处理流程。
在一示例性的实施方式中,当所述Flink集群将数据流分发至目标终端hive时,为了节省空间,可以采用列式存储方式将数据存储至目标终端hive中。
在一示例性的实施方式中,当所述Flink集群将数据流分发至目标终端hive时,为了减少小文件个数,在checkpoint完成后,由Streaming writer的notifyCheckpointComplete方法触发合并操作,向下游发送EndCheckpoint信号;coordinator收到每个writer的EndCheckpoint后,开始进行文件的分组,封装成一个个compactunit广播下游,全部unit发送完之后,再广播EndCompaction;compact operator找到属于自己的任务后开始处理,当收到EndCompaction后,往下游发送分区提交信息,从而实现小文件合并。
在一示例性的实施方式中,所述流式数据传输系统为了可以支持下游增量数据同步,本实施例中,当ods目录中文件生成后,即可开始数据的处理,以增量的方式读取数据文件。
此外,可以通过HDFS的list操作来获取需要读取的文件,且为了避免对NameNode压力过大,采用文件list列表索引(包括文件名和数据条数),这样,下游在获取增量文件列表时,只需要读取索引,即可获取增量文件列表。
本申请中的流式数据传输系统还可以实现索引文件状态被持久化到state中,snapshot中生成.inflight状态临时文件,notifyCheckpointComplete中将文件rename转换成commit正式文件,并提供exactly once语义保证。
本实施例中的流式数据传输系统可以支持用户自定义udf,灵活选择sql中的字段作为udf的入参,在udf内部,用户根据业务场景定制逻辑,返回topic或者broker list。最终sink内部发送到对应的kafka集群和topic。
kakfa sink内部动态加载udf,通过反射机制实时获取对应的broker和topic,同时支持结果的缓存。
在一示例性的实施方式中,本申请中的流式数据传输系统支持sql场景下多库多表场景。具体而言,本申请中的流式数据传输系统支持原生flink cdc source对所有监听到的数据在反序列化时根据sql ddl定义做column转换和解析,以RowData的形式传给下游。此外,在本申请中的流式数据传输系统cdc-source中新增了一种的format方式:changelog bytes序列化方式,该format在将数据反序列化时在不再进行column转换和解析,而是将所有column直接转换为changelog-json二进制传输,外层将该二进制数据直接封装成RowData再传给下游,对下游透明,这样,下游在消费kafka数据的时候可以直接通过changelog-json反序列化进行数据解析。
在一示例性的实施方式中,本申请中的流式数据传输系统还可以在cdc sourceconnector内定义一种新类型的record HeartbeatRecord,此record时间为当前时间。当发现某张表数据停止发送时,定期mock心跳数据进行发送,从而正常推进watermark。
图5示意性示出了根据本申请实施例的适于实现数据传输方法的计算机设备的硬件架构示意图。本实施例中,计算机设备20是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是网关等数据转发设备。如图5所示,计算机设备20至少包括但不限于:可通过系统总线相互通信连接存储器21、处理器22、网络接口23。其中:
存储器21至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备20的内部存储模块,例如该计算机设备20的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备20的外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(FlashCard)等。当然,存储器21还可以既包括计算机设备20的内部存储模块也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备20的操作系统和各类应用软件,例如数据传输方法的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备20的总体操作,例如执行与计算机设备20进行数据交互或者通信相关的控制和处理等。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据。
网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在计算机设备20与其他计算机设备之间建立通信连接。例如,网络接口23用于通过网络将计算机设备20与外部终端相连,在计算机设备20与外部终端之间的建立数据传输通道和通信连接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(GlobalSystem of Mobile communication,简称为GSM)、宽带码分多址(Wideband Code DivisionMultiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图5仅示出了具有部件21-23的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器21中的数据传输方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器22)所执行,以完成本发明。
本实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的数据传输方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中的数据传输方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (11)

1.一种数据传输方法,应用于流式数据传输系统中,所述流式传输系统包括由多个数据采集插件组成的数据上报边缘层、由网关组成的数据上报网关层、由Kafka集群组成的数据缓存层、由Flink集群组成的数据分发层及由多个终端组成的数据存储层,其特征在于,所述方法包括:
所述数据采集插件从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关,其中,不同的数据流具有的数据流标识不同,每一个数据上报请求中包含的数据具有相同的数据流标识;
所述网关在接收到所述数据上报请求后,将所述数据上报请求中的数据存储至目标请求队列中,其中,具有不同的数据流标识的数据存储的请求队列不同;
所述网关通过轮询方式从生产者池中确定每一个请求队列对应的目标生产者,并通过所述目标生产者在预设的时间段内将所述目标生产者对应的请求队列中的存储的数据缓存至所述Kafka集群的目标主题中,其中,不同的请求队列对应的主题不同;
所述Flink集群通过多个Flink SQL作业消费Kafka集群的各个主题中缓存的数据,并将消费到的数据分发至目标终端中,其中,每一个Flink SQL作业消费一个主题中缓存的数据。
2.根据权利要求1所述的数据传输方法,其特征在于,所述流式数据传输系统还包括数据传输管理模块,所述方法还包括:
所述数据传输管理模块根据用户对所述数据源中的待采集数据流的配置信息生成所述待采集数据流的元数据信息,并将所述元数据信息保存至预设的数据库中,其中,所述元数据信息包括所述待采集数据流的数据流标识,所述待采集数据流对应缓存的主题信息、所述待采集数据流分发的终端信息。
3.根据权利要求1所述的数据传输方法,其特征在于,所述数据采集插件从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关包括:
所述数据采集插件通过不同的数据采集进程从数据源中采集不同的数据流,并采用不同的数据上报请求将不同的数据流中的数据上报至所述网关。
4.根据权利要求1所述的数据传输方法,其特征在于,所述方法还包括:
所述网关在检测到数据流中的数据缓存至所述Kafka集群的主题中出现超时情况时,确定出现超时情况的主题中的分区,并在确定出现超时情况的主题中的分区后,停止向出现超时情况的主题中的分区缓存数据。
5.根据权利要求4所述的数据传输方法,其特征在于,所述方法还包括:
所述网关在确定出现超时情况的主题中的分区后,将出现超时情况的主题中的其他分区作为缓存数据流中的数据的分区。
6.根据权利要求1所述的数据传输方法,其特征在于,所述方法还包括:
所述Flink集群在检测到通过Flink SQL作业消费Kafka集群的主题中的数据出现延迟情况时,将出现延迟情况的主题向zookeeper注册为黑名单;
所述网关获取所述黑名单中包含的主题,并停止向所述黑名单中包含的主题缓存数据。
7.根据权利要求1所述的数据传输方法,其特征在于,所述Kafka集群包括第一Kafka集群与第二Kafka集群,所述方法还包括:
所述网关实时监测缓存至Kafka集群中的数据的缓存状况,并根据所述缓存状况从所述一Kafka集群与所述第二Kafka集群选择用于缓存数据的Kafka集群。
8.根据权利要求1所述的数据传输方法,其特征在于,所述方法还包括:
所述Flink集群在检测到通过Flink SQL作业消费Kafka集群的主题中的数据出现延迟情况时,将出现消费延迟情况的数据反压至对应的主题中。
9.一种流式数据传输系统,其特征在于,所述系统包括:由多个数据采集插件组成的数据上报边缘层、由网关组成的数据上报网关层、由Kafka集群组成的数据缓存层、由Flink集群组成的数据分发层及由多个终端组成的数据存储层,其中:
所述数据采集插件,用于从数据源中采集数据流,并采用数据上报请求将采集到的数据上报至所述网关,其中,不同的数据流具有的数据流标识不同,每一个数据上报请求中包含的数据具有相同的数据流标识;
所述网关,用于在接收到所述数据上报请求后,将所述数据上报请求中的数据存储至目标请求队列中,其中,具有不同的数据流标识的数据存储的请求队列不同;
所述网关,还用于通过轮询方式从生产者池中确定每一个请求队列对应的目标生产者,并通过所述目标生产者在预设的时间段内将所述目标生产者对应的请求队列中的存储的数据缓存至所述Kafka集群的目标主题中,其中,不同的请求队列对应的主题不同;
所述Flink集群,用于通过多个Flink SQL作业消费Kafka集群的各个主题中缓存的数据,并将消费到的数据分发至目标终端中,其中,每一个Flink SQL作业消费一个主题中缓存的数据。
10.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时用于实现权利要求1至7任一项所述数据传输方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时用于实现权利要求1至7任一项所述数据传输方法的步骤。
CN202211081555.4A 2022-09-05 2022-09-05 数据传输方法、流式数据传输系统、计算机设备及存储介质 Active CN115473858B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211081555.4A CN115473858B (zh) 2022-09-05 2022-09-05 数据传输方法、流式数据传输系统、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211081555.4A CN115473858B (zh) 2022-09-05 2022-09-05 数据传输方法、流式数据传输系统、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN115473858A true CN115473858A (zh) 2022-12-13
CN115473858B CN115473858B (zh) 2024-03-01

Family

ID=84368795

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211081555.4A Active CN115473858B (zh) 2022-09-05 2022-09-05 数据传输方法、流式数据传输系统、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN115473858B (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
CN110019240A (zh) * 2017-12-29 2019-07-16 中国移动通信集团北京有限公司 一种业务数据交互方法、装置及系统
CN110795257A (zh) * 2019-09-19 2020-02-14 平安科技(深圳)有限公司 处理多集群作业记录的方法、装置、设备及存储介质
CN111970195A (zh) * 2020-08-13 2020-11-20 上海哔哩哔哩科技有限公司 数据传输方法和流式数据传输系统
US10908977B1 (en) * 2019-10-03 2021-02-02 Splunk Inc. Efficient message queuing service
US11086869B1 (en) * 2016-09-26 2021-08-10 Splunk Inc. Data intake and query system gateway

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11086869B1 (en) * 2016-09-26 2021-08-10 Splunk Inc. Data intake and query system gateway
CN110019240A (zh) * 2017-12-29 2019-07-16 中国移动通信集团北京有限公司 一种业务数据交互方法、装置及系统
CN110795257A (zh) * 2019-09-19 2020-02-14 平安科技(深圳)有限公司 处理多集群作业记录的方法、装置、设备及存储介质
US10908977B1 (en) * 2019-10-03 2021-02-02 Splunk Inc. Efficient message queuing service
CN111970195A (zh) * 2020-08-13 2020-11-20 上海哔哩哔哩科技有限公司 数据传输方法和流式数据传输系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
陈霖;: "UNIX内部进程协作机制应用研究", 电脑知识与技术(学术交流), no. 06, pages 1684 - 1687 *

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引擎的小文件合并方法、装置及电子设备

Also Published As

Publication number Publication date
CN115473858B (zh) 2024-03-01

Similar Documents

Publication Publication Date Title
CN110908879B (zh) 埋点数据的上报方法、装置、终端和存储介质
CN107370806B (zh) Http状态码监控方法、装置、存储介质和电子设备
CN111970195B (zh) 数据传输方法和流式数据传输系统
US20150237113A1 (en) Method and system for file transmission
CN111078504A (zh) 一种分布式调用链跟踪方法、装置、计算机设备及存储介质
CN112507029B (zh) 数据处理系统及数据实时处理方法
WO2014166265A1 (en) Method, terminal, cache server and system for updating webpage data
CN111966289B (zh) 基于Kafka集群的分区优化方法和系统
US9596313B2 (en) Method, terminal, cache server and system for updating webpage data
CN112751772B (zh) 数据传输方法和系统
CN110895488B (zh) 任务调度方法及装置
CN111737207B (zh) 展示、归集分布式系统中服务节点的日志的方法和装置
CN112019605B (zh) 数据流的数据分发方法和系统
CN112765103A (zh) 一种文件解析方法、系统、装置及设备
CN115473858A (zh) 数据传输方法和流式数据传输系统
CN112751722B (zh) 数据传输质量监控方法和系统
CN112417050A (zh) 数据同步方法和装置、系统、存储介质及电子装置
CN114900449B (zh) 一种资源信息管理方法、系统及装置
CN112559445B (zh) 数据写入方法及装置
CN112256454B (zh) 消息延时处理方法和系统
CN111601299B (zh) 一种5g架构下信息关联回填系统
CN113032477B (zh) 基于gtid的长距离数据同步方法、装置及计算设备
CN113872814A (zh) 内容分发网络的信息处理方法、装置和系统
CN113360558A (zh) 数据处理方法、数据处理装置、电子设备及存储介质
CN107330089B (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
GR01 Patent grant
GR01 Patent grant