《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类成员变量定义了支持的“日期-时间”格式。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
流计算
110 Storm集群的进程及日志熟悉
110 Storm集群的进程及日志熟悉
138 0
|
消息中间件 监控 NoSQL
搞懂分布式技术24:基于Flume+Kafka+ Elasticsearch+Storm的海量日志实时分析平台:
0背景介绍 随着机器个数的增加、各种服务、各种组件的扩容、开发人员的递增,日志的运维问题是日渐尖锐。通常,日志都是存储在服务运行的本地机器上,使用脚本来管理,一般非压缩日志保留最近三天,压缩保留最近1个月,其它直接删除或迁移到日志服务器上。
|
SQL 监控 关系型数据库
2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《流数据处理:通过StreamSQL分析视频日志》篇
2017云栖大会·杭州峰会:《在线用户行为分析:基于流式计算的数据处理及应用》之《流数据处理:通过StreamSQL分析视频日志》篇
3085 0
|
7月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
838 54