Flume简介

Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统。原名是 Flume OG (original generation),但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0 中,日志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation,改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume)。

FLUME NG

1、NG 只有一种角色的节点:代理节点(agent)。

2、agent 节点的组成也发生了变化。Flume NG 的 agent 由 source、sink、Channel 组成。

flume ng 节点组成图:

多 Agent 并联下的架构图:

Flume 的特性

flume 支持在日志系统中定制各类数据发送方,用于收集数据;同时支持对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

flume 的数据流由事件(Event)贯穿始终。事件是 Flume 的基本数据单位,它携带日志数据并且携带有头信息,这些 Event 由 Agent 外部的 Source 生成,当 Source 捕获事件后会进行特定的格式化,然后 Source 会把事件推入(单个或多个) Channel 中。可以把 Channel 看作是一个缓冲区,它将保存事件直到 Sink 处理完该事件。

Sink 负责持久化日志或者把事件推向另一个 Source。

Flume 具备高可靠性

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:

1、end-to-end:收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。

2、Store on failure:这也是scribe采用的策略,当数据接收方crash崩溃时,将数据写到本地,待恢复后,继续发送。

3、Best effort:数据发送到接收方后,不会进行确认。

Flume 架构组成和核心概念

# client: 生产数据的地方,运行在一个独立的线程。

# event: 生产的数据,可以是日志记录、 avro 对象等,如果是文本文件通常是一行记录。

# agent: flume 核心组件,flume 以 Agent 为最小的独立运行单位。一个 agent 就是一个 jvm, agent 又是由 source, channel, sink 等构建而成。

agent 由 source, channel, sink 等构建而成:

3.1 Source:从 Client 收集数据,传递给 Channel

不同的 source,可以接受不同的数据格式,比如监视外部源–目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。source 组件可以处理各种格式的日志数据,eg:avro Sources、thrift Sources、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。

Avro Source:支持Avro协议(实际上是Avro RPC),内置支持|

Thrift Source:支持Thrift协议,内置支持

Exec Source:基于Unix的command在标准输出上生产数据

JMS Source:从JMS系统(消息、主题)中读取数据

Spooling Directory Source:监控指定目录内数据变更

Twitter 1% firehose Source:通过API持续下载Twitter数据,试验性质

Netcat Source:监控某个端口,将流经端口的每一个文本行数据作为Event输入

Sequence Generator Source:序列生成器数据源,生产序列数据

Syslog Sources:读取syslog数据,产生Event,支持UDP和TCP两种协议

HTTP Source:基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式

Legacy Sources:兼容老的Flume OG中Source(0.9.x版本)

详细参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-sources

3.2、Channel:连接 sources 和 sinks

有点像一个队列,是一个存储池,接收 source 的输出,直到有 sink 消费掉 channel 中的数据,channel 中的数据直到进入下一个 channel 或者进入 sink 才会被删除,当 sink 写入失败后,可以自动重启,不会造成数据丢失。临时存放的数据可以存放在memory Channel、jdbc Channel、file Channel、自定义。

Memory Channel:Event数据存储在内存中

JDBC Channel:Event数据存储在持久化存储中,当前Flume Channel内置支持Derby

File Channel:Event数据存储在磁盘文件中

Spillable Memory Channel:Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件

Pseudo Transaction Channel:测试用途

Custom Channel:自定义Channel实现

详细参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-channels

3.3、Sink:从Channel收集数据,运行在一个独立线程

用于把数据发送到目的地的组件目的地包括 hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义。

详参考官网:http://flume.apache.org/FlumeUserGuide.html#flume-sinks

flume可以支持

1、多级 flume的 agent,(即多个 flume 可以连成串,上一个 flume 可以把数据写到下一个 flume 上)

2、支持扇入(fan-in):source 可以接受多个输入

3、扇出(fan-out):sink 可以输出到多个目的地

3.4、其他几个组件

Interceptor:作用于Source,按照预设的顺序在必要地方装饰和过滤events。

