Flume介紹

Flume是一個分佈式的,效率高的用來收集日誌數據的開源框架。它的架構是基於流式數據,有3個重要的組件,分別是Source,Channel和Sink。web

Flume架構和特色

Flume架構圖如上,很是簡單。apache

一個Flume的事件(event)表示數據流中的一個單位,它會帶有字節數據和可選的字符串屬性。一個Flume的agent是一個JVM進程,agent持有3個組件,這3個組件分別是Source,Channel和Sink。服務器

Source組件會消費來自外部的一些事件源數據,這個外部事件源好比是一個web服務器。外部事件源會將事件以某種格式發送給Flume的Source,當Source接收到事件以後,會存儲到一個或多個Channel中。架構

Channel是一個被動型的存儲容器,它會一直保留事件直到事件被Sink消費。框架

Sink會消費Channel裏的事件,而後會將事件放到外部倉庫裏,好比hdfs;或者Sink會轉發到下一步Flume agent裏作重複的事情。異步

Source和Sink在agent裏異步執行處理channel裏的事件。分佈式

Flume內部提供了一些經常使用的Source,Channel和Sink。日誌

舉個例子:code

Source使用Spooling Directory Source,這個Source會讀取文件系統中的文件數據(文件系統中的外部數據至關於以前說的事件源),讀取數據以後會放到Channel中,好比使用Memory Channel,將Source接收到的事件存儲到內存中,最後使用HDFS這個Sink將Memory Channel中的事件數據寫入到hdfs中。進程

Spooling Directory Source, Memory Channel, HDFS Sink都是Flume內部提供的組件。

Flume很是可靠。每一個agent的事件從Source進入到Channel以後,會存儲在Channel中。這些事件只有在存儲到下一步agent的Channel中或者外部存儲倉庫(好比hdfs)後,纔會在Channel中被移除。

Flume還會使用事務來保證事件處理過程。

Flume還具備很高的可恢復性。事件是存儲在channel中的,當使用File Channel的時候,當服務器掛了以後這些文件都還在,可是若是使用的是Memory Channel,就不具有容災性。

一個簡單的Flume配置以下:

# agent名字是a1,有1個source:r1, 1個sink:k1, 1個channel:c1
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 使用netcat source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# 使用 logger sink
a1.sinks.k1.type = logger

# 使用memory channel,容器爲1000,事務容量爲100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 將channel講source和sink關聯
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
相關文章
相關標籤/搜索