Flume Channel

来源:互联网 发布:东莞理工 学而知不足 编辑:程序博客网 时间:2024/06/05 15:11

Channels are the repositories where the eventsare staged on a agent. Source adds the events and Sink removes it

一Memory Channel

events存储在内存队列

type:memory

capacity:channel中存储的最大数量的events,默认100

transactionCapacity:每一次事务从source取多少event,或者给sink多少,默认100

keep-alive:添加或者删除event的秒数

byteCapacityBufferPercentage: 定义缓存百分比,默认20

byteCapacity:最大内存所有事件允许总字节数

 

例子:

a1.channels.c1.type= memory

a1.channels.c1.capacity= 10000

a1.channels.c1.transactionCapacity= 10000

a1.channels.c1.byteCapacityBufferPercentage= 20

a1.channels.c1.byteCapacity= 800000

 

优点:速度快

缺点:如果一旦宕机或者重启,Channel中的event就没有了,缺乏安全性

 

二JDBC Channel

 

events存储在数据库,其实我们也可以知道,肯定影响性能。

type:jdbc

db.type:数据库厂商

driver.class:JDBC driver

driver.url:JDBC url

db.username:用户名

db.password:密码

connection.properties.file:JDBC 连接属性文件

maximum.connections:允许的最大连接数

maximum.capacity:允许的最大容量

 

例子:

a1.channels.c1.type= jdbc

 

三Kafka Channel

将events 存储在kafka集群

type:org.apache.flume.channel.kafka.KafkaChannel

brokerList: kafka 集群 broker列表,多个用逗号隔开

zookeeperConnect:kafka集群使用的zookeeper的URI

topic:Channel使用kafka的topic

 

例子

a1.channels.channel1.type   =org.apache.flume.channel.kafka.KafkaChannel

a1.channels.channel1.capacity= 10000

a1.channels.channel1.transactionCapacity= 1000

a1.channels.channel1.brokerList=kafka-2:9092,kafka-3:9092

a1.channels.channel1.topic=channel1

a1.channels.channel1.zookeeperConnect=kafka-1:2181

 

四File Channel

type:file

checkpointDir:检测点文件所存储的目录,默认~/.flume/file-channel/checkpoint

useDualCheckpoints:备份检测点如果设置为true,backupCheckpointDir必须设置

backupCheckpointDir:备份检测点的备份到所在的目录,不要与数据检测点或者目录重复

dataDirs:数据存储所在的目录设置,默认~/.flume/file-channel/data

transactionCapacity:事务最大容量

checkpointInterval:检测点之间的时间值设置

maxFileSize:每一个文件最大值设置

minimumRequiredSpace:最小的请求闲置空间

capacity:Channel的最大容量

keep-alive:一个put操作的等待时间值

encryption.activeKey:使用Key去加密新数据

encryption.cipherProvider:密码提供者类型,支持的类型有:AESCTRNOPADDING

encryption.keyProvider:关键字提供者类型,支持的类型有:JCEKSFILE

encryption.keyProvider.keyStoreFile:keystore文件的路径

encrpytion.keyProvider.keyStorePasswordFile:存储关键字密钥文件的路径

encryption.keyProvider.keys:列出所有的关键字

encyption.keyProvider.keys.*.passwordFile:可选关键字密钥文件的路径

 

特点:安全 可靠;但是速度慢了

 

例子:

a1.channels.c1.type= file

a1.channels.c1.checkpointDir= /mnt/flume/checkpoint

a1.channels.c1.dataDirs= /mnt/flume/data

a1.channels.c1.encryption.activeKey= key-0

a1.channels.c1.encryption.cipherProvider= AESCTRNOPADDING

a1.channels.c1.encryption.keyProvider= key-provider-0

a1.channels.c1.encryption.keyProvider= JCEKSFILE

a1.channels.c1.encryption.keyProvider.keyStoreFile= /path/to/my.keystore

a1.channels.c1.encryption.keyProvider.keyStorePasswordFile= /path/to/my.keystore.password

a1.channels.c1.encryption.keyProvider.keys= key-0

 

五Spillable Memory Channel

将event存储内存队列和磁盘上,一般是当内存队列写满了,然后额外到来的events就存入FileChannel.相当于是MemoryChannel 和 FileChannel

进行一个整合,两者优点都有了,但是两者缺点缺点也都有了

type:SPILLABLEMEMORY

memoryCapacity:存储在内存队列中event最大个数,默认10000

overflowCapacity:存储在磁盘的最大event个数,默认100000000

byteCapacityBufferPercentage: 定义缓存百分比,默认20

byteCapacity:最大内存所有事件允许总字节数

 

例子:

a1.channels.c1.type= SPILLABLEMEMORY

a1.channels.c1.memoryCapacity= 10000

a1.channels.c1.overflowCapacity= 1000000

a1.channels.c1.byteCapacity= 800000

a1.channels.c1.checkpointDir= /mnt/flume/checkpoint

a1.channels.c1.dataDirs= /mnt/flume/data

 

如果想disabledmemory channel

a1.channels.c1.type= SPILLABLEMEMORY

a1.channels.c1.memoryCapacity= 0

a1.channels.c1.overflowCapacity= 1000000

a1.channels.c1.checkpointDir= /mnt/flume/checkpoint

a1.channels.c1.dataDirs= /mnt/flume/data

 

如果想disbaledfile channel

a1.channels.c1.type= SPILLABLEMEMORY

a1.channels.c1.memoryCapacity= 100000

 

六 FlumeChannel Selector

Flume可以根据需求,将不同的文件传输到不同Channel,提供了2种方式:replicating& multiplexing

replicating:复制,将文件传到所有的channel中,不对channel进行区别对待

multiplexing:多路传输,根据header对日志进行分类,根据分类规则将不同的日志push到不同channel中。从而对文件进行初步的分类

如果sourceselect.type没有指定,默认就是replicating。

selector.optional:指定哪些是可选的channel,意思就是如果这个channel,写失败了,将被忽略,不影响事务。但如果不是optional的channel写失败,那么导致事务也就失败

 

现在需要将2个日志文件发往不同的Channel,那肯定我们需要选择

Selectortype是multiplexing。

例子

a1.channels= c1 c2 c3 c4

a1.sources.r1.selector.type= multiplexing

a1.sources.r1.selector.header= state

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

a1.sources.r1.selector.mapping.US= c2 c3

a1.sources.r1.selector.default= c4