Flume1.7安装

 2017-03-25 23:01:05     Flume  数据收集   1408


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

Flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

Flume的可靠性


当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。

Flume的一些核心概念


  • Agent:每台机器可以运行一个或多个Agent,一个Agent是由Source、Channel、Sink组成
  • Event:一个数据单元,用来传输,每条数据就是一个Event
  • Source:负责收集数据,将数据转为Event,并传递给Channel
  • Sink:从Channel中获取Event,做相关业务操作,并将获取的Event从Channel中移除,支持
  • Channel:连接Source和Sink,类似于队列

几种部署模式


  • 1、 简单模式

简单模式

通过Source收集数据,Channel用来临时存储,Sink将数据发送到目的地,这里画的HDFS,也可以是其他数据存储媒介,或者直接是一定格式的文件。

  • 2、 串联模式

串联模式

A服务器上的Agent foo将数据传输到B服务器上的Agent bar。即上游的Sink将数据发送到下游的Source。

每个Agent都是独立的,但每个Agent又可以和其他的Agent连接起来。

  • 3、 合并模式(Consolidation)

合并模式

将集群服务器上的日志汇总到一台服务器上时,可以采用这种方式。

为了保证可靠性,一般在下游会有两个及以上的Agen(与Agent4同级),防止一个Agent出现异常时,可以切换到其他Agent上。即采用failover。

  • 4、 多路模式(Multiplexing)

多路模式

Source收集数据后,发送到多个Channel,每个Channel对应一个Sink。实现一条数据分发到不同的地方。

此模式适用将数据一次收集,多处使用。例如:数据的离线存储和实时计算,就可以采用这种方式(当然,离线和实时也可以采用其他方式)。

自定义组件


Source、Channel、Sink是Flume的三大组件接口,可以根据业务的不同选择具体的实现类。

Flume自带了许多三个组件的实现类,能满足大部分的需求。当然,可以自己实现接口,编写符合业务的组件。

例如:

  • 1、Source的exec类型,当Agent意外停止,下次重启服务时,无法知道服务停止前读取的位置,这样会导致丢失数据;如果自定义Source,记录下读取的位置,就可以解决这个问题
  • 2、Channel的memory是一种很高效的选择,但同样会存在丢失数据的问题。根据美团技术网站的介绍,他们已经自定义了一个Channel,实现空闲时用memory,内存不足时切换到file
  • 3、自定义Sink使用较多,例如:将数据存入数据库或消息队列等,都可以由自定义Sink实现

拦截器


Flume自带interceptors功能,用于过滤、拦截数据。在Source收集到数据后,发送到Channel前,会调用interceptors。默认不做任何处理,当在配置了拦截方式后,才会调用。

Flume1.7自带的拦截器:

  • Timestamp Interceptor
  • Host Interceptor
  • Static Interceptor
  • UUID Interceptor
  • Morphline Interceptor
  • Search and Replace Interceptor
  • Regex Filtering Interceptor
  • Regex Extractor Interceptor

事务


Flume是支持事务的,事务的粒度是组件级别,即能在每个组件上实现事务。

注意事项


  • Channel的选择,一定要根据业务情况来定,file方式是最可靠的,但对磁盘读写要求较高(可以使用SSD),否则在高峰期延迟会很大。memory要考虑内存溢出,异常的数据恢复等问题
  • 修改配置不用重启Agent,服务会自动重启

安装


注意:

  • 需要Jdk版本为7+的Java环境
  • 系统需要有足够的内存供sources、channels、sinks使用
  • 对操作的目录文件要有相应的读或写权限
cd /opt/apps

wget http://mirrors.hust.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz

tar -zxvf apache-flume-1.7.0-bin.tar.gz

ln -s /opt/apps/apache-flume-1.7.0-bin /opt/apps/flume

修改配置文件

flume-env.sh 为每个 agent 都会引用的公用配置。

修改 flume-env.sh 配置:

export JAVA_HOME=/usr/local/jdk1.8.0_101

#此处内存设置根据服务器配置和Nginx日志的容量来定。还可以在这里配置JVM监控
export JAVA_OPTS="-Xms1024m -Xmx2048m -Xss256k -Xmn1024m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -Xloggc:/work/app/flume/logs/server-gc.log.$(date +%F) -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=200M"

export JAVA_OPTS="$JAVA_OPTS -Dorg.apache.flume.log.rawdata=true -Dorg.apache.flume.log.printconfig=true "

设置 agent 配置文件。

cd flume

cp conf/flume-conf.properties.template conf/flume-conf-test.properties

我们以数据入Kafka为例,flume-conf-test.properties 配置如下:

a1.sources = s1
a1.channels = c1
a1.sinks = k1

a1.sources.s1.type = exec
a1.sources.s1.command = tail -F /work/app/logs/applog.log
a1.sources.s1.batchSize = 1000
a1.sources.s1.batchTimeout = 3000
a1.sources.s1.channels = c1


a1.channels.c1.type = memory
a1.channels.c1.capacity = 200000
a1.channels.c1.transactionCapacity = 20000
a1.channels.c1.byteCapacityBufferPercentage = 20
a1.channels.c1.byteCapacity = 10000000

a1.sinks.k1.channel = c1
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = test
a1.sinks.k1.kafka.bootstrap.servers = kafka02:9092,kafka02:9092,kafka03:9092
a1.sinks.k1.kafka.flumeBatchSize = 10000
a1.sinks.k1.kafka.producer.acks = 1
#a1.sinks.k1.kafka.producer.linger.ms = 5
#a1.sinks.ki.kafka.producer.compression.type = snappy

启动一个agent

配置了flume-env.sh:

./bin/flume-ng agent -n a1 -c conf -f conf/flume-conf-test.properties -Dflume.root.logger=INFO,DAILY -Dflume.log.dir=/work/app/flume/logs -Dflume.log.file=flume-test.log -DappFlag=flume-test

#也可以对 agent 加上监控
./bin/flume-ng agent -n a1 -c conf -f conf/flume-conf-test.properties -Dflume.root.logger=INFO,DAILY -Dflume.log.dir=/work/app/flume/logs -Dflume.log.file=flume-test.log -DappFlag=flume-test -Dflume.monitoring.type=http -Dflume.monitoring.port=1100 &

以上是简单的配置使用,如果想实现上面介绍的几种部署模式,可以看官网的使用说明,很详细的。

参考