Flume整理

flume核心模块介绍:

源头(source):负责接收数据的模块,它定义了数据的源头,从源头收集数据,传递给通道。源头还可用于接收其他flume代理的沉淀器传输过来的数据。

沉淀器(sink):批量地从通道读取并移除数据,并将所读取的内容存储到指定的位置。

通道(channel):作为一个管道或队列,连接源头喝沉淀器。

通过以上核心模块,我们引出以下重要概念

代理(agent):flume运行在服务器上的程序,是最小的运行单位。每台机器只会运行一个代理,其中可包含多个源头和沉淀器。

事件(Event): flume的数据流由事件贯穿始终,是应用逻辑上的基本处理单元,如当flume处理网站日志记录的收集时,事件可以是一条日志记录,它携带日志数据和头信息。代理中的源头会生成这些事件,进行特定的格式化,然后将事件推入若干通道中。我们可将通道看作一个缓冲区,它将保存事件直到沉淀器处理完该事件为止。沉淀器负责持久化日志或将事件推到另一个源头,从这我们可看出flume的数据流传输是可以嵌套的,经过多级的传递和预处理。

接下来我们介绍flume的源头(source)有:

   spooling Directory源头:在一些场景中,应用数据产生后会被存入本地的文件中,文件中的一行或者若干行组成一个逻辑单元,但是不同的应用会有不同的字段定义和格式,而你无法修改这些应用本身,那么将这些信息整合是一个头疼的问题。这个时候spooling Directory源头就有了用武之地,它是非常简单和常用的源头,会监视指定目录的变化,从这些目录的文件中读取所需要的数据,并且进行必要的预处理,将不同数据源内容转换为对应的flume事件。由于Spooling Director源头是磁盘I/O读取密集型的,所以它的性能不会很高。

   HTTP源头:该源头可以通过HTTP的POST方式接收数据。从客户端的角度来看,它的表现就像web服务器一样,同事还接收flume的事件。

   JMS源头:JMS全称是java消息服务,用于分布式系统中发送消息,进行异步通信。Flume自带的JMS源头可以获取来自java消息服务队列或主题的数据,如ActiveMQ喝kafka等。

  嵌套:Avro和Thrift这样的源头,可以和上一级代理的沉淀器进行对接,实现代理的多级嵌套。

对于flume的沉淀器也有不少,能够写到HDFS,HBASE,Solr和Elasticsearch等存储和检索中

flume自带通道有俩种

内存通道:该通道是内存中的队列,源头从它的尾部写入数据,而沉淀器从它的头部读取数据。由于都是内存操作,因此内存通道可以支持非常高的吞吐量。不过由于是费持化的方式,存在数据丢失的风险。

文件通道:该通道会将事件都写入到磁盘中,以持久化的方式保存。这样的数据就不会因为突然宕机或断电而丢失。而且海量数据存储的成本也比较低,不过其性能远远不及内存通道。总体来说,如果对于数据的丢失无法容忍,并且不在意数据的处理速度,那么文件通道是理想的选择。相反,如果对系统反应速度要求很高,而且能允许一定程度的数据丢失,那么就可以选择内存通道。

猜你喜欢

转载自blog.csdn.net/sujins5288/article/details/86015981