一、概念
Flume 是 Cloudera 提供的一个高可用的, 高可靠的, 分布式的海量日志采集、 聚合和传输的系统。 Flume 基于流式架构, 灵活简单。
二、Flume 组成架构
1、Flume 架构中的组件
(1)Agent
Agent 是一个 JVM 进程, 它以事件的形式将数据从源头送至目的, 是 Flume 数据传输的基本单元。
Agent 主要有 3 个部分组成, Source、 Channel、 Sink。
(2) Source
Source 是负责接收数据到 Flume Agent 的组件。 Source 组件可以处理各种类型、 各种格式的日志数据, 包括 avro、 thrift、 exec、 jms、 spooling directory、 netcat、 sequence generator、syslog、 http、 legacy。
(3) Channel
Channel 是位于 Source 和 Sink 之间的缓冲区。 因此, Channel 允许 Source 和 Sink 运作在不同的速率上。 Channel 是线程安全的, 可以同时处理几个 Source 的写入操作和几个 Sink的读取操作。
Flume 自带两种 Channel: Memory Channel 和 File Channel 、Kafka Channel。
Memory Channel 是内存中的队列。 Memory Channel 在不关心数据是否丢失的情景下适用。 如果需要关心数据丢失, 那么 Memory Channel 就不应该使用, 因为程序死亡、 机器宕机或者重启都会导致数据丢失。
File Channel 将所有事件写到磁盘。 因此在程序关闭或机器宕机的情况下不会丢失数据。
(4)Sink
Sink 不断地轮询 Channel 中的事件且批量地移除它们, 并将这些事件批量写入到存储或索引系统、 或者被发送到另一个 Flume Agent。
Sink 是完全事务性的。 在从 Channel 批量删除数据之前, 每个 Sink 用 Channel 启动一个事务。 批量事件一旦成功写出到存储系统或下一个 Flume Agent, Sink 就利用 Channel 提交事务。 事务一旦被提交, 该 Channel 从自己的内部缓冲区删除事件。
Sink 组件目的地包括 hdfs、 logger、 avro、 thrift、 ipc、 file、 null、 HBase、 solr、 自定义Sink。
(5)Event
传输单元, Flume 数据传输的基本单元, 以事件的形式将数据从源头送至目的地。
Event由Header 和 Body 两部分组成,Header 用来存放 Event 的一些属性,为 K-V结构,Body用来存放该条数据,结构为字节数组。
三、Flume 拓扑结构
四、Flume Agent 内部原理
五、Centos7安装Flume
1、安装JDK
(1)查看系统有无自带JDK
rpm -qa |grep java
rpm -qa |grep jdk
rpm -qa |grep gcj
(2)如果有就使用批量卸载命令
rpm -qa | grep java | xargs rpm -e --nodeps
(3)直接yum安装1.8.0版本openjdk
yum install java-1.8.0-openjdk* -y
(4)查看版本
java -version
(5)配置环境变量
默认jre jdk 安装路径是/usr/lib/jvm 下面,如果使所有用户生效的配置
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin
(6)查看变量
echo $JAVA_HOME
echo $CLASSPATH
2、Centos7 安装 telnet 服务
#安装telnet
yum install telnet-server.x86_64
yum install telnet.x86_64
#安装xinetd
yum install xinetd.x86_64
#将xinetd服务加入开机自启动
systemctl enable xinetd.service
#将telnet服务加入开机自启动:
systemctl enable telnet.socket
#重启服务
systemctl start telnet.socket
systemctl start xinetd
(或service xinetd start)
3、安装并测试flume
(1)下载
apache-flume-1.7.0-bin.tar.gz
(2)解压 apache-flume-1.7.0-bin.tar.gz 到 /opt/software/ 目录下
tar -zxf apache-flume-1.7.0-bin.tar.gz -C /opt/software/
(3)修改 apache-flume-1.7.0-bin 的名称为 flume
mv apache-flume-1.7.0-bin flume
(4)配置
-
source 使用 necat 类型,
-
sink 采用 file_roll 类型,
-
从监听端口获取数据,保存到本地文件。 拷贝配置模板:
agent.sources = r1
agent.channels = c1
agent.sinks = s1
# For each one of the sources, the type is defined
agent.sources.r1.type = netcat
agent.sources.r1.bind = localhost
agent.sources.r1.port = 8888
# The channel can be defined as follows.
agent.sources.r1.channels = c1
# Each sink's type must be defined
agent.sinks.s1.type = file_roll
agent.sinks.s1.sink.directory = /tmp/log/flume
#Specify the channel the sink should use
agent.sinks.s1.channel = c1
# Each channel's type is defined.
agent.channels.c1.type = memory
# Other config values specific to each type of channel(sink or source)
# can be defined as well
# In this case, it specifies the capacity of the memory channel
agent.channels.c1.capacity = 100
(5)功能验证
建立输出目录
mkdir -p /tmp/log/flume
启动服务
运行日志位于logs目录,或者启动时添加-Dflume.root.logger=INFO,console 选项前台启动,输出打印日志,查看具体运行日志,服务异常时查原因。
发送数据
telnet localhost 8888
输入
hello world!
hello Flume!
查看数据文件 查看 /tmp/log/flume 目录文件
cd /tmp/log/flume/
# 文件名不同,需要根据实际情况修改和查看
cat /tmp/log/flume/1570096155175-5
cat /tmp/log/flume/1570096155175-6