《Storm实时数据处理》一2.3 创建日志Spout

简介:

本节书摘来华章计算机《Storm实时数据处理》一书中的第2章 ,第2.3节,(澳)Quinton Anderson 著 卢誉声 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3 创建日志Spout

日志Topology通过Redis通道读取所有logstash产生的日志,这些日志数据会通过本章介绍的Spout发送到Topology中。由于这是一个全新的Topology,因此我们先来新建一个Topology项目。

2.3.1 实战

我们先来创建项目目录和标准的Maven目录结构(标准结构可以参考:http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html)。

Step01 参照第1章中创建“Hello World” Topology的方法创建POM文件,修改和标签,然后添加以下依赖项:

image

image
image
image

Step02 通过以下命令生成Eclipse工程文件,然后将工程文件导入Eclipse:
image

Step03 日志Topology中的Tuple会携带日志域对象,该对象封装了数据和解析日志文件中单个记录的逻辑。在我们的项目中创建这个域对象:
image
image

这个代码片段中并没有包含getter、setter和equals方法,但还是有必要依次实现它们。对单元测试来说,equals方法有很大用处。
Step04 接下来创建Logspout类,并继承BaseRichSpout接口。参照第1章的方法实现这个类,声明下面这个字段:
image

然后发送接收到的日志记录到Topology中,代码如下:
image

应尽量避免直接在代码中使用字符串。虽说Tuple能在运行时高效地处理这些局部变量,但在编译链接的时候,初始化带有字符串元素的代码并没有任何意义。因此,我们还是建议使用静态变量定义代替这种直接使用字符串的方法。

2.3.2 解析

Redis Spout的实现我们已经熟谙于心,本节重点阐述LogEntry类域对象中的解析逻辑。logstash会以单个JSON值的形式向Redis通道发送日志。这些JSON值的格式如下所示:
image

2.3.3 补充内容

JSON格式包含两种关键结构,分别是JSON对象(JSON Object)和JSON数组(JSON Array)。JSON主页(www.json.org)提供了针对这两种结构的简要定义,为了方便起见,我们就直接在这里罗列出这两种结构的定义。对象是一个无序的名/值对(name/value pair)集合。一个对象以“{”(左括号)开始,以“}”(右括号)结束。每个名称后跟一个“:”(冒号),名/值对之间使用“,”(逗号)分隔,如图2-2所示。

image

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,以“]”(右中括号)结束。值之间使用“,”(逗号)分隔,如图2-3所示。

image

值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
LogEntry对象的构造函数包含一个JSONObject对象作为参数,并根据该对象的成员对自身进行初始化。可以通过toJSON()方法把LogEntry对象转换成对应的JSONObject对象,以备不时之需。LogEntry通过com.googlecode.json-simple库中的工具方法,将字符串转换成可用的JSON结构。
虽然结构定义清晰,但“日期-时间”却有多种不同的格式。parseDate()方法采取最优的方法解析各种日期格式。FORMATS类成员变量定义了支持的“日期-时间”格式。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
流计算
110 Storm集群的进程及日志熟悉
110 Storm集群的进程及日志熟悉
37 0
|
消息中间件 监控 NoSQL
搞懂分布式技术24:基于Flume+Kafka+ Elasticsearch+Storm的海量日志实时分析平台:
0背景介绍 随着机器个数的增加、各种服务、各种组件的扩容、开发人员的递增,日志的运维问题是日渐尖锐。通常,日志都是存储在服务运行的本地机器上,使用脚本来管理,一般非压缩日志保留最近三天,压缩保留最近1个月,其它直接删除或迁移到日志服务器上。
|
SQL 监控 关系型数据库
2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《流数据处理:通过StreamSQL分析视频日志》篇
2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《流数据处理:通过StreamSQL分析视频日志》篇
2887 0
|
5天前
|
C++
JNI Log 日志输出
JNI Log 日志输出
13 1
|
5天前
|
存储 运维 大数据
聊聊日志硬扫描,阿里 Log Scan 的设计与实践
泛日志(Log/Trace/Metric)是大数据的重要组成,伴随着每一年业务峰值的新脉冲,日志数据量在快速增长。同时,业务数字化运营、软件可观测性等浪潮又在对日志的存储、计算提出更高的要求。
|
11天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。