CN109992469B - 一种合并日志的方法及装置 - Google Patents
一种合并日志的方法及装置 Download PDFInfo
- Publication number
- CN109992469B CN109992469B CN201711489592.8A CN201711489592A CN109992469B CN 109992469 B CN109992469 B CN 109992469B CN 201711489592 A CN201711489592 A CN 201711489592A CN 109992469 B CN109992469 B CN 109992469B
- Authority
- CN
- China
- Prior art keywords
- logs
- cache
- log
- persistent
- persistent cache
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 230000002085 persistent effect Effects 0.000 claims abstract description 247
- 230000003362 replicative effect Effects 0.000 claims abstract description 15
- 230000009471 action Effects 0.000 claims description 18
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 4
- 239000000470 constituent Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
- G06F11/0778—Dumping, i.e. gathering error/state information after a fault for later diagnosis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
- G06F11/0787—Storage of error reports, e.g. persistent data storage, storage using memory protection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
- G06F11/3082—Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting the data filtering being achieved by aggregating or compressing the monitored data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种合并日志的方法及装置,其中,该方法包括将接收到的日志复制性写入设置的非持久化缓存和持久化缓存中,其中,非持久化缓存对日志的缓存时长小于持久化缓存对日志的缓存时长。在非持久化缓存中查找具有相同字段的日志,并从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至持久化缓存中。本发明实施例通过将接收到的日志复制性的写入设置的非持久化缓存和持久化缓存,从而可以避免后续在获取日志时将大量的获取请求直接分配到持久化缓存中,以减少持久化缓存的日志处理压力。并且,将具有相同字段的日志进行合并还可以有效地节约日志的存储空间,并方便后续对日志的集中管理。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种合并日志的方法及装置。
背景技术
日志在计算机***中是一个非常广泛的概念,任何程序(如操作***内核、各种应用服务器等等)都有可能输出日志。虽然日志的内容、规模和用途各不相同,但是,其总体的功能是记录软件运行状态,存储***产生的事件信息。
随着计算机技术的不断发展,目前的日志量越来越多很大,特别是在日志回溯规则很多的时候(例如同一日志的回溯规则包括每隔5分钟或者1小时或者5小时进行日志回溯),需要不断的从存储日志的缓存数据库中获取日志,由于持久化缓存的性能较差,因此这会对持久化缓存数据库造成很大的压力,从而容易影响日志处理***对日志的处理性能。因此,如何为日志的缓存和处理提供足够大的灵活性以及良好的伸缩性是目前面临的较大的挑战。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的合并日志的方法及装置。
依据本发明的一方面,提供了一种合并日志的方法,包括:
将接收日志复制性写入设置的非持久化缓存和持久化缓存中,其中,所述非持久化缓存对日志的缓存时长小于所述持久化缓存对日志的缓存时长;
在所述非持久化缓存中查找具有相同字段的日志;
从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至所述持久化缓存中。
可选地,若在所述非持久化缓存中未查找到具有相同字段的日志,则继续从所述持久化缓存中查找具有相同字段的日志。
可选地,所述将接收日志复制性写入设置的非持久化缓存和持久化缓存之前,还包括:设置第一级缓存和第二级缓存作为非持久化缓存,设置第三级缓存作为持久化缓存。
可选地,在所述非持久化缓存中查找具有相同字段的日志,包括:
依次从所述第一级缓存、所述第二级缓存中查找具有相同字段的日志。
可选地,所述第一级缓存包括redis cluster,所述第二级缓存包括aerospike,所述第三级缓存包括hbase。
可选地,所述方法应用于kafka***,所述将接收日志复制性写入设置的非持久化缓存和持久化缓存中,包括:
将接收日志中具有相同字段的日志分配到基于所述kafka***中的同一worker行程中,其中,所述字段包括用户ID或者用户其他唯一标识key;
各worker行程将分配到的日志复制性写入所述非持久化缓存和所述持久化缓存中。
可选地,所述将接收日志中具有相同字段的日志分配到基于所述kafka***中的同一worker行程中,包括:
采用flink keyby操作将具有相同字段的日志分配到基于所述kafka***中的同一worker行程中。
可选地,在所述非持久化缓存中查找具有相同字段的日志,包括:
到达预置回溯时间时启动回溯操作,并在所述非持久化缓存中查找具有相同字段的日志。
可选地,所述方法还包括:
到达预置回溯时间并启动回溯操作时,判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长;
若是,直接从所述持久化缓存中查找具有相同字段的日志。
可选地,所述将接收日志复制性写入设置的非持久化缓存和持久化缓存中,包括:
接收日志并为所述日志添加时间戳,将携带时间戳的日志复制性写入设置的非持久化缓存和持久化缓存中。
可选地,所述到达预置回溯时间并启动回溯操作时,判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长,包括:
到达预置回溯时间并启动回溯操作时,依据日志的时间戳判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长。
可选地,所述满足预置回溯条件的多种日志包括:
完整session动作中多个组成对象所对应的日志,其中,所述完整session动作中的多个组成对象依据业务需求确定得到。
可选地,所述方法还包括:若从查找到的相同字段的日志中无法获取满足预置回溯条件的多种日志,依据查找到的相同字段的日志建立topic,并为建立的topic设置最大回溯时间;
在达到所述最大回溯时间时从所述非持久化缓存和持久化缓存中查找是否存在与topic中的日志字段相同、且满足预置回溯条件的多种日志;
若是,合并具有相同字段且满足预置回溯条件的多种日志,并将合并后的日志缓存至所述持久化缓存中。
依据本发明的另一方面,还提供了一种合并日志的装置,包括:
写入模块,适于将接收日志复制性写入设置的非持久化缓存和持久化缓存中,其中,所述非持久化缓存对日志的缓存时长小于所述持久化缓存对日志的缓存时长;
查找模块,适于在所述非持久化缓存中查找具有相同字段的日志;
合并模块,适于从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至所述持久化缓存中。
可选地,所述查找模块还适于:
若在所述非持久化缓存中未查找到具有相同字段的日志,则继续从所述持久化缓存中查找具有相同字段的日志。
可选地,所述装置还包括:
设置模块,适于在所述写入模块将接收日志复制性写入设置的非持久化缓存和持久化缓存之前,设置第一级缓存和第二级缓存作为非持久化缓存,设置第三级缓存作为持久化缓存。
可选地,所述查找模块还适于:
依次从所述第一级缓存、所述第二级缓存中查找具有相同字段的日志。
可选地,所述第一级缓存包括redis cluster,所述第二级缓存包括aerospike,所述第三级缓存包括hbase。
可选地,所述装置应用于kafka***,所述写入模块还适于:
将接收日志中具有相同字段的日志分配到基于所述kafka***中的同一worker行程中,其中,所述字段包括用户ID或者用户其他唯一标识key;
各worker行程将分配到的日志复制性写入所述非持久化缓存和所述持久化缓存中。
可选地,所述写入模块还适于:
采用flink keyby操作将具有相同字段的日志分配到基于所述kafka***中的同一worker行程中。
可选地,所述查找模块还适于:
到达预置回溯时间时启动回溯操作,并在所述非持久化缓存中查找具有相同字段的日志。
可选地,所述装置还包括:
判断模块,适于到达预置回溯时间并启动回溯操作时,判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长;
若是,所述查找模块直接从所述持久化缓存中查找具有相同字段的日志。
可选地,所述写入模块还适于:
接收日志并为所述日志添加时间戳,将携带时间戳的日志复制性写入设置的非持久化缓存和持久化缓存中。
可选地,所述判断模块还适于:
到达预置回溯时间并启动回溯操作时,依据日志的时间戳判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长。
可选地,所述满足预置回溯条件的多种日志包括:
完整session动作中多个组成对象所对应的日志,其中,所述完整session动作中的多个组成对象依据业务需求确定得到。
可选地,所述装置还包括:
建立模块,适于若所述合并模块从查找到的相同字段的日志中无法获取满足预置回溯条件的多种日志,依据查找到的相同字段的日志建立topic,并为建立的topic设置最大回溯时间;
所述查找模块在达到所述最大回溯时间时从所述非持久化缓存和持久化缓存中查找是否存在与topic中的日志字段相同、且满足预置回溯条件的多种日志;
若是,所述合并模块合并具有相同字段且满足预置回溯条件的多种日志,并将合并后的日志缓存至所述持久化缓存中。
依据本发明的再一方面,还提供了一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行根据上文任意实施例中的合并日志的方法。
依据本发明的又一方面,还提供了一种计算机存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行根据上文任意实施例中的合并日志的方法。
在本发明实施例中,当接收到日志时,将接收到的日志复制性写入设置的非持久化缓存和持久化缓存中,其中,非持久化缓存对日志的缓存时长小于持久化缓存对日志的缓存时长。写入日志之后还可以在非持久化缓存中查找具有相同字段的日志,并从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至持久化缓存中。由此,本发明实施例通过设置非持久化缓存和持久化缓存,并将接收到的日志复制性的写入设置的非持久化缓存和持久化缓存,从而可以避免后续在获取日志时将大量的获取请求直接分配到持久化缓存中,以减少持久化缓存的日志处理压力。进一步地,将具有相同字段的日志进行合并还可以有效地节约日志的存储空间,并方便后续对日志的集中管理。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的合并日志的方法的流程示意图;
图2示出了根据本发明另一个实施例的合并日志的方法的流程示意图;
图3示出了根据本发明一个实施例的合并日志的装置的结构示意图;
图4示出了根据本发明另一个实施例的合并日志的装置的结构示意图;
图5示出了用于执行根据本发明的合并日志的方法的计算设备的框图;以及
图6示出了用于保持或者携带实现根据本发明的合并日志的方法的程序代码的存储单元。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提供了一种合并日志的方法,该方法可以应用在kafka***中,Kafka是一种高吞吐量的分布式发布订阅消息***,它可以处理消费者规模的网站中的所有动作流数据,kafka开发的主要目标是构建一个用来处理海量日志、用户行为和网站运营统计等的数据处理框架。图1示出了根据本发明一个实施例的合并日志的方法的流程示意图。参见图1,该方法至少包括步骤S102至步骤S106。
步骤S102,将接收日志复制性写入设置的非持久化缓存和持久化缓存中,其中,非持久化缓存对日志的缓存时长小于持久化缓存对日志的缓存时长。
在该步骤中,将日志复制性的写入设置的非持久化缓存和持久化缓存中指的是在接收到的一份日志后,不仅会将该日志写入设置的非持久化缓存,还会将该日志写入设置的持久化缓存中。写入日志的方式可以是同时写入两类缓存(即非持久化缓存和持久化缓存),或者先写入一类缓存,再写入另一类缓存中,本发明实施例对此不做具体限定。
步骤S104,在非持久化缓存中查找具有相同字段的日志。
在该步骤中,具有相同字段的日志指的是日志内容虽然不同(或者相同),但其具有相同的字段。其中,字段可以包括用户ID,还可以包括用户其他唯一标识key等。
步骤S106,从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至持久化缓存中。
在本发明实施例中,当接收到日志时将接收到的日志复制性写入设置的非持久化缓存和持久化缓存中,其中,非持久化缓存对日志的缓存时长小于持久化缓存对日志的缓存时长。写入日志之后还可以在非持久化缓存中查找具有相同字段的日志,并从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至持久化缓存中。由此,本发明实施例通过设置非持久化缓存和持久化缓存,并将接收到的日志复制性的写入设置的非持久化缓存和持久化缓存,从而可以避免后续在获取日志时将大量的获取请求直接分配到持久化缓存中,以减少持久化缓存的日志处理压力。进一步地,将具有相同字段的日志进行合并还可以有效地节约日志的存储空间,并方便后续对日志的集中管理。
参见上文步骤S102,在本发明一实施例中,在将接收日志复制性写入设置的非持久化缓存和持久化缓存之前还需要先设置非持久化缓存和持久化缓存两类缓存。例如,可以设置第一级缓存和第二级缓存作为非持久化缓存,并且设置第三级缓存作为持久化缓存。其中,第一级缓存可以采用redis cluster(即Redis集群),Redis是一个开源的Key-Value数据库,并提供多种语言的API(Application Program Interface,应用程序接口)。第二级缓存可以采用aerospike数据库,其是一个分布式可扩展的NoSql(Not Only SQL,非关系型数据库)。第三级缓存可以采用hbase数据库,其是一个分布式的、面向列的开源数据库。此处的各级缓存采用的数据库仅仅是示意性的,还可以包括其他类型的数据库,本发明实施例对此不做具体限定。
在本发明实施例中,非持久化缓存对日志的缓存时长可以远远小于持久化缓存对日志的缓存时长。例如,非持久化缓存的缓存时长为1小时、2小时等等,而持久化缓存的缓存时长为10天、20天等等,或者还可以对持久化缓存的缓存时长不设置具体时间,即缓存至持久化缓存中的日志只要不进行人为的删除,其日志可以一直保存。若非持久化缓存包括第一级缓存和第二级缓存,那么可以分别为第一级缓存和第二级缓存设置相应的缓存时长,这两级缓存的缓存时长可以相同,也可以不同。例如,第一级缓存和第二级缓存的缓存时长均为1小时,那么两级缓存中的日志每隔1小时就会更新一次,即删除原来缓存的日志,并继续缓存新接收到的日志。若持久化缓存包含第三级缓存,其缓存时长为10天,同理,第三级缓存中的日志每隔10天更新一次,但是,若第三级缓存没有配置缓存时长,那么其中的日志能够永久保存,当然用户可以人为删除持久化缓存中的日志。本发明实施例对非持久化缓存和持久化缓存的缓存时间不做具体限定。
在本发明实施例中,将接收到的日志缓存在各级数据库中而并非是***内存,主要原因在于若将日志保存在***内存中,那么当***重新启动时内存中的日志有可能会丢失,即在***重启时之前内存中缓存的日志都会miss掉,从而仅仅剩下持久化缓存(如hbase数据库)中的日志。当后续有业务使用日志时只能从持久化缓存中获取日志,这可能使得持久化缓存的处理性能无法跟上业务的需求。通过设置非持久化缓存和持久化缓存,如第一级缓存、第二级缓存以及第三级缓存,当***重启之后各级缓存中的日志不会丢失,并且各级缓存中的日志可以满足各种业务需求,避免了增加持久化缓存的日志处理压力。
参见上文步骤S104,在本发明一实施例中,若非持久化缓存包括第一级缓存和第二级缓存。那么,在非持久化缓存中查找具有相同字段的日志时,可以依次从第一级缓存、第二级缓存中查找具有相同字段的日志,即先从第一级缓存中查找是否具有相同字段的日志,若是,则可以从相同字段的日志中获取满足预置回溯条件的多种日志,若否,再从第二级缓存中查找具有相同字段的日志。当然,若第二级缓存中仍然没有查找到具有相同字段的日志,还可以继续从持久化缓存(如第三级缓存)中查找具有相同字段的日志。
在本发明一实施例中,在非持久化缓存中查找具有相同字段的日志的过程即对缓存的日志的回溯过程。当到达预置的回溯时间并开始启动回溯操作(即join操作)时,在非持久化缓存中查找具有相同字段的日志。其中,预置的回溯时间可以是5分钟、1小时、5小时等等时长,本发明实施例对此不做具体的限定。
在该实施例中,当到达预置回溯时间并启动回溯操作时,还可以先判断回溯时间与日志写入时间差是否超过非持久化缓存的缓存时长,若是,则可以直接从持久化缓存中查找具有相同字段的日志。由于非持久化缓存的缓存时间较短,即日志在其中的存储时间较短,当达到预置回溯时间时需要回溯的日志可能已经不在非持久化缓存中了,因此,当判断回溯时间与日志写入时间差超过非持久化缓存的缓存时长时,可以直接从持久化缓存中查找具有相同字段的日志,以减少不必要的操作流程,从而提高回溯效率。
其中,判断回溯时间与日志写入时间差是否超过非持久化缓存的缓存时长时,可以依据非持久化缓存中日志的时间戳判断回溯时间与日志写入时间差是否超过非持久化缓存的缓存时长。日志的时间戳可以是在接收到日志之后为日志添加的时间戳,进而将携带时间戳的日志复制性写入设置的非持久化缓存和持久化缓存中。
参见上文步骤S106,在本发明实施例中,满足预置回溯条件的多种日志可以是完整session动作中多个组成对象所对应的日志。其中,完整session动作中的多个组成对象依据业务需求确定得到。例如,在业务1中,一次完整的session动作可以包括用户流量的竞价、展示、点击操作,其中竞价、展示、点击操作即为业务1完整session动作中的三个组成对象。业务2中,一次完整的session动作可以包括用户流量的竞价、展示,而不包括点击操作,其中竞价、展示即为业务2完整session动作中的两个组成对象。由此,不同的业务需求对应的完整session动作也是不相同的。
在该实施例中,如果从查找到的相同字段的日志中无法获取满足预置回溯条件的多种日志。此时,可以将不满足预置回溯条件的多种日志作为特殊日志类型来处理,即依据查找到的相同字段的日志建立topic,并为建立的topic设置最大回溯时间。并在达到最大回溯时间时从非持久化缓存和持久化缓存中查找是否存在与topic中的日志字段相同、且满足预置回溯条件的多种日志,若存在,则合并具有相同字段且满足预置回溯条件的多种日志,并将合并后的日志缓存至持久化缓存中。其中,kafka***可以利用topic对日志进行分类管理,一个业务可以申请多个topic,并且,一个topic的日志也可以被多个业务共享。
例如,上文提及的业务1中,在回溯过程中仅仅可以查找到用户A流量竞价、展示对应的日志,而没有查找到用户A的点击操作对应的日志,即没有回溯成功。此时,可以依据查找到的用户A的日志建立topic,并为建立的topic设置最大回溯时间,例如设置的最大回溯时间为5小时,那么在5小时之后从非持久化缓存和持久化缓存中再次查找是否存在用户A流量的竞价、展示、点击操作对应的日志,如果存在,合并查找到的日志,并将合并后的日志缓存至持久化缓存中。
此处需要说明的是,对于大部分的回溯操作是秒级就能回溯完成的,设置的最大回溯时间指的是业务端可以容忍的最大回溯时间,即业务端可以容忍获取回溯成功日志的最多等待时间。当然,对于没有回溯成功的用户日志,在没有到达最大回溯时间(如5小时等等)时,有可能之前没有回溯成功的用户日志就满足了预置回溯条件。例如,在之前回溯过程中仅仅可以查找到用户A流量竞价、展示对应的日志,而没有查找到用户A的点击操作对应的日志,且设置的最大回溯时间为5小时,如果在接下来的1分钟内接收到了点击日志,那么当设置的最大回溯时间到达时可以不再执行回溯操作的过程。
由此,最大回溯时间实际上可以认为是一种兜底保证,就是在业务端最大容忍时间内去尝试下是否能对日志回溯成功。因为有些业务的规则是即使在最大容忍时间(即最大回溯时间)没有回溯成功,那么也需要将部分回溯成功的日志进行合并。
继续参见步骤S106,在本发明一实时中,当日志合并成功后可以直接缓存至持久化缓存中,供离线job处理。当然,可以在日志合并成功后,直接以kafka***为中心往外分发,供实时job处理。
本发明实施例还提供了另一种合并日志的方法。图2示出了根据本发明另一个实施例的合并日志的方法的流程示意图。参见图2,该方法至少包括步骤S202至步骤S212。
步骤S202,将接收日志中具有相同字段的日志分配到基于kafka***中的同一worker行程中。其中,字段可以包括用户ID或者用户其他唯一标识key。
在该步骤中,可以采用flink keyby操作(如hash)将具有相同字段的日志分配到基于kafka***中的同一worker行程中。flink是一个类似spark的“开源技术栈”,可以提供批处理、流式计算、图计算、交互式查询、机器学习等功能。通过将具有相同字段的日志分配到同一worker行程中,从而可以保证后续能够更加方便地对相同字段的日志进行合并,进而在***进行扩容或升级的时候有效地保证日志的一致性。例如,通过flink keyby操作将用户ID为“11”的日志分配到worker1中,将用户ID为“12”的日志分配到worker2中,将用户ID为“13”的日志分配到worker3中。
步骤S204,各worker行程将分配到的日志复制性写入非持久化缓存和持久化缓存中。
在该步骤中,由于上文已经将相同字段的日志分配到相同的worker行程中,因此,各worker行程可以将自身所分配到的相同字段的日志复制性的写入非持久化缓存和持久化缓存中。例如,结合上述实施例worker1分配到用户ID为“11”的日志,worker2分配到用户ID为“12”的日志,那么,worker1将用户ID为“11”的日志复制性写入非持久化缓存和持久化缓存中,worker2将用户ID为“12”的日志复制性写入非持久化缓存和持久化缓存中,并且,worker3将用户ID为“13”的日志复制性写入非持久化缓存和持久化缓存中。
步骤S206,在非持久化缓存中查找是否存在具有相同字段的日志,若是,执行步骤S208;若否,执行步骤S210。
步骤S208,从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至持久化缓存中,并执行步骤S212。
步骤S210,在持久化缓存中查找是否具有相同字段的日志,若是,执行步骤S208;若否,执行步骤S212,结束。
本发明实施例可以基于kafka***和flink对接收到的日志进行流处理,进而可以通过并行度配置来实现***的扩容、缩容。
基于同一发明构思,本发明实施例还提供了一种合并日志的装置,图3示出了根据本发明一个实施例的合并日志的装置的结构示意图,参见图3,合并日志的装置300包括写入模块310、查找模块320以及合并模块330。
现介绍本发明实施例的合并日志的装置300的各组成或器件的功能以及各部分间的连接关系:
写入模块310,适于将接收日志复制性写入设置的非持久化缓存和持久化缓存中,其中,非持久化缓存对日志的缓存时长小于持久化缓存对日志的缓存时长;
查找模块320,与写入模块310耦合,适于在非持久化缓存中查找具有相同字段的日志;
合并模块330,与查找模块320耦合,适于从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至持久化缓存中。其中,满足预置回溯条件的多种日志可以包括,完整session动作中多个组成对象所对应的日志,其中,完整session动作中的多个组成对象依据业务需求确定得到。
在本发明一实施例中,查找模块320还适于若在非持久化缓存中未查找到具有相同字段的日志,则继续从持久化缓存中查找具有相同字段的日志。
在本发明一实施例中,合并日志的装置还可以应用于kafka***,写入模块310还适于将接收日志中具有相同字段的日志分配到基于kafka***中的同一worker行程中,其中,字段包括用户ID或者用户其他唯一标识key。各worker行程将分配到的日志复制性写入非持久化缓存和持久化缓存中。
在本发明一实施例中,写入模块310还适于,采用flink keyby操作将具有相同字段的日志分配到基于kafka***中的同一worker行程中。
在本发明一实施例中,查找模块320还适于,到达预置回溯时间时启动回溯操作,并在非持久化缓存中查找具有相同字段的日志。
本发明实施例还提供了另一种合并日志的装置,参见图4,合并日志的装置300除了包含上述各模块之外,还包括设置模块340、判断模块350和建立模块360。
设置模块340,与写入模块310耦合,适于在写入模块310将接收日志复制性写入设置的非持久化缓存和持久化缓存之前,设置第一级缓存和第二级缓存作为非持久化缓存,设置第三级缓存作为持久化缓存。
判断模块350,与写入模块310和查找模块320分别耦合,适于在写入模块310将接收日志复制性写入设置的非持久化缓存和持久化缓存后,在到达预置回溯时间并启动回溯操作时,判断回溯时间与日志写入时间差是否超过非持久化缓存的缓存时长,若是,由查找模块320直接从持久化缓存中查找具有相同字段的日志。
建立模块360,与合并模块330和查找模块320分别耦合,适于若合并模块330从查找到的相同字段的日志中无法获取满足预置回溯条件的多种日志,则依据查找到的相同字段的日志建立topic,并为建立的topic设置最大回溯时间。查找模块320在达到最大回溯时间时从非持久化缓存和持久化缓存中查找是否存在与topic中的日志字段相同、且满足预置回溯条件的多种日志,若是,由合并模块330合并具有相同字段且满足预置回溯条件的多种日志,并将合并后的日志缓存至持久化缓存中。
在本发明一实施例中,查找模块320还适于依次从第一级缓存、第二级缓存中查找具有相同字段的日志。其中,第一级缓存可以包括redis cluster,第二级缓存可以包括aerospike,第三级缓存可以包括hbase。
在本发明一实施例中,写入模块310还适于,接收日志并为日志添加时间戳,将携带时间戳的日志复制性写入设置的非持久化缓存和持久化缓存中。
在本发明一实施例中,判断模块350还适于,到达预置回溯时间并启动回溯操作时,依据日志的时间戳判断回溯时间与日志写入时间差是否超过非持久化缓存的缓存时长。
根据上述任意一个优选实施例或多个优选实施例的组合,本发明实施例能够达到如下有益效果:
在本发明实施例中,当接收到日志时,将接收到的日志复制性写入设置的非持久化缓存和持久化缓存中,其中,非持久化缓存对日志的缓存时长小于持久化缓存对日志的缓存时长。写入日志之后还可以在非持久化缓存中查找具有相同字段的日志,并从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至持久化缓存中。由此,本发明实施例通过设置非持久化缓存和持久化缓存,并将接收到的日志复制性的写入设置的非持久化缓存和持久化缓存,从而可以避免后续在获取日志时将大量的获取请求直接分配到持久化缓存中,以减少持久化缓存的日志处理压力。进一步地,将具有相同字段的日志进行合并还可以有效地节约日志的存储空间,并方便后续对日志的集中管理。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的合并日志的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
依据本发明的再一方面,还提供了一种电子设备,包括处理器;以及被安排成存储计算机可执行指令的存储器,可执行指令在被执行时使处理器执行根据上文任意实施例中的合并日志的方法。
依据本发明的另一方面,还提供了一种计算机存储介质,其中,计算机存储介质存储一个或多个程序,一个或多个程序当被包括多个应用程序的电子设备执行时,使得电子设备执行根据上文任意实施例中的合并日志的方法。
例如,图5示出了可以实现合并日志的方法的计算设备。该计算设备传统上包括处理器510和存储器520形式的计算机程序产品或者计算机可读介质。存储器520可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器520具有存储用于执行上述方法中的任何方法步骤的程序代码531的存储空间530。例如,存储程序代码的存储空间530可以包括分别用于实现上面的方法中的各种步骤的各个程序代码531。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为例如图6所示的便携式或者固定存储单元。该存储单元可以具有与图5的计算设备中的存储器520类似布置的存储段、存储空间等。程序代码可以例如以适当形式进行压缩。通常,存储单元包括用于执行本发明的方法步骤的计算机可读代码531’,即可以由诸如510之类的处理器读取的代码,当这些代码由计算设备运行时,导致该计算设备执行上面所描述的方法中的各个步骤。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (22)
1.一种合并日志的方法,所述方法应用于kafka***,包括:
将接收日志复制性写入设置的非持久化缓存和持久化缓存中,其中,所述非持久化缓存对日志的缓存时长小于所述持久化缓存对日志的缓存时长,所述非持久化缓存包括第一级缓存和第二级缓存;
到达预置回溯时间并启动回溯操作时,判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长;
若是,直接从所述持久化缓存中查找具有相同字段的日志;
从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至所述持久化缓存中;
若从查找到的相同字段的日志中无法获取满足预置回溯条件的多种日志,依据查找到的相同字段的日志建立topic,并为建立的topic设置最大回溯时间;
在达到所述最大回溯时间时从所述非持久化缓存和持久化缓存中查找是否存在与topic中的日志字段相同、且满足预置回溯条件的多种日志;
若是,合并具有相同字段且满足预置回溯条件的多种日志,并将合并后的日志缓存至所述持久化缓存中。
2.根据权利要求1所述的方法,其中,还包括:
若在所述非持久化缓存中未查找到具有相同字段的日志,则继续从所述持久化缓存中查找具有相同字段的日志。
3.根据权利要求1或2所述的方法,其中,所述将接收日志复制性写入设置的非持久化缓存和持久化缓存之前,还包括:设置第一级缓存和第二级缓存作为非持久化缓存,设置第三级缓存作为持久化缓存。
4.根据权利要求3所述的方法,其中,在所述非持久化缓存中查找具有相同字段的日志,包括:
依次从所述第一级缓存、所述第二级缓存中查找具有相同字段的日志。
5.根据权利要求3所述的方法,其中,所述第一级缓存包括redis cluster,所述第二级缓存包括aerospike,所述第三级缓存包括hbase。
6.根据权利要求1或2所述的方法,其中,所述方法应用于kafka***,所述将接收日志复制性写入设置的非持久化缓存和持久化缓存中,包括:
将接收日志中具有相同字段的日志分配到基于所述kafka***中的同一worker行程中,其中,所述字段包括用户ID或者用户其他唯一标识key;
各worker行程将分配到的日志复制性写入所述非持久化缓存和所述持久化缓存中。
7.根据权利要求6所述的方法,其中,所述将接收日志中具有相同字段的日志分配到基于所述kafka***中的同一worker行程中,包括:
采用flink keyby操作将具有相同字段的日志分配到基于所述kafka***中的同一worker行程中。
8.根据权利要求1所述的方法,其中,所述将接收日志复制性写入设置的非持久化缓存和持久化缓存中,包括:
接收日志并为所述日志添加时间戳,将携带时间戳的日志复制性写入设置的非持久化缓存和持久化缓存中。
9.根据权利要求8所述的方法,其中,所述到达预置回溯时间并启动回溯操作时,判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长,包括:
到达预置回溯时间并启动回溯操作时,依据日志的时间戳判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长。
10.根据权利要求1或2所述的方法,其中,所述满足预置回溯条件的多种日志包括:
完整session动作中多个组成对象所对应的日志,其中,所述完整session动作中的多个组成对象依据业务需求确定得到。
11.一种合并日志的装置,其中,所述装置应用于kafka***,包括:
写入模块,适于将接收日志复制性写入设置的非持久化缓存和持久化缓存中,其中,所述非持久化缓存对日志的缓存时长小于所述持久化缓存对日志的缓存时长,所述非持久化缓存包括第一级缓存和第二级缓存;
判断模块,适于到达预置回溯时间并启动回溯操作时,判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长;
若是,查找模块,适于直接从所述持久化缓存中查找具有相同字段的日志;
合并模块,适于从查找到的相同字段的日志中获取满足预置回溯条件的多种日志并合并,将合并后的日志缓存至所述持久化缓存中;
建立模块,适于若所述合并模块从查找到的相同字段的日志中无法获取满足预置回溯条件的多种日志,依据查找到的相同字段的日志建立topic,并为建立的topic设置最大回溯时间;
所述查找模块在达到所述最大回溯时间时从所述非持久化缓存和持久化缓存中查找是否存在与topic中的日志字段相同、且满足预置回溯条件的多种日志;
若是,所述合并模块合并具有相同字段且满足预置回溯条件的多种日志,并将合并后的日志缓存至所述持久化缓存中。
12.根据权利要求11所述的装置,其中,所述查找模块还适于:
若在所述非持久化缓存中未查找到具有相同字段的日志,则继续从所述持久化缓存中查找具有相同字段的日志。
13.根据权利要求11或12所述的装置,其中,还包括:
设置模块,适于在所述写入模块将接收日志复制性写入设置的非持久化缓存和持久化缓存之前,设置第一级缓存和第二级缓存作为非持久化缓存,设置第三级缓存作为持久化缓存。
14.根据权利要求13所述的装置,其中,所述查找模块还适于:
依次从所述第一级缓存、所述第二级缓存中查找具有相同字段的日志。
15.根据权利要求13所述的装置,其中,所述第一级缓存包括redis cluster,所述第二级缓存包括aerospike,所述第三级缓存包括hbase。
16.根据权利要求11或12所述的装置,所述写入模块还适于:
将接收日志中具有相同字段的日志分配到基于所述kafka***中的同一worker行程中,其中,所述字段包括用户ID或者用户其他唯一标识key;
各worker行程将分配到的日志复制性写入所述非持久化缓存和所述持久化缓存中。
17.根据权利要求16所述的装置,其中,所述写入模块还适于:
采用flink keyby操作将具有相同字段的日志分配到基于所述kafka***中的同一worker行程中。
18.根据权利要求17所述的装置,其中,所述写入模块还适于:
接收日志并为所述日志添加时间戳,将携带时间戳的日志复制性写入设置的非持久化缓存和持久化缓存中。
19.根据权利要求18所述的装置,其中,所述判断模块还适于:
到达预置回溯时间并启动回溯操作时,依据日志的时间戳判断回溯时间与日志写入时间差是否超过所述非持久化缓存的缓存时长。
20.根据权利要求11或12所述的装置,其中,所述满足预置回溯条件的多种日志包括:
完整session动作中多个组成对象所对应的日志,其中,所述完整session动作中的多个组成对象依据业务需求确定得到。
21.一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行根据权利要求1-10任一项所述的合并日志的方法。
22.一种计算机存储介质,其中,所述计算机存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行根据权利要求1-10任一项所述的合并日志的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711489592.8A CN109992469B (zh) | 2017-12-29 | 2017-12-29 | 一种合并日志的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711489592.8A CN109992469B (zh) | 2017-12-29 | 2017-12-29 | 一种合并日志的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109992469A CN109992469A (zh) | 2019-07-09 |
CN109992469B true CN109992469B (zh) | 2023-08-18 |
Family
ID=67110676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711489592.8A Active CN109992469B (zh) | 2017-12-29 | 2017-12-29 | 一种合并日志的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109992469B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113656645A (zh) * | 2020-05-12 | 2021-11-16 | 北京字节跳动网络技术有限公司 | 日志消费方法和装置 |
CN112000698B (zh) * | 2020-08-25 | 2023-09-19 | 青岛海尔科技有限公司 | 日志的记录方法及装置、存储介质、电子装置 |
CN112667686B (zh) * | 2020-12-30 | 2024-07-05 | 中国农业银行股份有限公司 | 一种实时流数据拼接方法及装置 |
CN112988741A (zh) * | 2021-02-04 | 2021-06-18 | 北京淇瑀信息科技有限公司 | 实时业务数据合并方法、装置及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100725415B1 (ko) * | 2005-12-24 | 2007-06-07 | 삼성전자주식회사 | 데이터베이스의 로그병합 방법 및 장치 |
CN105138481A (zh) * | 2014-05-30 | 2015-12-09 | 华为技术有限公司 | 存储数据的处理方法、装置和*** |
CN106502875A (zh) * | 2016-10-21 | 2017-03-15 | 过冬 | 一种基于云计算的日志生成方法及*** |
CN106649627A (zh) * | 2016-12-06 | 2017-05-10 | 杭州迪普科技股份有限公司 | 一种日志查找的方法和装置 |
CN106775498A (zh) * | 2017-01-23 | 2017-05-31 | 深圳国泰安教育技术股份有限公司 | 一种缓存数据同步方法及*** |
-
2017
- 2017-12-29 CN CN201711489592.8A patent/CN109992469B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100725415B1 (ko) * | 2005-12-24 | 2007-06-07 | 삼성전자주식회사 | 데이터베이스의 로그병합 방법 및 장치 |
CN105138481A (zh) * | 2014-05-30 | 2015-12-09 | 华为技术有限公司 | 存储数据的处理方法、装置和*** |
CN106502875A (zh) * | 2016-10-21 | 2017-03-15 | 过冬 | 一种基于云计算的日志生成方法及*** |
CN106649627A (zh) * | 2016-12-06 | 2017-05-10 | 杭州迪普科技股份有限公司 | 一种日志查找的方法和装置 |
CN106775498A (zh) * | 2017-01-23 | 2017-05-31 | 深圳国泰安教育技术股份有限公司 | 一种缓存数据同步方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN109992469A (zh) | 2019-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11455217B2 (en) | Transaction consistency query support for replicated data from recovery log to external data stores | |
CN109992469B (zh) | 一种合并日志的方法及装置 | |
AU2014212780B2 (en) | Data stream splitting for low-latency data access | |
US7809752B1 (en) | Representing user behavior information | |
US20170155707A1 (en) | Multi-level data staging for low latency data access | |
US10417265B2 (en) | High performance parallel indexing for forensics and electronic discovery | |
CN104133867A (zh) | 分布式顺序表片内二级索引方法及*** | |
CN105049287A (zh) | 日志处理方法及装置 | |
CN103620601A (zh) | 在映射缩减过程中汇合表 | |
CN102810089A (zh) | 基于内容的短链接***及实现方法 | |
CN111209352A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN106909595B (zh) | 一种数据迁移方法及装置 | |
CN110737682A (zh) | 一种缓存操作方法、装置、存储介质和电子设备 | |
CN108563697B (zh) | 一种数据处理方法、装置和存储介质 | |
CN105574054A (zh) | 一种分布式缓存范围查询方法、装置及*** | |
CN113760847A (zh) | 日志数据处理方法、装置、设备及存储介质 | |
US9092338B1 (en) | Multi-level caching event lookup | |
CN116760661A (zh) | 数据存储方法、装置、计算机设备、存储介质和程序产品 | |
CN113515518A (zh) | 数据存储方法、装置、计算机设备和存储介质 | |
EP2765517B1 (en) | Data stream splitting for low-latency data access | |
CN106934044B (zh) | 一种数据处理方法及装置 | |
Wang et al. | Event Indexing and Searching for High Volumes of Event Streams in the Cloud | |
CN113268483B (zh) | 请求处理方法和装置、电子设备和存储介质 | |
CN114218471A (zh) | 数据查询方法、装置、***、电子设备及存储介质 | |
CN111352897A (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230727 Address after: Room 03, 2nd Floor, Building A, No. 20 Haitai Avenue, Huayuan Industrial Zone (Huanwai), Binhai New Area, Tianjin, 300450 Applicant after: 3600 Technology Group Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Applicant before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |