1、概述

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

PS:在HDFS中,文件只作为目录项存在,在文件关闭前,其长度一直显示为0。如果在一段时间内将数据写到文件中,但却没有将其关闭,那么一旦客户端出现网络中断,什么都得不到,只有一个空白的文件。

Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM.单个Agent由source、channel、sink三大组件构成。

input叫做source、output叫做sink,连接source与sink中间的部分叫做channel,它们中传输的是event.其图示如下:

说明:

  • source将data转化为event写入到一个或多个channel中。
  • channel作为event从source到sink传递的保留区。
  • sink只从一个channel中接收event。
  • agent可能会有多个source、channel与sink。
  • event:flume将数据表示为event,它是Flume的基本传输单位。它由0个或多个头与体组成。头是一些键值对,可用于路由判定或是承载其他结构化信息。体是字节数组,包含实际负载。每个event本质上是一个独立的记录,而不是记录的一部分。event结构如下图:

一个Agent可以连接一个或多个其他的Agent。一个Agent也可以从一个或多个Agent接收数据。通过相互连接的多个Agent,一个流作业被建立。这个Agent链条可以用于将数据从一个位置移动到另一个位置--特别是,从生产数据的应用程序到HDFS、HBase等。

拦截器是位于source和channel之间。可以用拦截器检查和修改flume的event,可在source创建event后或是channel发送event前链接0个或多个拦截器。

2、Source

exec源、syslog源

3、Channel

Channel包含2类channel:内存/非持久化通道与文件系统/持久化通道。应避免从Source到Channel的数据存储率大于Sink所能写发数据率,否则会出现channel堵塞。

flume只对每个独立agent中的每个channel提供事务保证。

文件通道的持久化能力是由WAL(Write Ahead Log)以一个或多个文件存储联合提供的。

通道选择器负责将数据从一source转向一个或多个channel上。flume自带两个通道选择器,可以包含大多数据使用场景。

  • 复制通道选择器(默认)将event的副本放到每个事先配置好的通道中。
  • 多路通道选择器会根据某些头信息将event写到不同的通道中。

4、Sink与SinkHandler

HDFS Sink的作用是持续打开HDFS中的文件,然后以流的方式将数据写入其中,并且在某个时间点关闭该文件再打开新的文件。

编解码器:用于通过各种压缩算法来压缩和解压缩数据。Flume支持gzip、bzip2、lzo和snappy。

事件序列化器:是Flume转换为另一种格式以进行输出的机制。text、avro

Sink Group:是Flume为了在数据处理Channel中消除单点失败,通过负载均衡或是故障恢复机制将event发送到不同sink的能力。它用于创建逻辑sink分组,该分组的行为是由sink processor来控制,它决定了事件的路由方式。Sink运行器(Sink Runner)运行一个Sink组,sink组可含有一个或多个Sink。如果组中只存在一个Sink,那么没有组将更有效率。Sink运行器仅仅是一个询问Sink组(或Sink)来处理下一批event集合。每Sink只能从一个Channel获取数据,尽管多个Sink可以从同一个Channel获取数据。选定的Sink(或如果没有组,唯一的Sink)从Channel中接收事件,并将事件写入下一阶段或最终目的地。流程如下:

5、拦截器、ETL

拦截器:可以实现数据处理管道中所必需的最后一个功能,就是即时检测与转换event。

Flume自带的拦截器:Timestamp、Host、static、正则表达式过滤、正则表达式抽取,也可以自定义拦截器。

Avro源/接收器

6、Flume监控

监控指标

  • data以期望的速度进入source中
  • data没有超出channel的限制
  • data以期望的速度离开sink

监控方式:

  • JMX
  • Monit
  • Nagios
  • Ganglia
  • 自定义监控勾子

7、实时日志收集注意点

1)、如果是在集群中,时间使用UTC

2)、对容量进行规划

3)、多数据中心需要考虑点

4)、收集的数据要合规

Source、Channel处理器、拦截器和Channel选择器之间的交互如下图:

9、Flume支持的数据流类型

1)、多Agent流

2)、合并流

3)、多通路流

10、综合示例:

2处的机器生成2种类型数据(即三角形与矩形),对应代理使用了多路通道选择器将这两种数据划分到了不同的通道中。矩形与1处机器产生的数据合并后分到了数据中心1,三角形分到数据中心2中的ES中。

注意:数据转换可能发生在任何source之后以及任何sink之前。

发送数据到Flume:Flume有两类发送数据到Flume Agent的程序性方法:Flume SDK和Embedded Agent API。Flume也自带有log4j appender,可以用来从应用程序发送数据到Flume Agent。

