一、Flume 概述及安装

一、概念

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 directorynetcat、 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值