CN111880930A - 一种数据分流方法及*** - Google Patents

一种数据分流方法及*** Download PDF

Info

Publication number
CN111880930A
CN111880930A CN202010681133.5A CN202010681133A CN111880930A CN 111880930 A CN111880930 A CN 111880930A CN 202010681133 A CN202010681133 A CN 202010681133A CN 111880930 A CN111880930 A CN 111880930A
Authority
CN
China
Prior art keywords
channel
event
contained
target event
target
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.)
Withdrawn
Application number
CN202010681133.5A
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.)
Hangzhou Dbappsecurity Technology Co Ltd
Original Assignee
Hangzhou Dbappsecurity 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 Hangzhou Dbappsecurity Technology Co Ltd filed Critical Hangzhou Dbappsecurity Technology Co Ltd
Priority to CN202010681133.5A priority Critical patent/CN111880930A/zh
Publication of CN111880930A publication Critical patent/CN111880930A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3476Data logging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种数据分流方法、装置、设备及存储介质,该方法包括:每个channel均从source中获取当前需要传输的全部event,并从每个所述event中提取该event的数据类型;其中,一个所述source同时与多个channel连接,多个channel与多个sink一一对应连接;每个所述channel均将每个所述event的数据类型分别与自身配置的数据类型进行比对,并确定与自身配置的数据类型相同的event为目标event;每个所述channel均将与自身对应的目标event传输至自身所连接的sink。可见,本申请不仅减少了配置工作和维护成本,且能够节省内存。

Description