1、Flume基础扫盲的更多相关文章

  1. 不惧面试:HTTP协议(1) - 基础扫盲

    v博客前言 先交代下背景,之前在一家公司面试.NET开发,去了先是做一份笔试题,有一半是关于HTTP协议的,技术总监直接面试,也是问一大堆HTTP协议的知识点,可能跟该公司的产品有关,该公司属于互联网 ...

  2. javascript基础扫盲

    JavaScript基础扫盲 null和undefined 非十进制的表示方法 强制类型转换 运算 null和undefined null是一个是非来表示一个空对象的,故 typeof 的返回值是ob ...

  3. Java基础扫盲系列(-)—— String中的format

    Java基础扫盲系列(-)-- String中的format 以前大学学习C语言时,有函数printf,能够按照格式打印输出的内容.但是工作后使用Java,也没有遇到过格式打印的需求,今天遇到项目代码 ...

  4. 数据采集组件:Flume基础用法和Kafka集成

    本文源码:GitHub || GitEE 一.Flume简介 1.基础描述 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中 ...

  5. zigbee智能家居基础扫盲

    zigbee Zigbee是基于IEEE802.15.4标准的低功耗个域网协议.根据这个协议规定的技术是一种短距离.低功耗的无线通信技术.这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和&qu ...

  6. Linux系统(三)系统基础扫盲大全

    序言 如果大家都爱装逼,一般会偏爱使用安装最小化的liunx系统,那么你的系统就不带图形化的桌面功能,这样对于一个想装B的初学者来说,Liunx就是黑漆马虎,一望无际的黑屏,黑屏,如何快速的对liun ...

  7. 新手立体四子棋AI教程(1)——基础扫盲

    一.引言 最近身边好几个朋友开始玩立体四子棋,激起了我的好奇心.那么首先来说什么是[立体四子棋],规则又是如何呢? 上图即为立体四子棋,规则类似于五子棋四子连在一起,但是四子棋更加多样.丰富.不仅可以 ...

  8. 【Flume】Flume基础之安装与使用

    1.Flume简介 ​ (1) Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. ​ (2) Flume基于流式架构,容错性强, ...

  9. 《手把手教你》系列进阶篇之1-python+ selenium自动化测试 - python基础扫盲(详细教程)

    1. 简介 如果你从一开始就跟着宏哥看博客文章到这里,基础篇和练习篇的文章.如果你认真看过,并且手动去敲过每一篇的脚本代码,那边恭喜你,至少说你算真正会利用Python+Selenium编写自动化脚本 ...

随机推荐

  1. 使用Executor管理Thread对象详解

    java SE5的java.util.concurrent包中的执行器(Executor)是管理Thread对象的优选方法.使用Executor管理Thread对象可以简化并发编程. Executor ...

  2. VUE 结合 vue-resource 进行ajax操作

    有意思的! 初始化需要ajax获取数据! 搜索商品需要ajax获取数据! 提交数据需要ajax传递数据! 有了 vue-resource ,操作挺方便的. 这是html <form class= ...

  3. 指定library路径

    1.执行 ?.jar文件: 1.1.“java -jar ?.jar” 1.2.如果 ?.jar里面使用了JNI调用了 ?.dll/?.so 等文件,可能会报错 找不到相关的 库文件,如果这样的话,可 ...

  4. 【LABVIEW到C#】3》String的操作之Match Pattern Funtion.vi

    C#实现如下 using System; using System.Collections.Generic; using System.Text; using System.Text.RegularE ...

  5. visualvm监控jvm及远程jvm监控方法

    VisualVM是Sun的一个OpenJDK项目,其目的在于为Java应用创建一个整套的问题解决工具.它集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览H ...

  6. js实现城市二级联动列表

    这个是一个同事写的,我看着有用,就cv下来了. 程序功能主要逻辑是: 1.当一级标签市显示默认状态 '-请选择-'时,二级标签要隐藏 2.一级标签选中城市时,二级标签显示在页面,并列出响应市区 3.当 ...

  7. ORM 图书管理系统

    models.py(模型) from django.db import models # Create your models here. # 书 出版社 作者 作者详情表 # 书 class Boo ...

  8. ORM版,学生管理系统02

    学生管理系统 urls.py url(r'^student_list/$',views.student_list,name="student_list"), url(r'^dele ...

  9. InnoDB MVCC RR隔离级别下的数据可见性总结

    一.背景 熟悉数据库隔离级别的人都知道,在RR(可重复读)隔离级别下,无论何时多次执行相同的SELECT快照读语句,得到的结果集都是完全一样的,即便两次SELECT语句执行期间,其他事务已经改变了该查 ...

  10. 高级C/C++编译技术之读书笔记(四)之定位库文件

    最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...