Flume_日志收集工具

Flume是一款高性能、高可用的分布式日志收集系统,用于组装、聚集大量日志数据并传输至集中位置。其基本思想是插拔式架构,提供良好的扩展性和高度定制化。Flume由Source、Channel和Sink组成,支持多种数据获取方式,如Avro、Thrift、TCP/UDP等。数据流拓扑构建涉及Agent的配置,包括Source、Channel、Sink和Interceptor、Channel Selector等组件。Flume广泛应用于日志收集和分析,可将数据写入HDFS、HBase等存储系统。
摘要由CSDN通过智能技术生成

目录

 

一、前言

二、简介

2.1 概述

2.2 发展历程

2.3 基本思想及特点

三、Flume NG 基本架构

3.1 基本架构

3.2 Agent 内部组件

1、Source

2、Channel

3、Sink

3.3 高级组件

1、Interceptor

2、Channel Selector

3、Sink Processer

四、Flume NG 数据流拓扑构建方法

4.1 如何构建数据流拓扑

4.2 流式数据获取方式

4.2 常见拓扑架构

1、多路合并

2、多路复用

4.3 Agent配置方式

1、配置Agent

2、配置单个组件

五、Flume的应用

5.1 flume的安装

5.2 简单的一对一案例(LogAgent实例)

5.3 数据流拓扑实例剖析

1、多路合并拓扑实例

2、多路复用拓扑实例


一、前言

  任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息。在没有分析方法之前,这些日志存储一段时间后就会被清理。随着技术的发展和分析能力的提高,日志的价值被重新重视起来。在分析这些这些日志之前,需要将分散在各个生产系统中的日志收集起来。本篇介绍广泛应用的Flume日志收集系统。

二、简介

2.1 概述

  Flume是一款高性能、高可用的分布式日志收集系统。它有效地组装、聚集大量的日志数据并立即传输至一个集中的位置。同Flume相似的日志收集系统还有 Facebook Scribe、Apache Chuwka。

  官网地址:http://flume.apache.org

  文档地址:http://flume.apache.org/documentation.html

2.2 发展历程

  Flume初始的发行版本目前被统称为 Flume OG,属于Cloudera。但随着Flume功能的扩展,Flume OG代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点逐渐暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0中,日志传输现象尤为严重。为了解决这些问题,2011年10月22日,Cloudera完成了Flume-728,对Flume进行了里程碑式的改动:重构核心组件、核心配置及代码架构,重构后的版本统称为Flume NG;改动的另一原因是将Flume纳入Apache旗下,Cloudera Flume更名为 Apache Flume。

2.3 基本思想及特点

基本思想:Flume采用了插拔式软件架构,所有组件均是可插拔的,用户可以根据自己的需要定制每个组件。Flume本质上是一个中间件,它屏蔽了流式数据源和后端中心化存储系统之间的异构性,使得整个数据流非常容易扩展和演化。

特点:

  • 良好的扩展性:Flume架构是完全分布式的,没有任何中心化组件,这使得它非常容易扩展。
  • 高度定制化:各个组件(比如Source、Channel和Sink等)是可插拔的,用户很容易根据需求进行定制。
  • 良好的可靠性:Flume内置了事务支持,能够保证发送的每条数据能够被下一跳收到而不会丢失。(事务体现在Sink必须在Event被存入Channel后,或者已经被成功传递给下一个Agent后,才能把Event从Channel中删掉)
  • 声明化动态配置:Flume提供了一套声明式配置语言,用户可根据需要动态配置一个基于Flume的数据流拓扑结构。
  • 语意路由:可根据用户的配置,将流式数据路由到不同的组件或存储系统中,这使得搭建一个支持异构的数据流变的非常容易。

三、Flume NG 基本架构

3.1 基本架构

  Flume的数据流是通过一系列称为Agent的组件构成的,如下图所示,一个Agent可以从客户端或前一个Agent接收数据,经过过滤(可选)、路由等操作后,传递给下一个或多个Agent(完全分布式),直到抵达指定的目标系统。用户可根据需要拼接任意多个Agent构成一个数据流水线。

  Flume将数据流水线中传递的数据称为“Event”,每个Event由头部和字节数组(数据内容)两部分构成,其中头部由一系列key/value对构成,可用于数据路由,字节数组封装了实际要传递的数据内容,通常使用Avro,Thrift、Protobuf等对象序列化而成。

  Flume中Event可由专门的客户端程序产生,这些客户端程序将要发送的数据封装成Event对象,并调用Flume提供的SDK发送给Agent。

3.2 Agent 内部组件

1、Source

  Flume数据流中接收Event的组件,通常从Client程序或上一个Agent接收数据并写入一个或多个Channel。为了方便用户使用,Flume提供了很多Source实现,主要包括:

    Avro Source、Thrift Source、Exec Source、Spooling Directory Source、Kafka Source、Syslog Source、HTTP Source。

2、Channel

  Channel是一个缓存区,它暂存Source写入的Event,直到被Sink发送出去。目前Flume主要提供了以下几种Channel实现:

   Memory Channel、File Channel、JDBC Channel、Kafka Channel

3、Sink

  负责从Channel中读取数据,并发送给下一个Agent(的Source)或目标系统。Flume主要提供以下几种Sink实现:

    HDFS Sink、HBase Sink、Avro/Thrift Sink、MorphlineSolrSink/ElasticSeratchSink、Kafka Sink

3.3 高级组件

1、Interceptor

  允许用户修改或丢弃传输过程中的Event。Interceptor是一个实现了org.apache.flume.interceptor.Interceptor接口的类。用户可配置多个Interceptor,形成一个Interceptor链,这样,前一个Interceptor返回的Event将被传递给下一个Interceptor,而传递过程中,任何一个Interceptor均可修改或者丢弃当前的Event。Flume自带了很多Interceptor实例,常用的有:

    Timestamp Interceptor、Host Interceptor、UUID Interceptor、Regex Filtering Interceptor、Regex Extractor Interceptor

2、Channel Selector

  允许Flume Sou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值