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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介:

本节书摘来华章计算机《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日志并进行多维度分析。
相关文章
|
流计算
110 Storm集群的进程及日志熟悉
110 Storm集群的进程及日志熟悉
72 0
|
消息中间件 监控 NoSQL
搞懂分布式技术24:基于Flume+Kafka+ Elasticsearch+Storm的海量日志实时分析平台:
0背景介绍 随着机器个数的增加、各种服务、各种组件的扩容、开发人员的递增,日志的运维问题是日渐尖锐。通常,日志都是存储在服务运行的本地机器上,使用脚本来管理,一般非压缩日志保留最近三天,压缩保留最近1个月,其它直接删除或迁移到日志服务器上。
|
SQL 监控 关系型数据库
2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《流数据处理:通过StreamSQL分析视频日志》篇
2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《流数据处理:通过StreamSQL分析视频日志》篇
2930 0
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
226 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
281 3