flume简介与安装配置

目录

 

1 flume简介

2 flume安装

1) 解压并安装

2) 修改配置文件

3) 启动flume

3 flume常用配置

1)source类型

(1)Avro Source

(2)Taildir Source

(3)Syslog Sources

2)cannnel类型:

(1) memory

(2)file

3)sink类型:

(1)kafka

(2)avro

4 部署类型

1)单一流程

2)多代理流程(多个agent顺序相连)

3)流的合并(多个agent的数据汇聚到同一个agent)

4)多路复用流(多级流)

复制选择器

多路复用选择器

5)故障转移与负载均衡

故障转移

负载均衡


1 flume简介

flume是分布式的海量日志采集、聚合和传输的系统。从各类数据发送方接收数据进行简单处理后再写到各数据接收方。

配置项名称介绍:

a1.sources = r1 r2
a1.channels = c1 c2
a1.sinks = k1 k2

a1:flume节点名称,启动时通过参数命令-name指定。

a1.sources:监听的源,若有多个用空格隔开,用于收集数据并发送到channel。

a1.channels:临时通道,若有多个用空格隔开,存放source收集的数据,sink从这里读取数据。

a1.sinks:接收器,若有多个用空格隔开,从channel读取数据,并发送给目标 。

 

a1.sources.r1.type:源的类型,r1是源名称,可以是目录、日志文件、监听端口等。 常用的source的类型包括avro、exec、netcat、spooldir和syslog等。

a1.channels.c1.type:通道的类型,c1为通道名称,= memory表示为常用的memory-channel,同时也有其他类型的channel,如JDBC、file-channel、custom-channel等。

a1.sinks.k1.type:接收器类型,k1为接收器名称, = logger表示直接写入日志, 常用的包括avro、logger、HDFS、Hbase以及kafka等。

 

 

2 flume安装

1) 解压并安装

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

mv apache-flume-1.8.0-bin /opt/sqm

2) 修改配置文件

cd /opt/sqm/apache-flume-1.8.0-bin/conf

vi flume.conf

配置文件在文章后面。

3) 启动flume

nohup /opt/sqm/apache-flume-1.8.0-bin/bin/flume-ng agent --conf /opt/sqm/apache-flume-1.8.0-bin/conf --conf-file /opt/sqm/apache-flume-1.8.0-bin/conf/image_load.conf --name a1 -Dflume.root.logger=INFO,console &

此启动脚本为后台启动,因为指定的全路径,可在任一目录启动。

--conf:指定配置文件夹,包含flume-env.sh和log4j的配置文件

--conf-file:.conf 配置文件的地址

--name:agent(flume节点)名称

3 flume常用配置

1)source类型

(1)Avro Source

a1.sources.r1.type = avro

a1.sources.r1.channels = c1 c2

a1.sources.r1.bind = 0.0.0.0

a1.sources.r1.port = 20001

a1.sources.r1.selector.type= multiplexing

# selector配置

a1.sources.r1.selector.header = logType

a1.sources.r1.selector.mapping.scsp_login = c1

a1.sources.r1.selector.mapping.scsp_auth = c2

(2)Taildir Source

a1.sources.r1.type = TAILDIR

a1.sources.r1.channels = c1

a1.sources.r1.positionFile = /scsp_taildir_position.json # json记录文件断点续传的位置,程序默认创建

a1.sources.r1.filegroups = f1 f2

a1.sources.r1.filegroups.f1 = /scsp_login.*.log    #正则匹配需要采集的SCSP登录日志

a1.sources.r1.headers.f1.logType = scsp_login

a1.sources.r1.filegroups.f2 = /scsp_auth.*.log    # 正则匹配需要采集的SCSP鉴权日志

a1.sources.r1.headers.f2.logType = scsp_auth

a1.sources.r1.batchSize = 1000

(3)Syslog Sources

a1.sources.s1.type = org.apache.flume.source.SyslogTcpSource

a1.sources.s1.port = 9511

a1.sources.s1.host = 10.221.xxx.xx

a1.sources.s1.channels = c1

2)cannnel类型:

(1) memory

a1.channels.c1.type = memory

a1.channels.c1.capacity = 300000

a1.channels.c1.transactionCapactiy = 20000

a1.channels.c1.keep-alive = 30

 

属性

默认值

解释

type

组件类型,这个是: memory

capacity

100

内存中存储 Event 的最大数

transactionCapacity

100

source 或者 sink 每个事务中存取 Event 的操作数量(不能比 capacity 大)

keep-alive

3

添加或删除一个 Event 的超时时间(秒)

byteCapacityBufferPercentage

20

指定 Event header 所占空间大小与 channel 中所有 Event 的总大小之间的百分比

byteCapacity

 