Channel Selector:允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel

Sink Processor:多个Sink可以构成一个Sink Group。Sink Processor可以通过组中所有Sink实现负载均衡;也可以在一个Sink失败时转移到另一个。

FLUME NG的基本架构的更多相关文章

  1. 【转】Flume(NG)架构设计要点及配置实践

    Flume(NG)架构设计要点及配置实践   Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...

  2. Flume NG基本架构与Flume NG核心概念

    导读 Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中. 由原来的Flume OG到现在的Flume NG, ...

  3. 高可用Hadoop平台-Flume NG实战图解篇

    1.概述 今天补充一篇关于Flume的博客,前面在讲解高可用的Hadoop平台的时候遗漏了这篇,本篇博客为大家讲述以下内容: Flume NG简述 单点Flume NG搭建.运行 高可用Flume N ...

  4. Flume应用场景及架构原理

    Flume概念 Flume是一个分布式.可靠.和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力. ...

  5. Flume NG简介及配置

    Flume下载地址:http://apache.fayea.com/flume/ 常用的分布式日志收集系统: Apache Flume. Facebook Scribe. Apache Chukwa ...

  6. Flume NG 简介及配置实战

    Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...

  7. 【Flume NG用户指南】(1)设置

    作者:周邦涛(Timen) Email:zhoubangtao@gmail.com 转载请注明出处:  http://blog.csdn.net/zhoubangtao/article/details ...

  8. flume用场景及架构原理

    Flume是什么 1.flume可以将采集到的数据存储到HDFS上,也可以放在Hbase上. 2.flume就是一个中间插件,他的作用就是屏蔽数据源和数据存储系统的差异.可以在不同的数据源采集数据,因 ...

  9. 分布式实时日志系统(二) 环境搭建之 flume 集群搭建/flume ng资料

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

随机推荐

  1. Csharp:jquery.ajax-combobox

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. 约瑟夫问题 -- python实现

    问题描述 N个人围成一个圈, 从第一个人开始报数, 报到M的人出圈, 剩下的人继续从1开始报数, 报到M的人出圈;如此往复, 直到所有人出圈. 列表解决 def solution_list(n, m) ...

  3. Zuul Swagger 整合

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy ...

  4. Apply Grouping to List View Data 将分组应用于列表视图数据

    This lesson will teach you how to apply grouping to List View data. For this purpose, you will group ...

  5. CAD制图初学入门如何学好CAD?CAD大神总结5点诀窍,必须收藏

    现在有很多的小伙伴们都加入到了CAD这个大家庭中,一开始都是都是一脸懵的状态,更不知要从何入手! 小编才开始也是,但是只要掌握好CAD的技巧和脊髓,一切都不是事.CAD大神总结5点诀窍,悄悄告诉你,必 ...

  6. 轻松定位CPU飙高问题

    以下四步轻松定位CPU飙高问题: ①top pid 查看cpu耗CPU进程 ②top -Hp pid 查看该进程所有线程的运行情况,找到占用 CPU 过高的线程 pid ③ printf %x pid ...

  7. jquery仿淘宝购物车页面商品结算(附源码)

    1.效果图如下: 2.源码如下: html部分: <!doctype html> <html lang="en"> <head> <met ...

  8. Java之Collection接口(单列集合根接口)

    集合概述 集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组既然都是容器,它们有啥区别呢? 区别1: 数组的长度是固定的. 集合的长度是可变的. 区别2:  数组 ...

  9. Windows中安装Pytorch和Torch

    近年来,深度学习框架如雨后春笋般的涌现出来,如TensorFlow.caffe.caffe2.PyTorch.Keras.Theano.Torch等,对于从事计算机视觉/机器学习/图像处理方面的研究者 ...

  10. Linux下部署SSM,通过启动tomcat即可运行

    Linux下部署SSM项目 1. Java环境配置(JRE&JDK) 安装JDK8:sudo yum install java-1.8.0-openjdk 将操作系统配置为默认使用JDK8:s ...