一、常用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
capacity100存储在 Channel 当中的最大 events 数
transactionCapacity100同时刻从Source 获取,或发送到 Sink 的最大 events 数
keep-alive3添加或删除一个 event 超时的秒数
byteCapacityBufferPercentage20详见表后的链接
byteCapacity20000详见表后的链接

详情见: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-size100一次同时发送的 event 数
connect-timeout20000第一次握手请求时允许的时长。( ms )
request-timeout20000第一次过后,后续请求允许的时长 ( ms )
ireset-connection-intervalnone

实例,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
memoryCapacity10000存储在内存队列中的最大 events 数,设置为 0,则禁用缓存到内存队列
overflowCapacity100000000存储在本地磁盘的最大 events 数,设置为 0,则禁用缓存到本地文件
overflowTimeout3当内存队列溢出后,启用本地磁盘缓存的超时时间
byteCapacityBufferPercentage见描述详见表后的链接
byteCapacity20详见表后的链接
avgEventSize500估计将要缓存到 Channel 当中的 events 的平均大小 (单位:字节)
<file channel properties>见描述详见表后的链接

详情见:http://flume.apache.org/FlumeUserGuide.html#spillable-memory-channel

如果 memoryCapacitybyteCapacity被设置为 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>

===

未完待续。。。