栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据工程师入门系列 - 常用数据采集工具(Flume、Logstash 和 Fluentd)

大数据工程师入门系列 - 常用数据采集工具(Flume、Logstash 和 Fluentd)

作者:幻好

来源: 恒生LIGHT云社区

大数据的价值在于把数据变成某一行为的结论,这一重要的过程成为数据分析。提到数据分析,大部分人首先想到的都是 Hadoop、流计算、机器学习等数据加工的方式。具体从整个过程来看,数据分析其实可以大致分为四个步骤:数据采集,数据存储,数据计算,数据可视化。

其中大数据的数据采集这一过程是最基础,也是最重要的部分。针对具体的场景使用合适的采集工具,可以大大提高效率和可靠性,并降低资源成本。常用的开源工具 Flume、Logstash 和 Fluentd 等都是可以作为日志采集的工具,本文将对常用数据采集工具使用场景优缺点等进行介绍分析。

Flume

Flume 是由 cloudera 软件公司产出的可分布式日志收集系统,后与2009年被捐赠了apache软件基金会,为 Hadoop 相关组件之一。尤其近几年随着 flume 的不断被完善以及升级版本的逐一推出,特别是flume-ng;同时flume内部的各种组件不断丰富,用户在开发的过程中使用的便利性得到很大的改善,现已成为apache top项目之一。

基本概念

Flume 是一种具备分布式、可靠性和可用性的服务,可以有效地收集、聚合和迁移大量日志数据,是一个简单和灵活基于流数据流架构。它具有较好的健壮性和容错性,具有可调的可靠性机制和许多故障转移和恢复机制。通过一个简单的可扩展数据模型,允许在线分析应用程序。

框架特性
    可靠性

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume 提供了三种级别的可靠性保障,从强到弱依次分别为: end-to-end (收到数据agent首先将 event 写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。), Store on failure (这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送), Best effort (数据发送到接收方后,不会进行确认)。

    可扩展性

Flume 采用了三层架构,分别问 agent , collector 和 storage ,每一层均可以水平扩展。其中,所有 agent 和 collector 由 master 统一管理,这使得系统容易监控和维护,且 master 允许有多个(使用 ZooKeeper 进行管理和负载均衡),这就避免了单点故障问题。

    可管理性

所有 agent 和 colletor 由 master 统一管理,这使得系统便于维护。用户可以在 master 上查看各个数据源或者数据流执行情况,且可以对各个数据源配置和动态加载。Flume提供了web 和shell script command两种形式对数据流进行管理。

    功能可扩展性

用户可以根据需要添加自己的 agent ,colletor 或者 storage 。此外,Flume 自带了很多组件,包括各种 agent( file, syslog 等),collector 和 storage(file,HDFS 等)。 技术架构

Flume采用了分层架构,由三层组成,分别为 agent , collector 和 storage 。其中, agent 和 collector 均由两部分组成: source 和 sink , source 是数据来源, sink 是数据去向。

    agent

系统中最核心的角色是 agent ,Flume 采集系统就是由一个个 agent 所连接起来形成。 每一个 agent 相当于一个数据传递员,内部有三个组件:

source : 采集源,用于跟数据源对接,以获取数据 sink :传送数据的目的地,用于往下一级 agent 或者最终存储系统传递数据 channel : agent 内部的数据传输通道,用于从 source 传输数据到 sink

agent 的作用是将数据源的数据发送给 collector ,Flume 自带了很多直接可用的数据源(source),如:

text(“filename”) :将文件 filename 作为数据源,按行发送 tail(“filename”) :探测 filename 新产生的数据,按行发送出去 fsyslogTcp(5140) :监听 TCP 的5140端口,并且接收到的数据发送出去 Flume 自带了很多 sink ,如:

console[("format")] :直接将将数据显示在桌面上 text(“txtfile”) :将数据写到文件 txtfile 中 dfs(“dfsfile”) :将数据写到 HDFS 上的 dfsfile 文件中 syslogTcp(“host”,port) :将数据通过 TCP 传递给 host 节点

    collector

    collector 的作用是将多个 agent 的数据汇总后,加载到 storage 中。它的 source 和 sink 与 agent 类似。 实例:

    agent 监听 TCP 的5140端口接收到的数据,并发送给 collector ,由 collector 将数据加载到 HDFS 上。

应用场景

在大数据时代,平台会通过收集用户的在平台上操作,分析用户的具体行为,然后推送个性化的信息。比如我们在电商平台上搜索一些商品后 ,首页会给用户推送相应品类的商品。而 Flume 在其中充当了一个数据采集的角色,通过快速采集用户的信息,发送给数据计算平台分析后,实现个性化推送。

Logstash

Logstash 是一个具有实时流水线功能的开源数据收集引擎。Logstash 可以动态地统一来自不同来源的数据,并将数据规范化到我们选择的目的地。为各种高级下游分析和可视化用例清理和普及所有数据。任何类型的事件都可以通过大量的输入、过滤和输出插件来丰富和转换,许多本机编解码器进一步简化了输入过程。

