大家好,我是茹憶。近期将为大家分享大数据架构的相关系列的技术知识,欢迎大家定时阅读学习。

学懂大数据架构-海量数据采集技术(二)_数据采集

上一期《学懂大数据架构-海量数据采集技术(一)》和大家介绍了大数据采集技术的基本概念,本期将为大家介绍数据采集技术中的日志采集技术。

首先请大家记住,常见的日志数据采集组件包括Flume、Logstash、FileBeat。

一、Flume组件

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,是Apache下的一个孵化项目。

Flume具有完善的可靠性机制、故障转移和恢复机制,具有强大的容错能力。

Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

Flume的设计宗旨是向Hadoop集群批量导入基于事件的海量数据。系统中最核心的角色是agent,Flume采集系统就是由一个个agent所连接起来形成。每一个agent相当于一个数据传递员,内部有三个组件:

(1)source: 采集源,用于跟数据源对接获取数据.

(2)sink:传送数据的目的地,用于往下一级agent或者最终存储系统传递数据。

(3)channel:agent内部的数据传输通道,用于从source传输数据到sink。

二、Logstash组件

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到存储库中。数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。

Logstash 现在是 ElasticSearch 家族成员之一。

logstash具有200多个插件,可以接受各种各样的数据(如日志、网络请求、关系型数据库、传感器或物联网等等)。

三、Filebeat组件

Filebeat是一个轻量级的日志采集工具,用于转发和集中日志数据. Filebeat作为代理安装在服务器上,监控指定的日志文件或目录,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。

当开启Filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,Filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点。

Filebeat由两个主要组成部分组成:prospector和 harvesters。这些组件一起工作来读取文件并将事件数据发送到指定的output。

Harvesters:负责读取单个文件的内容。harvesters逐行读取每个文件,并将内容发送到output中。每个文件都将启动一个harvesters。harvesters负责文件的打开和关闭,这意味着harvesters运行时,文件会保持打开状态。如果在收集过程中,即使删除了这个文件或者是对文件进行重命名,Filebeat依然会继续对这个文件进行读取,这时候将会一直占用着文件所对应的磁盘空间,直到Harvester关闭。默认情况下,Filebeat会一直保持文件的开启状态,直到超过配置的close_inactive参数,Filebeat才会把Harvester关闭。

Prospector:负责管理Harvsters,并且找到所有需要进行读取的数据源。如果input type配置的是log类型,Prospector将会去配置路径下查找所有能匹配上的文件,然后为每一个文件创建一个Harvster。每个Prospector都运行在自己的Go routine里。

Filebeat目前支持两种Prospector类型:log和stdin。每个Prospector类型可以在配置文件定义多个。log Prospector将会检查每一个文件是否需要启动Harvster,启动的Harvster是否还在运行,或者是该文件是否被忽略(可以通过配置ignore_order,进行文件忽略)。如果是在Filebeat运行过程中新创建的文件,只要在Harvster关闭后,文件大小发生了变化,新文件才会被Prospector选择到。

四、Flume、Logstash、Filebeat组件对比

对比项

Flume

Logstash

FileBeat

来源

Apache

Elastic

Elastic

开发语言

Java

Jruby

Go

主要功能

从多种源端采集数据并可以输出到多种数据源

从多种源端采集数据并可以实时解析和转换并输出到多种数据源

数据采集传输

组件轻重

相对较重

相对较重

轻量级二进制文件

集群模式

分布式

单节点

单节点

内存消耗

CPU消耗

容错性

高(有事务机制)

高(有持久化队列)

负载均衡

支持

支持

支持

插件

丰富的输入输出插件

丰富的输入输出插件

只支持文本采集

数据过滤能力

自带分区和拦截器

强大的过滤功能

过滤功能较弱

进程管理

一台服务器可以起多个进程,挂了后手工拉起

一台服务器只允许起一个进程,挂了手工拉起

进程十分稳定

资料完整度

社区活跃度

二次开发难度

一般

困难

容易


五、日志采集组件总结

  • 1. Flume更注重于数据的传输,对于数据的预处理不如Logstash。在传输上Flume比Logstash更可靠一些,因为数据会持久化在channel中。数据只有存储在sink端中,才会从channel中删除,这个过程是通过事物来控制的,保证了数据的可靠性。

  • 2. Logstash是ELK组件中的一个,一般都是同ELK其它组件一起使用,更注重于数据的预处理,Logstash有比Flume丰富的插件可选,所以在扩展功能上比Flume全面。但Logstash内部没有persist queue,所以在异常情况下会出现数据丢失的问题。

  • 3. Filebeat是一个轻量型日志采集工具,因为Filebeat是Elastic Stack的一部分,因此能够于ELK组件无缝协作。Filebeat占用的内存要比Logstash小很多。性能比较稳健,很少出现宕机。


下期将为大家介绍数据采集技术-数据库离线采集的各类技术组件,欢迎关注学习。

学懂大数据架构-海量数据采集技术(二)_日志采集_02