Channel 中最大允许存储所有 Event 的总字节数(bytes)。默认情况下会使用JVM可用内存的80%作为最大可用内存(就是JVM启动参数里面配置的-Xmx的值)。 计算总字节时只计算 Event 的主体,这也是提供 byteCapacityBufferPercentage 配置参数的原因。注意,当你在一个 Agent 里面有多个内存 channel 的时候, 而且碰巧这些 channel 存储相同的物理 Event(例如:这些 channel 通过复制机制( 复制选择器 )接收同一个 source 中的 Event), 这时候这些 Event 占用的空间是累加的,并不会只计算一次。如果这个值设置为0(不限制),就会达到200G左右的内部硬件限制。

(2)file

a1.channels.quartz_product_c1.type = file
a1.channels.quartz_product_c1.checkpointDir = /opt/flume/chk/master/quartzProduct
a1.channels.quartz_product_c1.dataDirs = /opt/flume/data/master/quartzProduct
a1.channels.quartz_product_c1.minimumRequiredSpace = 51200

属性

默认值

解释

type

组件类型,这个是: file.

checkpointDir

~/.flume/file-channel/checkpoint

记录检查点的文件的存储目录

useDualCheckpoints

false

是否备份检查点文件。如果设置为 true , backupCheckpointDir 参数必须设置。

backupCheckpointDir

备份检查点的目录。 此目录不能与**数据目录**或检查点目录 checkpointDir 相同

dataDirs

~/.flume/file-channel/data

逗号分隔的目录列表,用于存储日志文件。 在不同物理磁盘上使用多个目录可以提高文件channel的性能

transactionCapacity

10000

channel支持的单个事务最大容量

checkpointInterval

30000

检查点的时间间隔(毫秒)

maxFileSize

2146435071

单个日志文件的最大字节数。这个默认值约等于2047MB

minimumRequiredSpace

524288000

最小空闲空间的字节数。为了避免数据损坏,当空闲空间低于这个值的时候,文件channel将拒绝一切存取请求

capacity

1000000

channel的最大容量

keep-alive

3

存入Event的最大等待时间(秒)

use-log-replay-v1

false

(专家)是否使用老的回放逻辑 (Flume默认是使用v2版本的回放方法,但是如果v2版本不能正常工作可以考虑通过这个参数改为使用v1版本,v1版本是从Flume1.2开始启用的,回放是指系统关闭或者崩溃前执行的校验检查点文件和文件channel记录是否一致程序)

use-fast-replay

false

(专家)是否开启快速回放(不适用队列)

checkpointOnClose

true

channel关闭时是否创建检查点文件。开启次功能可以避免回放提高下次文件channel启动的速度

encryption.activeKey

加密数据所使用的key名称

encryption.cipherProvider

加密类型,目前只支持:AESCTRNOPADDING

encryption.keyProvider

key类型,目前只支持:JCEKSFILE

encryption.keyProvider.keyStoreFile

keystore 文件路径

encrpytion.keyProvider.keyStorePasswordFile

keystore 密码文件路径

encryption.keyProvider.keys

所有key的列表,包含所有使用过的加密key名称

encyption.keyProvider.keys.*.passwordFile

可选的秘钥密码文件路径

3)sink类型:

(1)kafka

a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink

a1.sinks.k1.kafka.topic = image_load

a1.sinks.k1.kafka.bootstrap.servers =ip01:9092,ip02:9092,ip03:9092,ip04:9092

a1.sinks.k1.kafka.producer.acks = 1

a1.sinks.k1.flumeBatchSize = 1000

a1.sinks.k1.channel = c1

 

(2)avro

a1.sinks.k1.type = avro

a1.sinks.k1.channel = c1

a1.sinks.k1.hostname = xxx

a1.sinks.k1.port = 20001

 

自己用过的配置:

1)Taildir Source + Memory Channel + Avro Sink

2)Avro Source + Memory Channel + Kafka Sink

3)Syslogtcp Source + Memory Channel + Kafka Sink

我是将1)和2)配合使用的,但是要注意的是,先启动2)再启动1)。

 

 

4 部署类型

1)单一流程

 

2)多代理流程(多个agent顺序相连)

为了能让数据流在多个Agent之间传输,前一个Agent的sink必须和后一个Agent的source都需要设置为avro类型并且指向相同的hostname(或者IP)和端口

 

3)流的合并(多个agent的数据汇聚到同一个agent)

这种情况应用的场景比较多,比如要收集Web网站的用户行为日志, Web网站为了可用性使用的负载集群模式,每个节点都产生用户行为日志,可以为每个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统,如HDFS上。

 

4)多路复用流(多级流)

从Agent foo扇出流到多个channel中。这种扇出的机制可以是复制或者选择。        

当配置为复制的时候,每个Event都被发送到3个channel上。        

当配置为选择的时候,当Event的某个属性与配置的值相匹配时会被发送到对应的channel。

复制选择器

它是默认的选择器

属性

默认值

解释

selector.type

replicating

replicating

selector.optional

指定哪些channel是可选的,多个用空格分开

a1.sources = r1
a1.channels = c1 c2 c3
a1.sources.r1.selector.type = replicating
a1.sources.r1.channels = c1 c2 c3
a1.sources.r1.selector.optional = c3

上面这个例子中,c3配置成了可选的。向c3发送数据如果失败了会被忽略。c1和c2没有配置成可选的,向c1和c2写数据失败会导致事务失败回滚。

