偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Flume架構(gòu)與源碼分析-整體架構(gòu)

開發(fā) 開發(fā)工具
最近在學(xué)習(xí)Flume源碼,所以想寫一份Flume源碼學(xué)習(xí)的筆記供需要的朋友一起學(xué)習(xí)參考。Flume是cloudera公司開源的一款分布式、可靠地進(jìn)行大量日志數(shù)據(jù)采集、聚合和并轉(zhuǎn)移到存儲(chǔ)中;通過事務(wù)機(jī)制提供了可靠的消息傳輸支持,自帶負(fù)載均衡機(jī)制來支撐水平擴(kuò)展;并且提供了一些默認(rèn)組件供直接使用。

[[177123]]

最近在學(xué)習(xí)Flume源碼,所以想寫一份Flume源碼學(xué)習(xí)的筆記供需要的朋友一起學(xué)習(xí)參考。

1、Flume介紹

Flume是cloudera公司開源的一款分布式、可靠地進(jìn)行大量日志數(shù)據(jù)采集、聚合和并轉(zhuǎn)移到存儲(chǔ)中;通過事務(wù)機(jī)制提供了可靠的消息傳輸支持,自帶負(fù)載均衡機(jī)制來支撐水平擴(kuò)展;并且提供了一些默認(rèn)組件供直接使用。

Flume目前常見的應(yīng)用場(chǎng)景:日志--->Flume--->實(shí)時(shí)計(jì)算(如Kafka+Storm) 、日志--->Flume--->離線計(jì)算(如HDFS、HBase)、日志--->Flume--->ElasticSearch。

2、整體架構(gòu)

Flume主要分為三個(gè)組件:Source、Channel、Sink;數(shù)據(jù)流如下圖所示:

1、Source負(fù)責(zé)日志流入,比如從文件、網(wǎng)絡(luò)、Kafka等數(shù)據(jù)源流入數(shù)據(jù),數(shù)據(jù)流入的方式有兩種輪訓(xùn)拉取和事件驅(qū)動(dòng);

2、Channel負(fù)責(zé)數(shù)據(jù)聚合/暫存,比如暫存到內(nèi)存、本地文件、數(shù)據(jù)庫、Kafka等,日志數(shù)據(jù)不會(huì)在管道停留很長(zhǎng)時(shí)間,很快會(huì)被Sink消費(fèi)掉;

3、Sink負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)移到存儲(chǔ),比如從Channel拿到日志后直接存儲(chǔ)到HDFS、HBase、Kafka、ElasticSearch等,然后再有如Hadoop、Storm、ElasticSearch之類的進(jìn)行數(shù)據(jù)分析或查詢。

一個(gè)Agent會(huì)同時(shí)存在這三個(gè)組件,Source和Sink都是異步執(zhí)行的,相互之間不會(huì)影響。

假設(shè)我們有采集并索引Nginx訪問日志,我們可以按照如下方式部署:

1、Agent和Web Server是部署在同一臺(tái)機(jī)器;

2、Source使用ExecSource并使用tail命令采集日志;

3、Channel使用MemoryChannel,因?yàn)槿罩緮?shù)據(jù)丟點(diǎn)也不算什么大問題;

4、Sink使用ElasticSearchSink寫入到ElasticSearch,此處可以配置多個(gè)ElasticSearch服務(wù)器IP:PORT列表以便提升處理能力。

以上介紹了日志是如何流的,對(duì)于復(fù)雜的日志采集,我們需要對(duì)Source日志進(jìn)行過濾、寫到多個(gè)Channel、對(duì)Sink進(jìn)行失敗處理/負(fù)載均衡等處理,這些Flume默認(rèn)都提供了支持:

1、Source采集的日志會(huì)傳入ChannelProcessor組件,其首先通過Interceptor進(jìn)行日志過濾,如果接觸過Servlet的話這個(gè)概念是類似的,可以參考《Servlet3.1規(guī)范翻譯——過濾器 》 ;過濾器可以過濾掉日志,也可以修改日志內(nèi)容;

2、過濾完成后接下來會(huì)交給ChannelSelector進(jìn)行處理,默認(rèn)提供了兩種選擇器:復(fù)制或多路復(fù)用選擇器;復(fù)制即把一個(gè)日志復(fù)制到多個(gè)Channel;而多路復(fù)用會(huì)根據(jù)配置的選擇器條件,把符合條件的路由到相應(yīng)的Channel;在寫多個(gè)Channel時(shí)可能存在存在失敗的情況,對(duì)于失敗的處理有兩種:稍后重試或者忽略。重試一般采用指數(shù)級(jí)時(shí)間進(jìn)行重試。