一种数据分流方法及***
技术领域
本发明涉及数据采集技术领域,更具体地说,涉及一种数据分流方法及***。
背景技术
flume作为cloudera开发的实时日志收集***,受到了业界的认可与广泛应用。目前很多公司数据平台的采集技术选型均由flume担当,flume也以其优越的性能,简单的配置和清晰的流程受到广泛关注。在数据采集工作中syslog数据是一类普遍见到的数据,syslog数据的采集工作也格外重要,如何简化和优化syslog数据的采集显得尤为突出。
针对syslog数据的采集场景,目前通常为在服务器上针对每一种syslog数据开放一个udp端口,然后再针对每个udp端口配置一份配置文件,对应启动一个flume实现syslog数据的采集,但是实际中服务器一般无法开发多个udp端口,配置文件增多意味着维护成本增加,多个flume运行会占用较多内存(一般一个flume会占用2G内存);也即这种方案增加了配置工作和维护成本,同时会耗费大量的内存。
发明内容
本发明的目的是提供一种数据分流方法及***,减少了配置工作和维护成本,同时能够节省内存。
为了实现上述目的,本发明提供如下技术方案:
一种数据分流方法,包括:
每个channel均从source中获取当前需要传输的全部event,并从每个所述event中提取该event的数据类型;其中,一个所述source同时与多个channel连接,多个channel与多个sink一一对应连接;
每个所述channel均将每个所述event的数据类型分别与自身配置的数据类型进行比对,并确定与自身配置的数据类型相同的event为目标event;
每个所述channel均将与自身对应的目标event传输至自身所连接的sink。
优选的,每个所述channel均将与自身对应的目标event传输至自身所连接的sink,包括:
每个所述channel均将自身对应的目标event放入至自身包含的putlist中,将自身包含的putlist中的目标event放入至自身包含的缓存队列中,将自身包含的缓存队列中的目标event放入至takelist中;
每个所述sink均由与自身连接的channel包含的takelist中取出目标event。
优选的,每个所述channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中之前,还包括:
每个所述channel均判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间,如果是,则执行将自身包含的putlist中的目标event放入至自身包含的缓存队列中的步骤,如果否,则等待指定时间段后返回执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤,直至返回执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤的次数达到预设次数为止。
优选的,每个所述channel均判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间之前,还包括:
每个所述channel均比对自身包含的所述putlist及所述takelist分别包含的目标event的数量,如果自身包含的所述takelist中目标event的数量小于自身包含的所述putlist中目标event的数量,则执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤,否则,执行将自身包含的putlist中的目标event放入至自身包含的缓存队列中的步骤。
优选的,每个所述channel均将自身包含的缓存队列中的目标event放入至takelist中之前,还包括:
每个所述channel均判断自身包含的takelist中是否存在可放入自身对应的目标event的剩余空间,如果是,则执行将自身包含的缓存队列中的目标event放入至takelist中的步骤,如果否,则抛出异常。
优选的,还包括:
如果任意channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中失败,则进行回滚。
优选的,还包括:
如果任意event被对应channel中任意线程进行处理,则对该任意event进行加锁,以禁止对应channel中其他线程对该任意event进行处理。
优选的,每个所述channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中之前,还包括:
每个所述channel为自身对应的目标event打上预先配置的数据标签。
每个所述channel均将与自身对应的目标event传输至所述缓存队列中之后,还包括:
清空自身包含的putlist中所述目标event所占用的空间;
每个所述channel均将与自身对应的目标event传输至所述takelist中之后,还包括:
清空自身包含的takelist中所述目标event所占用的空间
一种数据分流***,包括一个source、多个channel及多个sink,一个所述source同时与多个channel连接,多个channel与多个sink一一对应连接;其中:
每个所述channel均用于:从source中获取当前需要传输的全部event,从每个所述event中提取该event的数据类型,将每个所述event的数据类型分别与自身配置的数据类型进行比对,确定与自身配置的数据类型相同的event为目标event,并将与自身对应的目标event传输至自身所连接的sink;
所述source用于:存储当前需要传输的全部event供所述channel获取;
每个所述sink均用于:获取所连接的channel传输的目标event。
本发明提供了一种数据分流方法、装置、设备及存储介质,该方法包括:每个channel均从source中获取当前需要传输的全部event,并从每个所述event中提取该event的数据类型;其中,一个所述source同时与多个channel连接,多个channel与多个sink一一对应连接;每个所述channel均将每个所述event的数据类型分别与自身配置的数据类型进行比对,并确定与自身配置的数据类型相同的event为目标event;每个所述channel均将与自身对应的目标event传输至自身所连接的sink。本申请中一个source同时与多个channel连接,多个channel与多个sink一一对应连接,且每个channel均具有配置的数据类型,从而每个channel从所连接的source中获取到event后,提取出event的数据类型,进而将其数据类型与自身的数据类型相同的event传输至所连接的sink,实现event的分流;可见,本申请无需针对每种syslog数据均设置对应的udp端口,而是通过多个配置有对应数据类型的channel实现多种数据类型的event、也即syslog数据的分流,从而仅需设置一配置文件实现全部channel对应数据类型的配置、一个flume的运行即可实现分流功能,不仅减少了配置工作和维护成本,且能够节省内存。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种数据分流方法的第一种流程图;
图2为本发明实施例提供的一种数据分流方法中数据流向示意图;
图3为本发明实施例提供的一种数据分流方法的第二种流程图图;
图4为本发明实施例提供的一种数据分流方法的效果示意图;
图5为本发明实施例提供的一种数据分流***的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其示出了本发明实施例提供的一种数据分流方法的流程图,可以包括:
S11:每个channel均从source中获取当前需要传输的全部event,并从每个event中提取该event的数据类型;其中,一个source同时与多个channel连接,多个channel与多个sink一一对应连接。
本发明针对多种syslog数据同时发往服务器的统一端口,如udp514端口,使用flume的syslog dup source无法将不同的数据进行区分的问题,基于自定义的channel解决flume在采集syslog数据时的分流问题,旨在解决多种syslog数据无法开放多个端口分别接收,而多个agent同时启动耗费大量内存的技术问题。
本申请实施例中每个channel对应一种数据类型,也即channel与数据类型一一对应,每个channel从连接的source中获取当前需求传输的全部event后,可以从event中提取到该event的数据类型。其中,source、channel、sink及event均与现有技术中对应概念的含义相同,source可称为数据源,channel可称为数据分流器,sink可称为数据槽,一个source、与该source连接的全部channel及与该全部channel连接的全部sink均包含于同一flume中。
其中,Agent对应一个独立的flume进程,包含source、channel、sink三个组件;flume是一个分布式、可靠、高可用的海量日志收集***,支持在配置文件中定制各类数据发送源,同时,flume提供对数据的简单处理,并写到各种数据接收方的能力;flume作为大数据组件的成员,在数据采集方面有着广泛的用途,数据在flume中的流向如图2所示;event是flume中定义的一个数据单元,由消息头header和消息体body组成,header中可以加入时间戳、数据类型以及其他一些标签,body中用于存放采集的数据。
S12:每个channel均将每个event的数据类型分别与自身配置的数据类型进行比对,并确定与自身配置的数据类型相同的event为目标event。
可以预先设置一份配置文件,该配置文件中包含为每个channel配置的数据类型,从而每个channel在获取到event中的数据类型后,可以判断其与自身配置的数据类型是否相同,如果相同,则确定event为可经channel传输至对应sink的event,否则,确定event无法经channel传输至对应的sink。
S13:每个channel均将与自身对应的目标event传输至自身所连接的sink。
每个channel在确定出可经过自身传输的event后,则可以将确定出的event传输至与自身连接的sink,进而由sink将其传输至相应的目的地。
本申请中一个source同时与多个channel连接,多个channel与多个sink一一对应连接,且每个channel均具有配置的数据类型,从而每个channel从所连接的source中获取到event后,提取出event的数据类型,进而将其数据类型与自身的数据类型相同的event传输至所连接的sink,实现event的分流;可见,本申请无需针对每种syslog数据均设置对应的udp端口,而是通过多个配置有对应数据类型的channel实现多种数据类型的event、也即syslog数据的分流,从而仅需设置一配置文件实现全部channel对应数据类型的配置、一个flume的运行即可实现分流功能,不仅减少了配置工作和维护成本,且能够节省内存。
本发明实施例提供的一种数据分流方法,每个channel均将与自身对应的目标event传输至自身所连接的sink,包括:
每个channel均将自身对应的目标event放入至自身包含的putlist中,将自身包含的putlist中的目标event放入至自身包含的缓存队列中,将自身包含的缓存队列中的目标event放入至takelist中;
每个sink均由与自身连接的channel包含的takelist中取出目标event。
其中,可将event从source传输至sink的事件可称为channel事务,本申请实施例自定义channel事务沿用原生MemoryChannel定义的两个阻塞双端队列LinkedBlockingDeque<Event>takeList(可简称为takelist)、LinkedBlockingDeque<Event>putList(可简称为putlist)及LinkedBlockingDeque<Event>queue(可简称为channel queue,也即为缓存队列)。Channel从所连接的source中取出event会先将其放至putList,然后commit传送到channel queue,channel中存放event的载体就是channelqueue,本实施例中channel queue可以用LinkedBlockingDeque实现,而从channel queue中取出的event会先放入takeList,待输送到sink成功后从channel queue中删除。此处可以看出Channel在flume整个的数据采集中两端分别连接source和sink,起到承上启下的作用。而通过这种方式实现channel中event的传输,能够在channel中具有较多event的情况下也能够有序快速的实现event的传输。
本发明实施例提供的一种数据分流方法,每个channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中之前,还可以包括:
每个channel均判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间,如果是,则执行将自身包含的putlist中的目标event放入至自身包含的缓存队列中的步骤,如果否,则等待指定时间段后返回执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤,直至返回执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤的次数达到预设次数为止。
其中,指定时间段及预设次数均可以根据实际需要设定;在每个channel将自身putlist中目标event放入至缓存队列之前,还可以判断缓存队列中是否存在可供目标event占用的空间,如果是,则将目标event放入至缓存队列中,否则,说明当前缓存队列中未存在足够的供目标event占用的空间,因此待经过指定时间后再次判断缓存队列中是否存在可供目标event占用的空间,从而通过这种方式,保证目标event在缓存队列中的可靠存储。
本发明实施例提供的一种数据分流方法,每个channel均判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间之前,还可以包括:
每个channel均比对自身包含的putlist及takelist分别包含的目标event的数量,如果自身包含的takelist中目标event的数量小于自身包含的putlist中目标event的数量,则执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤,否则,执行将自身包含的putlist中的目标event放入至自身包含的缓存队列中的步骤。
为了进一步保证缓存队列中具有足够的空间实现event的有效存储,本申请在判断自身缓存队列中是否存在足够的剩余空间之前,还可以比对自身包含的putlist及takelist分别包含的event的数量,如果putlist包含的event的数量更多,则说明向channel中放的数据量比取的数据量多,因此需要判断缓存队列中是否有足够的剩余空间实现event的存放,否则,说明向channel中放的数据量不比取的数据量多,因此可以直接将event放入自身包含的缓存队列中。另外,在判断缓存队列是否有足够的剩余空间时可以通过信号量来实现该判断。
本发明实施例提供的一种数据分流方法,每个channel均将自身包含的缓存队列中的目标event放入至takelist中之前,还可以包括:
每个channel均判断自身包含的takelist中是否存在可放入自身对应的目标event的剩余空间,如果是,则执行将自身包含的缓存队列中的目标event放入至takelist中的步骤,如果否,则抛出异常。
为了实现event由缓存队列到takelist的有效传输,在将自身包含的缓存队列中的event放入至takelist中之前,还可以判断自身包含的takelist是否存在可放入自身对应event的剩余空间,如果是,则直接将自身的缓存队列中的event放入至takelist中,如果否,则抛出异常,从而使得外界能够基于此及时进行相应的处理。
本发明实施例提供的一种数据分流方法,还包括:
如果任意channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中失败,则进行回滚。
在channel包含的putlist中的event放入至自身包含的缓存队列时,如果失败,也即如果未成功将event从putlist传输至缓存队列中,则进行回滚,以通过回滚重新将event从putlist传输至缓存队列中,保证了event从putlist到缓存队列的有效传输;其中,回滚即为将从putlist中取出的event重新放回putlist中。
本发明实施例提供的一种数据分流方法,还包括:
如果任意event被对应channel中任意线程进行处理,则对该任意event进行加锁,以禁止对应channel中其他线程对该任意event进行处理。
由于每个channel中都具有多个可以对event进行处理的线程,因此本申请在任意event被所在channel中任意线程开始进行处理后,则对该event进行加锁操作,从而避免其他线程再次对该event进行处理,有效避免了对同一event的重复操作。
本发明实施例提供的一种数据分流方法,每个channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中之前,还包括:
每个channel为自身对应的目标event打上预先配置的数据标签。
本实施例中channel对于自身传输的event,可以为该event打上预先配置的数据标签,此处数据标签可以为表示event的类型或者内容等的标签,如ruleName、event包含的关键字等,从而针对不同的event提供相应的打标签的功能,从而进一步完善了数据处理功能。
本发明实施例提供的一种数据分流方法,每个channel均将与自身对应的目标event传输至缓存队列中之后,还包括:
清空自身包含的putlist中目标event所占用的空间;
每个channel均将与自身对应的目标event传输至takelist中之后,还包括:
清空自身包含的takelist中目标event所占用的空间。
本申请中在channel将与自身对应的目标event传输至缓存队列中之后,会立即清空自身包含的putlist中目标event所占用的空间;而在将与自身对应的目标event传输至takelist中之后,会立即清空自身包含的takelist中目标event所占用的空间;从而通过这种方式能够及时清空putlist及缓存队列中的无效数据,进而保证利用putlist及缓存队列实现后续数据的有效存储。
需要说明的是,本实施例中的Channel可以通过内部的MemoryTransaction类来控制事务,而事务的流程主要是依赖其内部的doPut()、doTake()、doCommit()、doRollback()四个方法实现。其中,BasicTransactionSemantics类是flume原生的抽象事务基类,实现了事务的基本语法,为了方便开发者实现自己的事务而定义,本发明通过继承BasicTransactionSemantics类实现自己的Transaction(事务,包括将event从source传输至sink的整个过程)。
具体来说,doPut()方法的作用是从指定的source中获得event放入指定的channel中;原生MemoryChannel中的doPut()方法直接将source中所有的event放入Channel的putlist中,不区分数据来源和类型;本发明在doPut()中进行改进,使其能够根据配置文件中的数据类型对数据进行分流。
doTake()方法用于从channel的缓存队列中获取数据(数据即为event),将数据存放在takeList中,sink会从takelist中取走channel中的数据;在doTake()中首先会判断takelist是否有剩余空间,没有剩余空间会抛出异常,有剩余空间才会从缓存队列中取出event放入takelist中。
doCommit()对应一个事务的提交,首先判断putlist与takelist的相对大小,如果takelist小,说明向该Channel放的数据比取的数据要多,所以需要判断该Channel是否有空间来放,判断的方式是:首先通过信号量来判断是否还有剩余空间,然后判断在给定的keepAlive时间内能否获取到充足的空间;如果上面的两个判断都通过,则把putlist中的event放到该channel中的缓存队列中,最后清空本次事务中用到的putlist与takelist,释放资源。
doRollback()方法是当一个事务提交失败时会进行回滚,调用本方法首先会把takelist中的event放回到channel中的缓存队列中,然后清空putlist。
综上在本发明中数据的完整流向是:source->putlist->queue->takelist->sink。
在一种具体应用场景中,本申请公开的技术方案可以如图3所示,通过给用户提供可配的参数dataType(数据类型)来实现,用户在配置文件中给每个channel配置dataType指定数据类型,然后doPut()方法中会从syslog数据中对数据进行拆分,提取出数据类型,进而和配置文件中dataType的值进行对比,如果一致则说明该数据是所需的数据类型,进而放入缓存队列中。
另外,在一种实际场景中,数据类型可以包括流量数据及告警数据,这两类数据都有securityEyeLogType字段,流量数据其值为1,告警数据其值为2;将上面的字段配置到header中,自定义channel就可以根据上面1、2这两个值去完成分流工作;在另一种场景中数据类型还可以包括隐患数据、事件数据、日志数据等。
本发明最终实现的效果可以如图4所示,其是一种多channel多sink的形式,在flume的配置文件中配置多个channel,每个channel根据与之关联的dataType参数,筛选与之匹配的syslog数据,将筛选出数据存放在各自的缓存队列中,sink通过doTake()从channel中获取数据,最终实现syslog数据的分流。由此,本发明将极大的方便syslog数据分流的采集场景需求,减少flume配置文件,减少开发量。另外,本发明可以应用于有分流要求、接收端口固定、节约内存的syslog数据采集中,并且自定义的channel作为一种数据中转的通道,可以前面接各类数据源,并不限于syslog数据源,后面可以根据业务需求sink到不同的介质中,如kafka、elasticsearch、HDFS等。
另外,本发明基于flume原生的MemoryChannel进行开发,保留了MemoryChannel中所有的可配参数,保持了MemoryChannel高效、快速的优点;增加了用于类型判断和分发数据的可配参数,实现将不同数据根据类型放进对应的channel中;能够满足多线程的场景的使用;针对不同的数据提供对数据进行打标签的配置参数。
在一种具体应用场景中,本发明实施例提供的上述技术方案可以通过下面步骤进行验证:
(1)在一台服务器上正确安装flume,保证flume能够正常运行;
(2)配置flume的配置文件,根据实际需求改变ip、端口等信息,配置文件命名为test_distribute_syslog.properties;
(3)如果采集监听514端口,则需要开启514端口,可以使用命令:iptables-IINPUT-p udp-m udp--dport 514-j ACCEPT实现;同时开启flume采集程序,可以使用命令:nohup flume-ng agent--conf conf--conf-file conf/test_distribute_syslog.properties--nameagent-Dflume.root.logger=INFO,con sole 1>/dev/null 2>&1&实现;
(4)在sink的kafka上建立topic,在采集所在的服务器上使用nc-uv ip(采集所在服务器的IP):514命令轮流发送模拟数据,模拟数据的格式可以根据配置文件配置的数据类型定义如下:
数据1:
IotRtaRiskData~192.168.12.3~dsad~Mon Nov 25 17:11:15CST 2019
数据2:
IotRtaDevData~192.168.12.3~dahua~Mon Nov 25 17:11:15CST 2019~杭州~经度~纬度
数据3:
ICSDevData~~crestron~6~~171.120.231.81~41795~Multimedia~~~~~~~~~~0~~crestron~~~快思聪~~~中国~山西~太原~37.857014~112.549248~2018-11-0122:20:59
数据4:
<16>November 08 15:05:27 2019dbapp APT~2~1~2019-11-0815:05:02~117.136.93.177:8813~172.16.145.24:82~非法数据传输~非法数据传送~在时间段[2019-11-08 15:03:03至2019-11-08 15:05:02],发送数据7014bytes,接收数据131111bytes~低~1911081505029960320~~~~~~5~0~0:24:ac:f0:43:48~3c:8c:40:2:fc:10~0~~~~~尝试
(5)查看sink的kafka对应的topic应该会有对应的数据。
本发明实施例还提供了一种数据分流***,可以包括一个source、多个channel及多个sink,一个source同时与多个channel连接,多个channel与多个sink一一对应连接;可以如图5所示(以channel及sink均为三个进行示意);其中:
每个channel均用于:从source中获取当前需要传输的全部event,从每个event中提取该event的数据类型,将每个event的数据类型分别与自身配置的数据类型进行比对,确定与自身配置的数据类型相同的event为目标event,并将与自身对应的目标event传输至自身所连接的sink;
source用于:存储当前需要传输的全部event供channel获取;
每个sink均用于:获取所连接的channel传输的目标event。
需要说明的是,本发明实施例提供的一种数据分流***中相关部分的说明请参见本发明实施例提供的一种数据分流方法中对应部分的详细说明,在此不再赘述。另外,本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种数据分流方法,其特征在于,包括:
每个channel均从source中获取当前需要传输的全部event,并从每个所述event中提取该event的数据类型;其中,一个所述source同时与多个channel连接,多个channel与多个sink一一对应连接;
每个所述channel均将每个所述event的数据类型分别与自身配置的数据类型进行比对,并确定与自身配置的数据类型相同的event为目标event;
每个所述channel均将与自身对应的目标event传输至自身所连接的sink。
2.根据权利要求1所述的方法,其特征在于,每个所述channel均将与自身对应的目标event传输至自身所连接的sink,包括:
每个所述channel均将自身对应的目标event放入至自身包含的putlist中,将自身包含的putlist中的目标event放入至自身包含的缓存队列中,将自身包含的缓存队列中的目标event放入至takelist中;
每个所述sink均由与自身连接的channel包含的takelist中取出目标event。
3.根据权利要求2所述的方法,其特征在于,每个所述channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中之前,还包括:
每个所述channel均判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间,如果是,则执行将自身包含的putlist中的目标event放入至自身包含的缓存队列中的步骤,如果否,则等待指定时间段后返回执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤,直至返回执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤的次数达到预设次数为止。
4.根据权利要求3所述的方法,其特征在于,每个所述channel均判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间之前,还包括:
每个所述channel均比对自身包含的所述putlist及所述takelist分别包含的目标event的数量,如果自身包含的所述takelist中目标event的数量小于自身包含的所述putlist中目标event的数量,则执行判断自身包含的缓存队列中是否存在可放入自身对应的目标event的剩余空间的步骤,否则,执行将自身包含的putlist中的目标event放入至自身包含的缓存队列中的步骤。
5.根据权利要求4所述的方法,其特征在于,每个所述channel均将自身包含的缓存队列中的目标event放入至takelist中之前,还包括:
每个所述channel均判断自身包含的takelist中是否存在可放入自身对应的目标event的剩余空间,如果是,则执行将自身包含的缓存队列中的目标event放入至takelist中的步骤,如果否,则抛出异常。
6.根据权利要求5所述的方法,其特征在于,还包括:
如果任意channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中失败,则进行回滚。
7.根据权利要求6所述的方法,其特征在于,还包括:
如果任意event被对应channel中任意线程进行处理,则对该任意event进行加锁,以禁止对应channel中其他线程对该任意event进行处理。
8.根据权利要求7所述的方法,其特征在于,每个所述channel将自身包含的putlist中的目标event放入至自身包含的缓存队列中之前,还包括:
每个所述channel为自身对应的目标event打上预先配置的数据标签。
9.根据权利要求8所述的方法,其特征在于,每个所述channel均将与自身对应的目标event传输至所述缓存队列中之后,还包括:
清空自身包含的putlist中所述目标event所占用的空间;
每个所述channel均将与自身对应的目标event传输至所述takelist中之后,还包括:
清空自身包含的takelist中所述目标event所占用的空间。
10.一种数据分流***,其特征在于,包括一个source、多个channel及多个sink,一个所述source同时与多个channel连接,多个channel与多个sink一一对应连接;其中:
每个所述channel均用于:从source中获取当前需要传输的全部event,从每个所述event中提取该event的数据类型,将每个所述event的数据类型分别与自身配置的数据类型进行比对,确定与自身配置的数据类型相同的event为目标event,并将与自身对应的目标event传输至自身所连接的sink;
所述source用于:存储当前需要传输的全部event供所述channel获取;
每个所述sink均用于:获取所连接的channel传输的目标event。
CN202010681133.5A 2020-07-15 2020-07-15 一种数据分流方法及*** Withdrawn CN111880930A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010681133.5A CN111880930A (zh) 2020-07-15 2020-07-15 一种数据分流方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010681133.5A CN111880930A (zh) 2020-07-15 2020-07-15 一种数据分流方法及***