多路复用选择器

属性

默认值

解释

selector.type

replicating

组件类型,这个是: multiplexing

selector.header

flume.selector.header

想要进行匹配的header属性的名字

selector.default

指定一个默认的channel。如果没有被规则匹配到,默认会发到这个channel上

selector.mapping.*

一些匹配规则,具体参考下面的例子

a1.sources = r1
a1.channels = c1 c2 c3 c4
a1.sources.r1.selector.type = multiplexing
a1.sources.r1.selector.header = state        #以每个Event的header中的state这个属性的值作为选择channel的依据
a1.sources.r1.selector.mapping.CZ = c1       #如果state=CZ,则选择c1这个channel
a1.sources.r1.selector.mapping.US = c2 c3    #如果state=US,则选择c2 和 c3 这两个channel
a1.sources.r1.selector.default = c4          #默认使用c4这个channel

 

5)故障转移与负载均衡

Sink groups允许组织多个sink到一个实体上。       

Sink processors能够提供在组内所有Sink之间实现负载均衡的能力,而且在失败的情况下能够进行故障转移从一个Sink到另一个Sink。

 

故障转移

故障转移组逻辑处理器维护了一个发送Event失败的sink的列表,保证有一个sink是可用的来发送Event。        

故障转移机制的工作原理是将故障sink降级到一个池中,在池中为它们分配冷却期(超时时间),在重试之前随顺序故障而增加。 Sink成功发送事件后,它将恢复到实时池。sink具有与之相关的优先级,数值越大,优先级越高。 如果在发送Event时Sink发生故障,会继续尝试下一个具有最高优先级的sink。 例如,在优先级为80的sink之前激活优先级为100的sink。如果未指定优先级,则根据配置中的顺序来选取。        

要使用故障转移选择器,不仅要设置sink组的选择器为failover,还有为每一个sink设置一个唯一的优先级数值。 可以使用 maxpenalty 属性设置故障转移时间的上限(毫秒)。

属性

默认值

解释

sinks

这一组的所有sink名,多个用空格分开

processor.type

default

组件类型,这个是: failover

processor.priority.<sinkName>

组内sink的权重值,<sinkName>必须是当前组关联的sink之一。数值(绝对值)越高越早被激活

processor.maxpenalty

30000

发生异常的sink最大故障转移时间(毫秒)

a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = failover
a1.sinkgroups.g1.processor.priority.k1 = 5
a1.sinkgroups.g1.processor.priority.k2 = 10
a1.sinkgroups.g1.processor.maxpenalty = 10000

 

负载均衡

负载均衡Sink 选择器提供了在多个sink上进行负载均衡流量的功能。 它维护一个活动sink列表的索引来实现负载的分配。 默认支持了轮询(round_robin)和随机(random)两种选择机制分配负载。 默认是轮询,可以通过配置来更改。也可以从 AbstractSinkSelector 继承写一个自定义的选择器。        

工作时,此选择器使用其配置的选择机制选择下一个sink并调用它。 如果所选sink无法正常工作,则处理器通过其配置的选择机制选择下一个可用sink。 此实现不会将失败的Sink列入黑名单,而是继续乐观地尝试每个可用的Sink。如果所有sink调用都失败了,选择器会将故障抛给sink的运行器。        

如果backoff设置为true则启用了退避机制,失败的sink会被放入黑名单,达到一定的超时时间后会自动从黑名单移除。 如从黑名单出来后sink仍然失败,则再次进入黑名单而且超时时间会翻倍,以避免在无响应的sink上浪费过长时间。 如果没有启用退避机制,在禁用此功能的情况下,发生sink传输失败后,会将本次负载传给下一个sink继续尝试,因此这种情况下是不均衡的。

属性

默认值

解释

processor.sinks

这一组的所有sink名,多个用空格分开

processor.type

default

组件类型,这个是: load_balance

processor.backoff

false

失败的sink是否成倍地增加退避它的时间。 如果设置为false,负载均衡在某一个sink发生异常后,下一次选择sink的时候仍然会将失败的这个sink加入候选队列; 如果设置为true,某个sink连续发生异常时会成倍地增加它的退避时间,在退避的时间内是无法参与负载均衡竞争的。退避机制只统计1个小时发生的异常,超过1个小时没有发生异常就会重新计算

processor.selector

round_robin

负载均衡机制,可选值:round_robin (轮询)、 random (随机选择)、「自定义选择器的全限定类名」:自定义的负载器要继承 AbstractSinkSelector

processor.selector.maxTimeOut

30000

发生异常的sink最长退避时间(毫秒) 如果设置了processor.backoff=true,某一个sink发生异常的时候就会触发自动退避它一段时间,这个 maxTimeOut 就是退避一个sink的最长时间

a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = load_balance
a1.sinkgroups.g1.processor.backoff = true
a1.sinkgroups.g1.processor.selector = random

 

 

记录一下,以免时间久了忘掉。若有问题,欢迎批评指正。

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值