共计 3171 个字符,预计需要花费 8 分钟才能阅读完成。
1.Flume 概述
flume 是一个分布式、牢靠、和高可用的海量日志采集、聚合和传输的零碎。
反对在日志零碎中定制各类数据发送方,用于收集数据;
同时,Flume 提供对数据进行简略解决,并写到各种数据接受方 (比方文本、HDFS、Hbase 等) 的能力。
2.Flume 根底组成
2.1 Agent
Flume 运行外围是 Agent,Agent 是一个 JVM 过程,它以 Event(事件)的模式将数据从源头送到目的地。
一个 Agent 含有三个外围组件,别离是 source、channel、sink。
2.2 Event
数据传输单元,由 Header 和 Body 两局部形成,Header 用来寄存该 event 的一些属性,为 K - V 构造,Body 用来寄存该条数据,模式为字节数组。
2.3 Source
Source 组件能够解决各种类型、各种格局的日志数据,包含 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy,同样反对自定义 source。
2.4 Channel
直达 Event 的一个长期存储,保留由 Source 组件传递过去的 Event。它是 Source 和 Sink 之间的缓冲区,且是线程平安的,能够同时解决多个 Source 的写入和 Sink 的读取操作。
罕用的有两种 channel:MemoryChannel 和 FileChannel。
memory channel 是内存中的队列,可能实现高速的吞吐,毛病就是机器宕机、程序重启或者挂了都会导致数据失落。
File channel 是将事件写入磁盘,可能长久化保留数据
2.5 Sink
轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引零碎、或者被发送到另一个 Flume Agent,反对自定义 sink
3.Flume 装置部署
Flume 装置部署非常简单
# 1. 上传 jar 包至服务器
# 2. 创立装置目录
sudo mkdir /opt/apps
sudo chown v2admin:v2admin -R /opt/apps
# 3. 解压
tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/apps
cd /opt/apps
mv apache-flume-1.9.0-bin flume
# 4. 批改环境变量
sudo vim /etc/profile
.....
// 在最初增加如下
export FLUME_HOME=/opt/apps/flume
export PATH=$PATH:$FLUME_HOME/bin
.....
source /etc/profile
# 5. 批改配置文件
cd /opt/apps/flume/conf
cp flume-env.sh.template flume-env.sh
vim flume-env.sh
....
export JAVA_HOME=/usr/local/jdk8
// 改成本人的 java 目录
....
至此部署实现,可通过 flume-ng version 查看版本
[v2admin@hadoop10 conf]$ flume-ng version
Flume 1.9.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: d4fcab4f501d41597bc616921329a4339f73585e
Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018
From source with checksum 35db629a3bda49d23e9b3690c80737f9
4 Flume 部署类型
4.1 繁多流程
这是最简略的部署形式。
4.2 串联
能够将多个 Agent 程序连接起来,将最后的数据源通过收集,存储到最终的存储系统中,个别状况下,应该管制这种程序连贯的 Agent 的数量,
Agent 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点宕机,会影响整个传输零碎。
4.3 多个流的聚合
这种模式是最常见的,也最罕用的模式。
例如,一些 web 利用通常散布在上百个服务器,大者甚至上千个、上万个服务器,产生的日志,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的 flume,
再由此 flume 上传到 hdfs、hive、hbase 等,进行日志剖析。
4.4 多路复用
这种模式能够将雷同数据复制到多个 channel 中,或者将不同数据散发到不同的 channel 中,sink 能够抉择传送到不同的目的地。
当 java,nginx、tomcat 等混合在一起的日志流开始流入一个 flume 的 agent 后,能够应用这种模式,将 agent 中将混淆的日志流离开,
而后给每种日志建设一个本人的 Agent。
4.4 负载平衡和故障复原
Agent1 是一个路由节点,负责将 Channel 暂存的 Event 平衡到对应的多个 Sink 组件上,而每个 Sink 组件别离连贯到一个独立的 Agent 上,这个就是负载平衡。
同样也能够实现,当 Agent2、Agent3、Agent4 其中一个节点故障后,转移到其余节点上应用,实现故障转移。
5. 入门示例
- 应用 Flume 监听一个端口,收集该端口数据,并打印到控制台
这个示例是官网手册中有 查看地址 http://flume.apache.org/FlumeUserGuide.html
# 1. 装置 netcat,如果有就不须要装置了
sudo yum install -y nc
# 2. 配置(我的配置保留在 flume 下的 jobs 目录中)
cd /opt/apps/flumes
touch netcat-logger.conf
vim netcat-logger.conf
....
# 这是官网中的一个示例
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
....
# 3. 开启两个终端窗口
# 3.1 终端 1 开启监听
flume-ng agent -c conf/ -n a1 -f jobs/flume-netcat-logger.conf -Dflume.root.logger=INFO,console
# 3.2 终端 2 应用 netcat 工具向本机的 44444 端口发送内容
nc localhost 44444
....
hello world
OK
....
# 3.3 在监听端察看
....
2020-12-26 09:22:21,818 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)]
Event: {headers:{} body: 68 65 6C 6C 6F 20 77 6F 72 6C 64 hello world }
....