ソースは、コンポーネント水路エージェントのデータを受信するための責任があります。
ソース・コンポーネントは、アブロ、倹約、幹部、JMSなど、さまざまな形式でのログデータの様々な種類、スプールディレクトリ、netcatを、シーケンスジェネレータは、Syslog、HTTP、遺産を扱うことができます。
公式のソースの種類はたくさんあるが、時には実際の開発の中での需要を満たすことができない、我々は、実際の需要に基づいてソースの一部をカスタマイズする必要があります。
公式には、ソースをカスタマイズするためのインタフェースを提供します。https://flume.apache.org/FlumeDeveloperGuide.html#source
公式の説明によると、カスタムソースAbstractSourceクラスが継承し、設定可能とPollableSourceインタフェースを実装する必要があります。
適切な方法を実装します。
getBackOffSleepIncrement(); getMaxBackOffSleepInterval(); // コンテキストを(内容は設定ファイルを読み込む)を初期化 設定(コンテキストコンテキスト); // イベントにデータパッケージを取得し、チャネルを書き、メソッドが呼び出されますループ 処理を();
使用シナリオ:読み込みMySQLのデータやその他のファイルシステム。
本明細書で使用される場合、水路は、データを受信し、コンソールへのデータ出力のそれぞれにプレフィックスを追加します。水路は、プレフィックスプロファイルから構成されていてもよいです。
まず、カスタムソースを作成します
1.ポンポン依存追加
<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> < プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0" のxmlns:XSI = "http://www.w3.org / 2001 / XMLスキーマ・インスタンス」 のxsi:のschemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 </ modelVersion > < groupIdを> COM </ groupIdを> < たartifactId >水路</ たartifactId > <</ バージョン> < 依存性> < 依存性> < のgroupId > org.apache.flume </ のgroupId > < たartifactId >フリューム-NG-コア</ たartifactId > < バージョン> 1.9.0 </ バージョン> </ 依存> </ 依存関係> < 構築> < プラグイン> < プラグイン> < groupIdを>org.apache.maven.plugins</ のgroupId > < たartifactId > Mavenのコンパイラ・プラグイン</ たartifactId > < 構成> < ソース> 1.8 </ ソース> < ターゲット> 1.8 </ ターゲット> < コード> UTF-8 </ エンコーディング> </ 構成> < / プラグイン> </ プラグイン> </ 構築> </ プロジェクト>
2.カスタムクラスのソースを書きます
パッケージソース; インポートorg.apache.flume.Context; インポートorg.apache.flume.EventDeliveryException; インポートorg.apache.flume.PollableSource; インポートorg.apache.flume.conf.Configurable; インポートorg.apache.flume.event。 SimpleEvent; インポートorg.apache.flume.source.AbstractSource、 インポートのjava.util.HashMap; パブリック クラス MYSOURCE 拡張 AbstractSource 道具設定可能、PollableSource { // 将来のフィールドに読み込まれる定義構成ファイル プライベート長い遅延を、 プライベート; Stringフィールド / / 初期設定情報 @Override 公共の 無効設定(コンテキストコンテキスト){ 遅延 = context.getLong( "遅延" ;) フィールド( "こんにちは!" "フィールド"、= context.getString ); } @Override パブリックステータスプロセス()スローEventDeliveryException { 試して{ // イベントのヘッダ情報を作成 HashMapの<文字列、文字列> = hearderMap 新しい新規 HashMapを<> (); // イベントを作成 SimpleEventイベント= 新しい新しいSimpleEventを(); // サイクルイベントパッケージ のための(int型 Iは<5;; I ++はI = 0 ){ // イベントヘッダー設定する event.setHeaders(hearderMapを); // イベント内容には、提供される event.setBody((フィールド+ I)(.getBytesは)); // 書き込みイベントチャネル getChannelProcessor()のprocessEvent(イベント);. のThread.sleep(ディレイ); } } キャッチ(例外E){ e.printStackTrace(); 戻り、Status.BACKOFFを } 戻りStatus.READYを; } @Override パブリック ロングはgetBackOffSleepIncrement(){ 戻り 0 。 } @Override パブリック ロングgetMaxBackOffSleepInterval(){ 戻り 0 。 } }
第二に、パッケージングテスト
1.パッケージのアップロード
参考:https://www.cnblogs.com/jhxxb/p/11582804.html
2.書き込み水路プロフィール
mysource.conf
#このエージェントのコンポーネント名前 a1.sources = R1 a1.sinks =をK1の a1.channels = C1の #説明/ソースを設定 a1.sources.r1.type = source.MySource #代码中要获取的配置信息 a1.sources .r1.delay = 1000 #a1.sources.r1.field = jhxxb #シンク説明 a1.sinks.k1.type =ロガー #を使用して、メモリ内のイベントをバッファチャンネル = a1.channels.c1.typeをメモリ a1.channels .c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 #バインドチャネルのソースとシンク a1.sources.r1.channels = C1 a1.sinks.k1.channel = C1
スタート
CDは/ opt / apacheの-flume- 1.9。0 - ビン ビン /水路-ngのエージェント--confのconf / --name A1 --conf- ファイル -Dflume.root.logger = INFO、コンソール/tmp/flume-job/source/mysource.conf