我們之前說過Source生產(chǎn)日志給Channel、Sink從Channel消費(fèi)日志;它倆完全是異步的,因此Sink只需要監(jiān)聽自己關(guān)系的Channel變化即可。

到此我們可以對(duì)Source日志進(jìn)行過濾/修改,把一個(gè)消息復(fù)制/路由到多個(gè)Channel,對(duì)于Sink的話也應(yīng)該存在寫失敗的情況,F(xiàn)lume默認(rèn)提供了如下策略:

默認(rèn)策略就是一個(gè)Sink,失敗了則這個(gè)事務(wù)就失敗了,會(huì)稍后重試。

Flume還提供了故障轉(zhuǎn)移策略:

Failover策略是給多個(gè)Sink定義優(yōu)先級(jí),假設(shè)其中一個(gè)失敗了,則路由到下一個(gè)優(yōu)先級(jí)的Sink;Sink只要拋出一次異常就會(huì)被認(rèn)為是失敗了,則從存活Sink中移除,然后指數(shù)級(jí)時(shí)間等待重試,默認(rèn)是等待1s開始重試,***等待重試時(shí)間是30s。

Flume也提供了負(fù)載均衡策略:

負(fù)載均衡算法默認(rèn)提供了兩種:輪訓(xùn)和隨機(jī);其通過抽象一個(gè)類似ChannelSelector的SinkSelector進(jìn)行選擇,失敗補(bǔ)償機(jī)制和Failover中的算法類似,但是默認(rèn)是關(guān)閉失敗補(bǔ)償?shù)模枰渲胋ackoff參數(shù)為true開啟。

到此Flume涉及的一些核心組件就介紹完了,對(duì)于Source和Sink如何異步、Channel提供的事務(wù)機(jī)制等我們后續(xù)分析組件時(shí)再講。

假設(shè)我們需要采集非常多的客戶端日志并對(duì)他們進(jìn)行一些緩沖或集中的處理,就可以部署一個(gè)聚合層,整體架構(gòu)類似于如下:

1、首先是日志采集層,該層的Agent和應(yīng)用部署在同一臺(tái)機(jī)器上,負(fù)責(zé)采集如Nginx訪問日志;然后通過RPC將日志流入到收集/聚合層;在這一層應(yīng)該快速的采集到日志然后流入到收集/聚合層;

2、收集/聚合層進(jìn)行日志的收集或聚合,并且可以進(jìn)行容錯(cuò)處理,如故障轉(zhuǎn)移或負(fù)載均衡,以提升可靠性;另外可以在該層開啟文件Channel,做數(shù)據(jù)緩沖區(qū);

3、收集/聚合層對(duì)數(shù)據(jù)進(jìn)行過濾或修改然后進(jìn)行存儲(chǔ)或處理;比如存儲(chǔ)到HDFS,或者流入Kafka然后通過Storm對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)處理。

到此從Flume核心組件到一般的部署架構(gòu)我們就大體了解了,而涉及的一些實(shí)現(xiàn)細(xì)節(jié)在接下來的部分進(jìn)行詳細(xì)介紹。

【本文是51CTO專欄作者張開濤的原創(chuàng)文章,作者微信公眾號(hào):開濤的博客,id:kaitao-1234567】

 

責(zé)任編輯:武曉燕 來源: 開濤的博客
相關(guān)推薦

2016-11-25 13:26:50

Flume架構(gòu)源碼

2016-11-29 09:38:06

Flume架構(gòu)核心組件

2016-11-29 16:59:46

Flume架構(gòu)源碼

2024-08-26 10:31:23

2017-07-17 11:52:54

jQuery源碼分析前端框架類庫

2016-11-04 21:46:46

UnderscoreJavascript

2009-06-24 14:25:13

JSF整體架構(gòu)

2011-04-29 13:40:37

MongoDBCommand

2014-08-19 10:30:30

Swift源碼OpenStack架構(gòu)

2021-09-06 11:02:17

JVM架構(gòu)調(diào)優(yōu)

2012-09-06 10:07:26

jQuery

2024-07-05 12:57:35

2016-10-09 14:48:14

Linux整體架構(gòu)跳板機(jī)

2021-08-10 18:23:38

架構(gòu)Flink雙維度

2017-04-14 15:42:14

2022-03-18 15:55:15

鴻蒙操作系統(tǒng)架構(gòu)

2019-10-16 16:33:41

Docker架構(gòu)語言

2022-06-06 08:02:21

ahooks架構(gòu)hooks

2019-10-31 09:03:12

Java集群微服務(wù)

2017-12-12 14:26:16

數(shù)據(jù)庫PostgreSQL邏輯優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)