天天看點

《Flume日志收集與MapReduce模式》一3.1 記憶體通道

本節書摘來自華章出版社《flume日志收集與mapreduce模式》一書中的第3章,第3.1節,作者 [美] 史蒂夫·霍夫曼(steve hoffman)斯裡納特·佩雷拉(srinath perera),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

見名知意,記憶體通道指的是事件存儲在記憶體中的通道。由于通常情況下,記憶體的速度要比磁盤快幾個數量級,是以事件的接收速度也會更快,這降低了對硬體的需求量。使用這種通道的弊端在于代理失敗(如硬體問題、斷電、jvm崩潰、flume重新開機等)會導緻資料丢失。根據使用場景的不同,這可能是非常不錯的解決方案。系統度量通常屬于這一類,因為少量的資料丢失并不會造成什麼影響。然而,如果事件表示的是網站的購買情況,那麼記憶體通道就是一種非常差勁的選擇了。

要想使用記憶體通道,請将通道的type參數設定為memory。

《Flume日志收集與MapReduce模式》一3.1 記憶體通道

上面為名為agent的代理定義了一個名為c1的記憶體通道。

下面是一個配置參數表格,你可以據此調整預設值:

《Flume日志收集與MapReduce模式》一3.1 記憶體通道

該通道的預設容量是100個事件,這可以通過設定capacity屬性來達成:

《Flume日志收集與MapReduce模式》一3.1 記憶體通道

記住一點,如果增加了這個值,那麼你還需要增加java堆空間大小,方式是使用-xmx以及可選的-xms參數實作。

你可以設定的另一個與容量相關的設定是transactioncapacity。它指的是源的channelprocessor(負責在單個事務中将資料從源移動到通道中的元件)可以寫入的最大的事件數量。它也指的是sinkprocessor(負責将資料從通道移動到接收器的元件)在單個事務中所能讀取的最大的事件數量。你可以将這個值設得大一些,進而降低事務包裝器的代價,這會提升速度。對于失敗事件來說,增加這個值的弊端在于源需要復原更多的資料。

《Flume日志收集與MapReduce模式》一3.1 記憶體通道

bufferpercentage與bytecapacity參數,它們使用位元組而非事件數量來作為調整記憶體通道大小的方式,同時還避免了outofmemoryerrors。如果事件大小的變化範圍很大,那麼你應該使用這些設定來調整容量,但需要注意的是,計算隻是根據事件體來評估的。如果有任何頭,那麼實際的記憶體使用量就會比配置的值大一些。

最後,keep-alive參數指的是通道已滿并且在放棄前,線程将資料寫到通道中的等待時間。由于資料同時也在從通道中被寫出,是以如果在逾時到期後又有了新的空間,那麼資料還是會被寫入通道中,而不會向源抛出異常。你可能想将該值設得非常大,不過請記住,等待寫入到通道會阻塞資料進入到源中,這可能會導緻資料堵在上遊代理中。最後,這會造成事件被丢棄。你需要針對周期性的流量變化以及臨時計劃(或未計劃)的維護情況進行調整。