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_UNCOMMITTED READ_COMMITTED SERIALIZABLE REPEATABLE_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