版权申明:转载请注明出处。
文章来源:玄涧思库
channel可以理解为一种临时的存储,source将event放入channel ,sink取走它。flume提供了四种可以用于生产环境的channel。
1.Memory Channel
基于内存的channel,实际就是将event存放于内存中一个固定大小的队列中。其优点是速度快,缺点是可能丢失数据。
可配置属性如下:
属性 | 默认 | 说明 |
---|---|---|
type | - | 这里为memory |
capacity | 100 | 存储在channel中的最大event个数 |
transactionCapacity | 100 | 每个事务中从source获取或者发送到sink的event最大个数 |
keep-alive | 3 | 添加或者删除一个event的超时时间,单位为秒 |
byteCapacityBufferPercentage | 20 | byteCapacity和预估的所有event大小之间的buffer。 |
byteCapacity | 内存里面允许存放的所有event的字节的最大值。 |
配置示例:
a1.channels = c1
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
2.JDBC Channel
将event存放于一个支持JDBC连接的数据库中,目前官方推荐的是Derby库,其优点是数据可以恢复。
可配置属性如下:
属性 | 默认 | 说明 |
---|---|---|
type | - | 这里为jdbc |
db.type | DERBY | 数据库类型 |
driver.class | org.apache.derby.jdbc.EmbeddedDriver | 数据库驱动类 |
driver.url | jdbc connnection url | |
db.username | sa | 用户名 |
db.password | - | 密码 |
connection.properties.file | - | 连接配置文件 |
create.scheme | true | 如果scheme不存在是否创建 |
create.index | true | 是否创建索引 |
create.foreignkey | true | 是否可以有外键约束 |
transaction.isolation | READ_COMMITTED | 事务隔离机制。可选项有:READ_UNCOMMITTEDREAD_COMMITTEDSERIALIZABLEREPEATABLE_READ |
maximum.connections | 10 | 连接数 |
maximum.capacity | 0(无限制) | channel中最大的event个数 |
sysprop.* | db的特殊配置 | |
sysprop.user.home | Derby库的存放路径 |
配置示例:
a1.channels = c1
a1.channels.c1.type = jdbc
3.File Channel
在磁盘上指定一个目录用于存放event,同时也可以指定目录的大小。优点是数据可恢复,相对于memory channel来说缺点是要频繁的读取磁盘,速度较慢。
可配置属性如下:
属性 | 默认 | 说明 |
---|---|---|
type | - | 这里为file |
checkpointDir | ~/.flume(水道)/file-channel/checkpoint | 检查点存放目录 |
useDualCheckpoints | false | 检查点的备份。如果这个参数设置为true,backupCheckpointDir必须设置。 |
backupCheckpointDir | - | 此目录作为检查点目录的备用目录,必须与checkpointDir不同 |
dataDirs | ~/.flume/file-channel/data | 可以使用逗号分隔多个路径,使用在不同磁盘上的多个路径能提升channel的表现 |
transactionCapacity | 10000 | channel中能支持的事务的最大数量。 |
maxFileSize | 2146435071 | 单个文件的最大字节数。 |
minimumRequiredSpace | 524288000 | 需要的最小空闲空间,单位为byte。 |
capacity | 1000000 | channel 的最大容量 |
keep-alive | 3 | 等待put操作的总时间,单位为秒。 |
use-log-replay--v1 | false | 使用旧的replay逻辑。 |
use-fast-replay | false | replay时不使用队列 |
checkpointOnClose | true | 控制是否创建一个checkpoint 当channel关闭的时候。 |
encryption.activeKey | - | 用来加密数据的key的名称。 |
encryption.cipherProvider | - | 加密方式,支持的类型有AESCTRNOPADDING |
encryption.keyProvider | - | key的类型,支持的类型有JCEKSFILE |
encryption.keyProvider.keyStoreFile | key文件存放的路径 | |
encrpytion.keyProvider.keyStorePasswordFile | 密码存放的路径 | |
encryption.keyProvider.keys | - | 多个key |
encyption.keyProvider.keys.*.passwordFile | - | 多个密码文件 |
配置示例如下:
a1.channels = c1
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /mnt/flume/checkpoint
a1.channels.c1.dataDirs = /mnt/flume/data
4.Spillable Memory Channel
event存放在内存和磁盘上,内存作为主要存储,当内存达到一定临界点的时候会溢写到磁盘上。其中和了memory channel和File channel的优缺点。
可配置属性如下:
属性 | 默认 | 说明 |
---|---|---|
type | - | 这里为SPILLABLEMEMORY |
memoryCapacity | 10000 | 内存队列中可以存放的最大event个数 |
overflowCapacity | 100000000 | 溢写空间能存放的event的最大值。如果不想使用溢写,此值设为0 |
overflowTimeout | 3 | 当内存写满开始溢写到磁盘上的等待时间,单位为秒。 |
byteCapacityBufferPercentage | 20 | byteCapacity和预估的所有event大小之间的buffer。 |
byteCapacity | 内存里面允许存放的所有event的字节的最大值。 | |
avgEventSize | 500 | 预估event的平均字节。 |
配置示例如下:
a1.channels = c1
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