日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

flume1.8 开发指南学习感悟

發(fā)布時(shí)間:2025/3/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flume1.8 开发指南学习感悟 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述:

Apache Flume是一個(gè)分布式、可用的系統(tǒng),用于從許多不同的sources有效的收集并移動(dòng)大量日志數(shù)據(jù)用于集中存儲(chǔ)數(shù)據(jù)。

架構(gòu)及數(shù)據(jù)流動(dòng)模型:

flume實(shí)際上就是一個(gè)Agent。Agent里面包含三大組件:Source、Channel、Sink。

Flume agent流動(dòng)的數(shù)據(jù)單位為一個(gè)Event。一個(gè)Flume agent 是一個(gè)JVM進(jìn)程,維持允許Events從一個(gè)外部source流動(dòng)到一個(gè)外部目的地的組件。

Events被外部source(例如web server)發(fā)送到Source,被發(fā)送的Events要有特定的格式。例如,AvroSource可以用來接受來自客戶端的Avro Events或者其他Flume agent。當(dāng)Source接受Event時(shí),Source存儲(chǔ)Event進(jìn)一個(gè)或多個(gè)Channels。該Channel是一個(gè)活的存儲(chǔ),保存Event直到它被Sink消費(fèi)。Sink把Event從Channel中移除并把Event放進(jìn)外部存儲(chǔ)庫,如HDFS。Source和Sink在Agent里面是異步運(yùn)行的。

Client--開發(fā)自定義組件:

Client在events的來源地操作,并把獲取到的events發(fā)送到Flume agent。Client通常在它們消耗數(shù)據(jù)的應(yīng)用過程操作。Flume一般支持Avro,log4j,syslog,和Http POST(帶有JSON body)作為途徑方式去從轉(zhuǎn)換來自外部Source的數(shù)據(jù)。在上圖中的web server就相當(dāng)于一個(gè)Client。

在條件無法滿足的情況下,可以創(chuàng)建一個(gè)自定義機(jī)制發(fā)送數(shù)據(jù)給Flume。有兩種實(shí)現(xiàn)方式:第一種是創(chuàng)建自定義client與Flume已存在的sources,如AvroSource或者SyslogTcpSource,聯(lián)系交流。這里client需要把數(shù)據(jù)轉(zhuǎn)換成Flume Sources能夠識(shí)別的信息。另外一種是去編寫自定義Flume Source,它能直接與你已存在的使用IPC或者RPC協(xié)議的client應(yīng)用交流,然后轉(zhuǎn)換client數(shù)據(jù)為Flume Events用于發(fā)送。

RPC client 接口

Flume的RpcClient接口的實(shí)現(xiàn)封裝了flume支持的RPC機(jī)制。用戶的應(yīng)用可以簡單的調(diào)用Flume Client SDK的append(Event)或者appendBatch(List<Event>)去發(fā)送數(shù)據(jù),而不用擔(dān)心底層消息交換的細(xì)節(jié)。用戶提供要求的Event的方式有兩種,一種是可以通過直接實(shí)現(xiàn)Event接口,如SimpleEvent類,二是通過使用EventBuilder的withBody()方法。

RPC clients - Avro和Thrift

Avro是默認(rèn)的RPC協(xié)議,NettyAvroRpcClient和ThriftRpcClient實(shí)現(xiàn)RpcClient接口。client需要?jiǎng)?chuàng)建帶有host和port的目標(biāo)Flume agent,然后可以使用RpcClient發(fā)送數(shù)據(jù)到agent。

Flume Client (Avro Client)配置解析

① 分別給Channels、Sources、Sinks命名為c1、r1、k1;

②標(biāo)明channels c1的類型,為memory內(nèi)存存儲(chǔ);

③注明sources r1需要連接的channels為c1,然后標(biāo)明sources r1的類型為avro,即client為avroClient類型,發(fā)送到source的數(shù)據(jù)格式為avro;其次把client的host和port寫明;

④注明sinks k1需要連接的channels為c1,然后表明sinks類型為loggger存儲(chǔ)方式。

事務(wù)接口:

事務(wù)接口是Flume可靠性的基礎(chǔ)。全部的主要組件(如Sources,Sinks和Channels)必須使用Flume事務(wù);

事務(wù)是在Channle實(shí)現(xiàn)過程中實(shí)現(xiàn)的。每一個(gè)Source和Sink連接到的Channel,其必須包含Transaction對(duì)象。Sources使用ChannelProcessor去管理Transactions,Sinks通過其配置的Channel管理Transactions。把event放進(jìn)Channel或者從Channel移除event的操作是在一個(gè)活的Transaction中完成的。

?Sink:

Sink的目的是把Events從Channel移除并把它們發(fā)送到下一個(gè)Flume Agent或者在外部存儲(chǔ)庫存儲(chǔ)它們。一個(gè)Sink恰好連接一個(gè)Channels,在Flume配置文件中配置。有個(gè)SinkRunner實(shí)例連接每一個(gè)配置的Sink,當(dāng)Flume框架調(diào)用SinkRunner.start(),一個(gè)新線程被創(chuàng)建去驅(qū)動(dòng)Sink(使用SinkRunner.PollingRunner作為線程的Runnable)。這個(gè)線程管理Sink的生命周期。該Sink需要實(shí)現(xiàn)start()和stop()方法,這些方法是LifecycleAware的接口。Sink.start()方法應(yīng)該初始化Sink和帶它到一個(gè)能使Event前進(jìn)到下一個(gè)目的地的狀態(tài)。Sink.process()方法應(yīng)該執(zhí)行把Event從Channel移除并使它前進(jìn)的核心進(jìn)程。Sink.stop()方法應(yīng)該執(zhí)行必要的清除(如釋放資源)

Source:

Source的目的是接收來自外部Client的數(shù)據(jù)和把它存儲(chǔ)在配置好的Channels。Source可以通過它本身的ChannelProcessor得到一個(gè)實(shí)例,用來處理一個(gè)Event,并在Channel本地transaction提交。類似于SinkRunner.PollingRunner Runnable,有PollingRunner Runnable在一個(gè)新線程中執(zhí)行,當(dāng)Flume框架調(diào)用PollableSourceRunner.start(),該線程會(huì)被創(chuàng)建。每一個(gè)配置的PollableSource與它本來的運(yùn)行一個(gè)PollingRunnable的線程關(guān)聯(lián)。該線程管理PollableSource的生命周期,例如starting和stopping。一個(gè)PollableSource實(shí)現(xiàn)必須實(shí)現(xiàn)strat()和stop()方法,它們?cè)贚ifecycleAware接口中聲明。PollableSource運(yùn)行調(diào)用Source的process()方法。process()方法應(yīng)該檢查新的數(shù)據(jù)并把它以Flume Events的形式存儲(chǔ)在Channel中。注意這里有兩種Sources。PollableSource已經(jīng)被提及啦。另一種是EventDrivenSource。EventDrivenSource,不同于PollableSource,必須有它自己的調(diào)用機(jī)制去識(shí)別新數(shù)據(jù)并把新數(shù)據(jù)存在Channel。EventDrivenSources不是由它們本身的線程驅(qū)動(dòng)的。

Channel:

暫無

轉(zhuǎn)載于:https://www.cnblogs.com/swordfall/p/8093464.html

總結(jié)

以上是生活随笔為你收集整理的flume1.8 开发指南学习感悟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。