主要涉及到的技术框架:flume(日志收集及传输)、kafka(消息队列)、storm(流式计算)、hadoop(离线分析),这几项技术也是大数据方面较为成熟和常用的技术方案。大数据是未来的一个热点方向,涉及的技术和思想也十分丰富。本文仅对此次服务监控中应用到的主要技术框架的基本原理和核心概念做一介绍
Flume:
1. 简介:
Flume ng是cloudera提供的一个分布式、可靠、高可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个数据存储系统中(flume 的核心就是把数据从数据源收集过来,再送到目的地)。由原来的flume og到现在的flume ng,进行了架构重构。改动的另一原因是将 flume 纳入 apache 旗下,cloudera flume 改名为 apache flume。
2. 基本架构:
![](https://i-blog.csdnimg.cn/blog_migrate/e61be28d14cc27d60dfd875d0d5ea3b6.webp?x-image-process=image/format,png)
Event:
代表着一个数据流的最小完整单元,通过source从外部数据源输入,流经channel,最终通过sink向外部输出,比如我们日志中的一条日志
Flow:
Event从源点到达目的点的迁移的抽象
Agent:
一个独立的flume进程,包含三个核心组件source、channel、sink,通过这些组件,event可以从一个地方流向下一个地方
Source:
用来消费传递到该组件的event,可以接收外部源发送过来的数据。不同的 source可以接受不同的数据格式。flume支持avro、exec、spool、http等source类型
1. Exec source:以运行 linux 命令的方式,持续的输出最新的数据,如 tail -f 指令。 exec source 可以实现对日志的实时收集,但是存在flume不运行或者指令执行出错时,将无法收集到日志数据,无法保证日志数据的完整性
2. Spooling directory source:监测配置的目录下新增的文件,并将文件中的数据读取出来。spool source 虽然无法实现实时的收集数据,但是可以使用以分钟的方式分割文件,趋近于实时。
更多其他的source类型参考官方文档http://flume.apache.org/flumeuserguide.html#flume-sources
Channel:
中转event的一个临时存储,保存有source组件传递过来的event,可以理解为一个队列。flume支持memory、jdbc、file、kafka等channel类型
1. Memory channel:可以实现高速的吞吐,但是无法保证数据的完整性,如果 java 进程死掉,任何存储在内存的事件将会丢失。另外,内存的空间受到分配内存大小的限制
2. File channel:是一个持久化的channel,它持久化所有的event,并将其存储到磁盘中。因此,即使 java 虚拟机当掉,也不会造成数据丢失
3. Kafka channel(1.6版本新增):event被存储在kafka集群中,速度慢于memory channel,但是高于file channel,并且可靠性较高。另外此种方式相比之前的source->channel->sink->kafka也更加便捷
更多其他的channel类型参考官方文档http://flume.apache.org/flumeuserguide.html#flume-channels
Sink:
从channel中读取并移除event,将event传递到下一个节点,可以是storage,也可以是下一个agent(如果有的话)。flume支持hdfs、logger、file roll、elastic search、kafka等sink类型
更多其他的sink类型参考官方文档http://flume.apache.org/flumeuserguide.html#flume-sinks
Kafka:
1. 简介:
Kafka是由linkedin开发的一个分布式的消息(发布/订阅)系统,使用scala编写,作为多种类型的数据管道和消息系统使用。主要特性如下:
以时间复杂度为o(1)的方式提供消息持久化能力,即使对tb级以上数据也能保证常数时间复杂度的访问性能(得益于其对数据文件的顺序写入(append))
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100k条以上消息的传输
支持kafka server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
同时支持离线数据处理和实时数据处理(group机制)
Scale out:支持在线水平扩展