本节书摘来自华章出版社《Flume日志收集与MapReduce模式》一书中的第3章,作者 [美] 史蒂夫·霍夫曼(Steve Hoffman)斯里纳特·佩雷拉(Srinath Perera),更多章节内容可以访问云栖社区“华章计算机”公众号查看
第3章
通 道
在Flume中,通道指的是位于源与接收器之间的构件。它为流动的事件提供了一个中间区域,从源中读取并且被写到数据处理管道中的接收器的事件处于这个区域中。
本章将要介绍的两类通道分别是内存/非持久化通道与本地文件系统/持久化通道。持久化文件通道会在发送者接收到事件前将所有变化写到磁盘上。它要比非持久化的内存通道慢一些,不过可以在出现系统事件或是Flume代理重启时进行恢复。与之相反,内存通道要更快一些,不过在出现失败时会导致数据丢失,并且与拥有大量磁盘空间的文件通道相比,它的存储能力要低很多。到底使用哪个通道取决于特定的用例、失败场景以及磁盘容忍度。
也就是说,无论选择哪一种通道,如果从源到通道的数据存储率大于接收器所能写出的数据率,那就会超出通道的处理能力,并且会抛出ChannelException异常。源到底能对该ChannelException异常做什么以及不能做什么是特定于源本身的,不过在某些情况下,数据丢失是可能的,因此你需要恰当地规划好数据大小以避免填满通道。事实上,你总是希望接收器的写入速度要快于源的输入速度。否则就会出现这样一种情况,即一旦接收器失败了,那么你就再也追不上了。如果数据追踪的是站点使用情况,那么在白天时数据量就会很大,而在晚上时则会低一些,这样通道就有时间将数据传输出去了。事实上,你希望保持通道的深度(当前通道中的事件数量)尽可能低一些,这是因为在到达最终目的地之前,通道中所花费的时间会变成延迟时间。