Publications (1)

Publication Number Publication Date
CN111880930A true CN111880930A (zh) 2020-11-03

Family

ID=73154519

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010681133.5A Withdrawn CN111880930A (zh) 2020-07-15 2020-07-15 一种数据分流方法及***

Country Status (1)

Country Link
CN (1) CN111880930A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113468259A (zh) * 2021-09-01 2021-10-01 北京华品博睿网络技术有限公司 一种数据实时采集入库方法及***

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648722A (zh) * 2016-05-10 2017-05-10 深圳前海信息技术有限公司 基于大数据的Flume接收端数据处理方法和装置
CN110989935A (zh) * 2019-12-06 2020-04-10 中盈优创资讯科技有限公司 Flume***的数据处理、传输方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648722A (zh) * 2016-05-10 2017-05-10 深圳前海信息技术有限公司 基于大数据的Flume接收端数据处理方法和装置
CN110989935A (zh) * 2019-12-06 2020-04-10 中盈优创资讯科技有限公司 Flume***的数据处理、传输方法及装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
HYUNBAR: "flume 进阶", pages 1 - 5, Retrieved from the Internet <URL:https://www.cnblogs.com/hyunbar/p/11812680.html> *
旭COOLER: "Flume进阶", pages 2 - 11, Retrieved from the Internet <URL:https://blog.csdn.net/weixin_43799054/article/details/105197048> *
来自遥远的水星: "Flume(三)【进阶】", pages 1 - 16, Retrieved from the Internet <URL:https://www.cnblogs.com/wh984763176/p/13252441.html> *
风浪: "Flume数据传输事务分析[转]", Retrieved from the Internet <URL:https://www.cnblogs.com/whtydn/p/4384199.html> *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113468259A (zh) * 2021-09-01 2021-10-01 北京华品博睿网络技术有限公司 一种数据实时采集入库方法及***

