Apache Flume中的Channel类型

1. Apache Flume Channel

在本章中,将学习Flume中的Channel。 Apache Flume channel是存储事件消息的临时存储,从Source 接收事件消息,然后缓存它们,直到Sink处理完这些时间消息为止。 Apache Flume中有几种类型的 Channel:Memory Flume Channel,JDBC Flume Channel,Flume Kafka Channel,Flume File Channel,Spillable Memory Flume Channel,Pseudo Transaction Flume Channel和Custom Flume Channel。 

2.介绍 – Apache Flume Channel

Apache Flume channel是存储事件消息的临时存储,从Source 接收事件消息,然后缓存它们,直到Sink处理完这些时间消息为止。简而言之,Flume Channel充当Flume中Source和Sink之间的桥梁。Flume Channel 可以与任何数量的Flume Source和Flume Sink一起工作, Source, Sink 与 Channel 之间的交互是基于事务性的。

如JDBC channel, Flume File channel, Memory channel 等。

3. Flume中的Channel类型

Flume Channel有七种类型:

——add picture here——-

Types of Flume Channel

Memory Channel: Apache Flume Channel

该Memory Channel,可配置的可用的内存大小,所有事件消息都存储在内存队列中。 对于需要更高吞吐量的消息事件来说,Memory Channel是理想的选择,不过,如果Agent失败,比如Agent 重启,那么将丢失内存通道中的数据。 

以下表格包含带有Memory Flume Channel描述的属性名称。

表 – 1. Apache Flume通道 – Memory Channel

1542701839406680.png

1542701884357943.png

示例如下:

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

JDBC Channel: Apache Flume Channel

JDBC Channel 将消息事件都存储在一个由数据库支持的持久性存储中。 目前JDBC Channel只支持嵌入式derby 数据库。 JDBC Channel 是持久的 Channel,对于需要恢复非常重要的数据场景来说,选择JDBC Channel非常理想。 

下表包含带有JDBC Flume Channel描述的属性名称。

表2. Apache Flume Channel – JDBC Channel

1542701982693593.png

1542702018325891.png

示例如下:

a1.channels = c1
a1.channels.c1.type = jdbc

Kafka Channel: Apache Flume Channel

事件消息被存储在Kafka集群中。 Kafka可以提供高可用性和复制功能,如果Flume agent或一个Kafka broker 出现故障后,事件消息可立即被可其他Sink 处理。

Kafka Channel可以被用于多种场景:

Flume Source 和  Sink – 为事件提供了一个可靠和高度可用的Channel

Flume Source和 Interceptor, 但不用Sink – 将Flume事件写入Kafka主题,供其他应用程序使用

Flume Sink,但没有 Source – 这是一种低延迟容错方式,可将事件从Kafka发送到Flume Sink 中,如HDFS,HBase或Solr中;

Kafka Channel的配置参数方式如下:

与Channel相关的配置值通常在Channel配置级别设置,例如:a1.channel.k1.type =与Kafka相关的配置值,例如:a1.channels.k1.kafka.topic和a1.channels.k1.kafka.bootstrap.servers。

特定于生产者/消费者的属性,以kafka.producer或kafka.consumer为前缀

在某些情况下,使用Kafka参数的名称,例如:bootstrap.servers和ack

表3. Apache Flume Channel – Kafka Channel

1542702156638781.png

1542702197271702.png

1542702235966947.png

1542702265769069.png

示例如下:

a1.channels.channel1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.channel1.kafka.bootstrap.servers = kafka-1:9092,kafka-2:9092,kafka-3:9092
a1.channels.channel1.kafka.topic = channel1
a1.channels.channel1.kafka.consumer.group.id = flume-consumer

File Channel: Apache Flume Channel

下表包含带有Flume文件通道描述的属性名称。

表5. Apache Flume通道 – 文件通道

1542702353402505.png

1542702394636217.png

1542702428857755.png

1542702467263802.png

File Channel默认情况下使用用户主目录中的路径作为检查点和数据目录, 如果Agent中有多个file channel处于活动状态,只能有一个file channel能够锁定设定的目录,或导致其他Channel初始化失败。 因此,须为所有配置的file channel提供显式的路径设置,最好这些路径位于不同的磁盘上。

示例如下:

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

Spillable Memory Channel将消息事件存储在内存中队列和磁盘上。 内存中的队列作为主存储,而磁盘作为溢出存储。 磁盘存储使用嵌入的File Channel进行管理。 当内存中的队列已满时,其他传入的事件将存储在文件通道中。 该通道非常适合在正常操作期间需要高吞吐量内存通道的数据流,但同时也需要较大容量的文件通道,以便更好地容忍间歇式发生的sink故障。 如果Agent 发生故障或重新启动,当恢复时,只有存储在磁盘上的事件才会被恢复。

注意: Spillable Memory Channel目前是实验性质的,不建议用于生产环境。

表6. Apache Flume Channel – 可分发内存通道

1542702575906142.png

1542702615575210.png

如果内存队列达到memoryCapacity或byteCapacity的限制,我们就认为内存队列已满。

示例如下:

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

Pseudo Transaction Channel: Apache Flume Channel

该Channel仅用于单元测试目的,不能将其用于生产用途。

以下表格包含属性名称以及Pseudo Transaction Channel的描述。

表7 Apache Flume Channel – Pseudo Transaction Channel

1542702711728560.png

Custom Channel: Apache Flume Channel

Custom Channel是用户自己实现的channel接口。在启动Flume Agent时, Custom Channel的类及其依赖项必须包含在类路径中。 

下表包含属性名称和自定义通道的描述。

表8  Apache Flume Channel – Custom Channel

1542702770502028.png

示例如下:

a1.channels = c1
a1.channels.c1.type = org.example.MyChannel

Apache Flume中的Channel类型

发表评论

电子邮件地址不会被公开。 必填项已用*标注

七 + 3 =