Channels are the repositories where the eventsare staged on a agent. Source adds the events and Sink removes it
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就没有了,缺乏安全性
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
将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
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
将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