基本概念

Logstash 是基于 pipeline 方式进行数据处理的,pipeline 可以理解为数据处理流程的抽象。在一条 pipeline 数据经过上游数据源汇总到 消息队列 中,然后由多个工作线程进行数据的转换处理,最后输出到下游组件。一个 Logstash 中可以包含多个 pipeline。

框架特性

为 Elasticsearch 和更多的摄取工作的主力

具有强大的 Elasticsearch 和 Kibana 协同功能的水平可扩展的数据处理管道 可拔插管道架构

混合、匹配和协调不同的输入、过滤器和输出,在管道中和谐地发挥作用 良好的社区生态系统

开发社区超过200个插件可用,可以扩展创建自定义的插件 工作原理

    处理过程

如上图,Logstash的数据处理过程主要包括: Inputs , Filters , Outputs 三部分, 另外在Inputs和Outputs中可以使用 Codecs 对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能

Inputs :用于从数据源获取数据,常见的插件如 file, syslog, redis, beats 等[ 详细参考 ] Filters :用于处理数据如格式转换,数据派生等,常见的插件如 grok, mutate, drop, clone, geoip 等[ 详细参考 ] Outputs :用于数据输出,常见的插件如 elastcisearch,file, graphite, statsd 等[ 详细参考 ] Codecs :Codecs 不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline[ 详细参考 ]

2.执行模型:

每个Input启动一个线程,从对应数据源获取数据 Input会将数据写入一个队列:默认为内存中的有界队列(意外停止会导致数据丢失)。为了防止数丢失Logstash提供了两个特性: Persistent Queues :通过磁盘上的queue来防止数据丢失 Dead Letter Queues :保存无法处理的event(仅支持Elasticsearch作为输出源) Logstash会有多个 pipeline worker ,每一个 pipeline worker 会从队列中取一批数据,然后执行 filter 和 output(worker数目及每次处理的数据量均由配置确定) 应用场景

Elasticsearch 是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。 Logstash 作为Elasicsearch常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack 的重要组成部分。

Fluentd 基本概念

Fluentd 是一个开源的数据收集框架。Fluentd 使用C/Ruby开发,使用 JSON 文件来统一日志数据。它的可插拔架构,支持各种不同种类和格式的数据源和数据输出。最后它也同时提供了高可靠和很好的扩展性。Treasure Data, Inc 对该产品提供支持和维护。

框架特性

FLuentd 的扩展性非常好,客户可以自己定制(Ruby)Input/Buffer/Output。 Fluentd从各方面看都很像Flume,区别是使用Ruby开发,Footprint 会小一些,但是也带来了跨平台的问题,并不能支持 Windows 平台。另外采用 JSON 统一数据/日志格式是它的另一个特点。相对于 Flumed ,配置也相对简单一些。

Fluentd 的优点:

安装方便

占用空间小

半结构化数据日志记录

灵活的插件机制

可靠的缓冲

日志转发

技术架构

Fluentd 的架构设计和Flume如出一辙,Fluentd 的 Input/Buffer/Output 非常类似于 Flume 的 Source/Channel/Sink 。

Input

Input 负责接收数据或者主动抓取数据。支持 syslog,http,file tail 等。 Buffer

Buffer 负责数据获取的性能和可靠性,也有文件或内存等不同类型的 Buffer 可以配置。 Output

Output 负责输出数据到目的地例如文件,AWS S3 或者其它的 Fluentd 。 总结

框架间的优劣对比:

维度 Flume Logstash Fluentd
内存占用
框架重量 重量级 重量级 轻量级
语言 Java JRuby C和Ruby
性能 高性能 高性能 高性能
支持平台 全平台 全平台 不支持windows
插件支持 较多
扩展性 一般 社区活跃度高 一般
集群 分布式 单节点 单节点

Flume 更注重于数据的传输,对于数据的预处理不如 Logstash 。 在传输上 Flume 比 Logstash 更可靠一些,因为数据会持久化在 channel 中。 数据只有存储在sink 端中,才会从 channel 中删除,这个过程是通过事物来控制的,保证了数据的可靠性。 Logstash 是ELK组件中的一个,一般都是同 ELK 其它组件一起使用,更注重于数据的预处理,Logstash 有比 Flume 丰富的插件可选,所以在扩展功能上比 Flume 全面。 Logstash 内部没有 persist queue,所以在异常情况下会出现数据丢失的问题 Fluentd 的宣传里有高性能这一项,可能相对于 logstash 的确好很多,但还是不太够。在实际使用中,解析 -> 转换 -> 入库 整个过程性能并不理想。 Fluentd 的性能既因为 Ruby 消耗过多计算和内存资源,又因为 Ruby 难以受益与多核。对数据吞吐量大的业务来说它是很昂贵的。 Fluentd 的插件质量也不够好,第三方插件大多是使用者根据自己业务需要编写,只为实现特定需求,没有足够的泛化,也没有足够的测试和性能评估。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/719028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号