目录
1. 🥙Flume概述
1.1 Flume简介
1.2 Flume的架构
1. 🧀agent介绍
2. Agent 主要有 3 个部分组成,Source、Channel、Sink。
🥗2.1 Source
🥗2.2 Sink
🥗2.3 Channel
3. 🧀Flume 自带两种 Channel:Memory Channel 和 File Channel。
4. 🧀Event 介绍
2. 🥙Flume的安装配置
2.1 下载地址
2.2 安装部署
1. 🥙Flume概述
1.1 Flume简介
- Flume是一种可配置、高可用的数据采集工具,主要用于采集来自各种流媒体的数据(Web服务器的日志数据等)并传输到集中式数据存储区域。
- Flume 支持在日志系统中定制各种数据发送方,用于收集数据;并且可以对数据进行简单处理,将其写到可定制的各种数据接收方(如文本、HDFS、HBase等)。
- Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS。
1.2 Flume的架构
单个agent采集数据
多级agent之间串联-级联flume
1. 🧀agent介绍
Flume中最核心的角色是agent,flume采集系统就是由一个个agent连接起来所形成的一个或简单或复杂的数据传输通道。 对于每一个Agent来说,它就是一个独立的守护进程(JVM),它负责从数据源接收数据,并发往下一个目的地。
2. Agent 主要有 3 个部分组成,Source、Channel、Sink。
🥗2.1 Source
Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类型、各种格式的日志数据----》说白了就是就是数据来源
常用的Source类型 | 描述 |
Avro source | 监听Avro端口并且从外部Avro客户端接收Event需指定被监听的IP和端口号。 |
Exec Source | 可以通过指定的linux操作命令对日志进行读取,使用exec时需指定使用的命令 |
Spooling Directory Source | 读取目录里的文件,当出现新文件时会读取该文件并获取数据(文件在读取过程中不能修改) |
NetCat source | 监听指定的端口并将接收到的数据的每一行转换为一个事件。 |
Kafka Source | 作为一个消费者,从Kafka的topic读取消息 |
Http Source | 接收HTTP 的GET和POST请求作为Flume的事件 |
TailDir Source | 监控目录里的正则文件,并支持断点续传。 |
🥗2.2 Sink
下沉组件,用于往下一级agent传递数据或者向最终存储系统传递数据。Sink 组件目的地包括 hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义。-----》数据最终写出的位置
常用的Sink类型 | 描述 |
Logger Sink | 将数据写到Flume的log中,通常用于测试或者调试 |
Avro Sink | 将数据发送给其他Avro Source |
File Roll Sink | 将数据存放在本地文件系统中,根据时间或者大小生成文件 |
Kafka Sink | 将数据写入Kakfa中 |
HBase Sink | 将数据写入Hbase |
AsyncHbase Sink | 使用异步的方式将数据写入Hbase |
Hive Sink | 将数据写入Hive |
HDFS Sink | 将数据写入HDFS |
ElasticSearch Sink | 将数据写入ElasticSearch |
MorphilineSoir Sink | 将数据写入Soir |
🥗2.3 Channel
Channel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许 Source 和 Sink 运作在不同的速率上。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个Sink 的读取操作。------》中间的缓冲区
常用的Channel类型 | 描述 |
Memory Channel(常用) | 储存Event在内存队列中,如果宕机可能会造成数据的丢失,具有很高的吞吐量 |
JDBC Channel | 将Event储存在持久化的数据库中 |
Kafka Channel(常用) | 将Event储存在Kafka中,Kakfa提供了高可用和复制性,当Kafka或agent崩溃时也不会丢失 |
File Channel(常用) | 将Event持久化在本地文件系统里(性能较差),但可以保证数据不会丢失 |
Spillable Memory Channel | Event数据存储在内存和磁盘上,当内存队列满了将会持久化到磁盘文件(新加的,不稳定) |
3. 🧀Flume 自带两种 Channel:Memory Channel 和 File Channel。
- Memory Channel 是内存中的队列。Memory Channel 在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么 Memory Channel 就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。
- File Channel 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。
4. 🧀Event 介绍
数据agent内部数据流转的封装形式;
- Source组件在获取到原始数据后,需要封装成Event放入channel; Sink组件从channel中取出Event后,需要根据目标存储的需求,转成其他形式的数据输出。
- Event封装对象主要有两部分组成: Headers和 Body
- header是一个集合 Map[String,String],用于携带一些KV形式的元数据(标志、描述等) body: 就是一个字节数组byte[];装载具体的数据内容
Event: {
headers:HashMap<String,String> ==> {host=doitedu01,timestamp=17623745832457} 元数据
body:byte[] ==> 61 20 61 20 61 61 61 20 61 20 0D 字节数据
}
2. 🥙Flume的安装配置
Flume的安装非常简单,只需要解压即可,当然,前提是已有hadoop环境
2.1 下载地址
(1)Flume 官网地址:Welcome to Apache Flume — Apache Flume
(2)文档查看地址:Flume 1.11.0 User Guide — Apache Flume
(3)下载地址:Index of /dist/flume
2.2 安装部署
上传安装包到数据源所在节点上,然后解压
tar -zxvf apache-flume-1.11.0-bin.tar.gz