Similar Documents

Publication Publication Date Title
CN109582472B (zh) 一种微服务处理方法及设备
US20020120738A1 (en) Distributed data processing system and error analysis information saving method appropriate therefor
US20140067905A1 (en) Runtime co-location of executing logic and frequently-accessed application data
CN107181679A (zh) 一种端口绑定实现方法及装置
CN110908879A (zh) 埋点数据的上报方法、装置、终端和存储介质
CN110109872B (zh) 一种遥感卫星异构数据统一存储管理装置
CN107046508A (zh) 报文接收方法及网络设备
CN109981403A (zh) 虚拟机网络数据流量监控方法及装置
CN106060088A (zh) 一种服务管理方法及装置
US7979867B2 (en) Managing a device in a distributed file system, using plug and play
CN110389933B (zh) 一种进程间的日志管理方法及装置
CN106331065A (zh) 一种用于具有服务容器的主机***的代理应用以及***
US8799546B2 (en) Method and apparatus for monitoring single board running state
CN112383452B (zh) 基于dpdk框架的dds数据传输诊断方法及***
CN107517110A (zh) 一种分布式***中单板配置自恢复方法及装置
CN113672411B (zh) 一种网络设备虚拟化驱动适配层的实现方法和装置
WO2020063550A1 (zh) 策略决策方法及装置、***、存储介质、策略决策单元及集群
CN106021358A (zh) 一种异常信息记录方法及***
CN108712308B (zh) 虚拟网络中检测网络设备的方法和装置
CN109683818B (zh) 一种数据存储方法、设备及存储介质
CN104991811A (zh) 隔离***切换时进程运行状态的调整方法以及智能终端
CN110213309A (zh) 一种绑定关系管理的方法、设备及存储介质
CN114025018A (zh) 数据处理方法、装置、网络设备及计算机可读存储介质
CN110505516A (zh) 一种投屏控制方法、装置和***
CN111880930A (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
WW01 Invention patent application withdrawn after publication

Application publication date: 20201103

WW01 Invention patent application withdrawn after publication