一、常用Channel介绍
Channels 是一个 Agent上存储 events 的仓库,Source 向其中添加 events,而 Sink从中取走移除 events。
此处介绍的 Channel 有:Memory Channel、File Channel 和 Spillable Memory Channel。
Memory Channel
Source 添加的 events 都暂存在内存队列中,它非常适合那些需要更高吞吐量的数据流,但代价是一旦一个 agent 失败后,其中存储的events数据将会丢失。其必须的属性如下:
属性名 | 默认值 | 描述 |
---|---|---|
channels | - | |
type | - | 组件类型名称必须是memory |
capacity | 100 | 存储在 Channel 当中的最大 events 数 |
transactionCapacity | 100 | 同时刻从Source 获取,或发送到 Sink 的最大 events 数 |
keep-alive | 3 | 添加或删除一个 event 超时的秒数 |
byteCapacityBufferPercentage | 20 | 详见表后的链接 |
byteCapacity | 20000 | 详见表后的链接 |
详情见:http://flume.apache.org/FlumeUserGuide.html#memory-channel
实例 Agent a1
:
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
File Channel
必须的属性如下:
属性名 | 默认值 | 描述 |
---|---|---|
channels | - | |
type | - | 组件类型名称必须是file |
hostname | - | 绑定的主机名或者 IP 地址 |
port | - | 绑定的端口号 |
batch-size | 100 | 一次同时发送的 event 数 |
connect-timeout | 20000 | 第一次握手请求时允许的时长。( ms ) |
request-timeout | 20000 | 第一次过后,后续请求允许的时长 ( ms ) |
ireset-connection-interval | none |
实例,Agent a1
:
a1.channels = c1
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /mnt/flume/checkpoint
a1.channels.c1.dataDirs = /mnt/flume/data
Spillable Memory Channel
Logs Sink 属于 INFO 级别的,通常用作测试或调试目的,其属性:
属性名 | 默认值 | 描述 |
---|---|---|
channels | - | |
type | - | 组件类型名称必须是SPILLABLEMEMORY |
memoryCapacity | 10000 | 存储在内存队列中的最大 events 数,设置为 0 ,则禁用缓存到内存队列 |
overflowCapacity | 100000000 | 存储在本地磁盘的最大 events 数,设置为 0 ,则禁用缓存到本地文件 |
overflowTimeout | 3 | 当内存队列溢出后,启用本地磁盘缓存的超时时间 |
byteCapacityBufferPercentage | 见描述 | 详见表后的链接 |
byteCapacity | 20 | 详见表后的链接 |
avgEventSize | 500 | 估计将要缓存到 Channel 当中的 events 的平均大小 (单位:字节) |
<file channel properties> | 见描述 | 详见表后的链接 |
详情见:http://flume.apache.org/FlumeUserGuide.html#spillable-memory-channel
如果 memoryCapacity
或byteCapacity
被设置为 0,则 Flume 理解为内存队列已经满了。
实例,Agnet a1
:
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
禁用缓存 events 到内存队列,memoryCapacity
属性设为 0,则此 Channel 就像一个 File Channel:
a1.channels = c1
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 禁用缓存 events 到本地磁盘,`overflowCapacity`属性设为 0,则此 Channel 就像一个纯粹的 Memory Channel:
a1.channels = c1
a1.channels.c1.type = SPILLABLEMEMORY
a1.channels.c1.memoryCapacity = 100000
a1.channels.c1.overflowCapacity = 0
</br>
===
未完待续。。。