主コンテンツへ
Oracle® Fusion Middleware Oracle GoldenGate for Big Dataの統合
リリース12.3.1.1
E89944-01
目次へ移動
目次

前
次

4 Flumeハンドラの使用

この章では、Flumeハンドラについて説明し、その機能を理解できるように例を示します。

トピック:

4.1 概要

Flumeハンドラは、Oracle GoldenGate証跡からFlumeソースに変更取得データをストリーミングするために設計されています。Apache Flumeは、ビッグ・データ・アプリケーションにデータをストリーミングすることを主な目的とするオープン・ソース・アプリケーションです。Flumeアーキテクチャには、ソース、チャネル、シンクという3つの主コンポーネントがあり、その全体がデータのパイプラインになります。Flumeソースは、データをFlumeチャネルに公開します。Flumeシンクは、Flumeチャネルからデータを取得し、そのデータを別のターゲットにストリーミングします。Flumeエージェントは、ソース、チャネル、シンクを所有し管理するコンテナ・プロセスです。単一のFlumeインストールに、複数のエージェント・プロセスをホストできます。Flumeハンドラは、証跡ファイルからAvroまたはThrift RPCのFlumeソースへデータをストリーミングできます。

4.2 Flumeハンドラの設定および実行

ここでは、Flumeハンドラのコンポーネントの構成およびハンドラの実行について説明します。

Flumeハンドラを実行するには、AvroまたはThrift Flumeソースとともに構成されたFlumeエージェントが稼働している必要があります。Oracle GoldenGateは、Flumeと同じ場所に配置することも、別のマシンに配置することもできます。別のマシンに配置する場合は、ネットワーク接続でFlumeソースのホストとポートにアクセスできる必要があります。Flumeエージェント・プロセスの構成および起動方法については、次の場所にあるFlumeのユーザーズ・ガイドを参照してください。

https://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.pdf

トピック:

4.2.1 クラスパス構成

Flumeソースに接続して実行するには、Flumeハンドラのgg.classpathconfiguration変数で2つのものを構成する必要があります。Flumeエージェントの構成ファイルと、FlumeクライアントJARです。Flumeハンドラは、Flumeエージェント構成ファイルの内容を使用して、Flumeソースに接続する際のホスト、ポートおよびソース・タイプを解決します。Flumeクライアント・ライブラリは、Oracle GoldenGate for Big Dataに付属しません。Flumeクライアント・ライブラリのバージョンは、Flumeハンドラが接続するFlumeのバージョンと一致する必要があります。必要なFlumeクライアントJARファイルのバージョン別リストは、「Flumeハンドラ・クライアント依存性」を参照してください。

Oracle GoldenGateのプロパティgg.classpathは、次のデフォルトの場所を含むように設定する必要があります。

  • core-site.xmlファイルのデフォルトの場所は、Flume_Home/confです。

  • FlumeクライアントJARのデフォルトの場所は、Flume_Home/lib/*です。

gg.classpathは、上の例に示したとおり正確に構成する必要があります。Flumeエージェント構成ファイルのパス指定に含めるパスには、ワイルドカードを使用しないでください。Flumeエージェント構成ファイルのパスに*wildcardを含めると、アクセスできなくなります。逆に、依存関係jarのパス指定には、そのディレクトリにあるJARファイルがすべて関連するクラスパスに含まれるように、ワイルドカード(*)を含める必要があります。*.jarは使用しないでください。正しく構成したgg.classpath変数の例は、次のようになります。

gg.classpath=dirprm/:/var/lib/flume/lib/*

FlumeハンドラとFlumeを同じ場所に配置していない場合は、Flumeハンドラ・プロセスをホストしているマシンに、Flumeエージェント構成ファイルとFlumeクライアント・ライブラリをコピーする必要があります。

4.2.2 Flumeハンドラ構成

Flumeハンドラの構成可能な値は次のとおりです。これらのプロパティは、Javaアダプタ・プロパティ・ファイルにあります(Replicatプロパティ・ファイルにはありません)。

プロパティ名 プロパティ値 必須 説明

gg.handlerlist

flumehandler (任意の名前を選択)

はい

ハンドラのリスト。グループ化プロパティがONのときは1つのみ許可されます。

gg.handler.flumehandler.type

flume

はい

使用するハンドラのタイプ。

gg.handler.flumehandler.format

フォーマッタ・クラスまたはショート・コード

いいえ。デフォルトはdelimitedtext

使用するフォーマッタ。次のいずれかを指定できます。

  • avro_row

  • avro_op

  • delimitedtext

  • xml

  • json

  • json_row

あるいは、カスタム・フォーマッタを記述し、完全修飾クラス名をここに含めることもできます。

gg.handler.flumehandler.RpcClientPropertiesFile

任意のファイル名

いいえ。デフォルトはdefault-flume-rpc.properties

デフォルトのdefault-flume-rpc.properties、または指定したカスタムのRPCクライアント・プロパティ・ファイルがクラスパスに存在する必要があります。

gg.handler.flumehandler.mode

op|tx

いいえ。デフォルトはop

操作モードまたはトランザクション・モード。Javaアダプタのグループ化オプションは、txモードでのみ使用できます。

gg.handler.flumehandler.EventHeaderClass

カスタム実装の完全修飾クラス名

いいえ。デフォルトはDefaultFlumeEventHeader

flumeイベントにどんなヘッダー・プロパティを追加するかを決めるクラス。

gg.handler.flumehandler.EventMapsTo

op|tx

いいえ。デフォルトはop

各flumeイベントが操作かトランザクションかを定義する。handler mode = opの場合、EventMapsToは常にopです。

gg.handler.flumehandler.PropagateSchema

true|false

いいえ。デフォルトはfalse

trueに設定すると、Flumeハンドラはスキーマ・イベントを公開し始めます。

gg.handler.flumehandler.includeTokens

true|false

いいえ。デフォルトはfalse

trueに設定すると、ソース証跡ファイルからのトークン・データが出力に含まれます。falseに設定すると、ソース証跡ファイルからのトークン・データが出力から除外されます。

4.2.3 サンプル構成

gg.handlerlist = flumehandler
gg.handler.flumehandler.type = flume
gg.handler.flumehandler.RpcClientPropertiesFile=custom-flume-rpc.properties
gg.handler.flumehandler.format =avro_op
gg.handler.flumehandler.mode =tx
gg.handler.flumehandler.EventMapsTo=tx
gg.handler.flumehandler.PropagateSchema =true
gg.handler.flumehandler.includeTokens=false

4.3 操作からFlumeイベントへのデータ・マッピング

この項では、Oracle GoldenGate証跡ファイルからの操作データが、異なる構成に基づいてFlumeハンドラによってどのようにFlumeイベントにマップされるかを説明します。Flumeイベントとは、Flumeエージェントを通過するデータの単位です。イベントはソースからチャネルへ、チャネルからシンクへと移動し、イベント・インタフェースの実装として表されます。イベントは、オプションでヘッダー(文字列属性)のセットを伴うペイロード(バイト配列)を搬送します。

トピック:

4.3.1 操作モード

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.{name}.mode=op

Oracle GoldenGate証跡ファイルからの個々の操作のデータが、1つのFlumeイベントにマップされます。各イベントはすぐにFlumeにフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

  • TABLE_NAME: 操作の表名。

  • SCHEMA_NAME: 操作のカタログ名(使用可能な場合)とスキーマ名。

  • SCHEMA_HASH: Avroスキーマのハッシュ・コード。(Avro行フォーマッタとAvro操作フォーマッタにのみ該当します。)

4.3.2 トランザクション・モードとEventMapsTo操作

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.flume_handler_name.mode=tx
gg.handler.flume_handler_name.EventMapsTo=op

Oracle GoldenGate証跡ファイルからの個々の操作のデータが、1つのFlumeイベントにマップされます。イベントは、トランザクションのコミット時にFlumeにフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

  • TABLE_NAME: 操作の表名。

  • SCHEMA_NAME: 操作のカタログ名(使用可能な場合)とスキーマ名。

  • SCHEMA_HASH: Avroスキーマのハッシュ・コード。(Avro行フォーマッタとAvro操作フォーマッタにのみ該当します。)

データをAvroまたは区切りテキストとしてフォーマットする場合には、このモードを使用することをお薦めします。Replicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。

4.3.3 トランザクション・モードとEventMapsToトランザクション

Oracle GoldenGate Java構成ファイルで、Flumeハンドラの構成は次のとおりです。

gg.handler.flume_handler_name.mode=tx
gg.handler.flume_handler_name.EventMapsTo=tx

ソース証跡ファイルからのトランザクションの操作すべてのデータが、連結されて1つのFlumeイベントにマップされます。イベントはトランザクションのコミット時にフラッシュされます。各Flumeイベントには、次のヘッダーがあります。

  • GG_TRANID: トランザクションのトランザクションID

  • OP_COUNT: このFlumeペイロード・イベントに含まれる操作の数

JSONやXMLなど自己記述型のフォーマットを使用する場合には、このモードを使用することをお薦めします。Replicatのバッチ処理機能を構成すると、1回のトランザクションで処理される操作の数が増えることに注意してください。

4.4 パフォーマンスに関する考慮事項

  • パフォーマンス向上のために、Replicatベースのグループ化を使用することをお薦めします。

  • gg.handler.flume_handler_nameのトランザクション・モード。最高のパフォーマンスを得るためには、 EventMapsTo=tx設定が推奨されます。

  • Flumeハンドラの最大ヒープ・サイズがパフォーマンスに影響する場合があります。ヒープが小さすぎると、JVMによるガベージ・コレクションが頻繁に発生することがあります。Oracle GoldenGate Javaプロパティ・ファイルでJVMの最大ヒープ・サイズを増やすと、パフォーマンスが向上する場合があります。

4.5 メタデータ変更イベント

Flumeハンドラは、メタデータ変更イベントに適応します。 メタデータ変更イベントを処理するには、ソース証跡ファイルに、その証跡ファイルのメタデータが必要です。ただし、この機能はソースで複製されるデータベースとアップストリームのOracle GoldenGate Captureプロセスを利用してDDLイベントを取得し、複製します。この機能は、Oracle GoldenGateのすべてのデータベース実装で使用できるわけではありません。DDLレプリケーションがサポートされているかどうかを確認するには、適切なデータベース用のOracle GoldenGateのインストレーションおよび構成ガイドを参照してください。

メタデータの変更がソースで発生する場合、Flumeハンドラはそのメタデータ変更イベントを、対応するフォーマッタに通知します。フォーマッタがその表のために保持しているキャッシュ済のスキーマがある場合には、削除されます。対応するフォーマッタで、その表に対する操作が次に発生したとき、スキーマが再生成されます。

4.6 Flumeソース構成の例

トピック:

4.6.1 Avro Flumeソース

Flumeエージェント構成ファイルからのAvro Flumeソースの構成例を次に示します。

client.type = default
hosts = h1
hosts.h1 = host_ip:host_port
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.6.2 Thrift Flumeソース

Flumeエージェント構成ファイルからのAvro Flumeソースの構成例を次に示します。

client.type = thrift
hosts = h1
hosts.h1 = host_ip:host_port

4.7 高度な機能

トピック:

4.7.1 スキーマの伝播

FlumeハンドラはFlumeにスキーマを伝播できます。これがサポートされているのは現在、Avroの行フォーマッタと操作フォーマッタのみです。この機能を有効にするには、次のプロパティを設定します。

gg.handler.name.propagateSchema=true

Avro行フォーマッタまたは操作フォーマッタは、ジャスト・イン・タイム・ベースでAvroスキーマを生成します。Avroスキーマは、表に対する操作が最初に発生したときに生成されます。メタデータ変更イベントがあると、クリアする表に対するスキーマ参照が発生するため、新しいスキーマは、その表で次に操作が発生したときに生成されます。

スキーマの伝播を有効にすると、FlumeハンドラはAvroイベントが発生したときにスキーマを伝播します。

Avroに対するデフォルトのFlumeスキーマ・イベント・ハンドラには、次の情報が含まれます。

  • SCHEMA_EVENT: true

  • GENERIC_WRAPPER: trueまたはfalse

  • TABLE_NAME: 証跡に表れる表名

  • SCHEMA_NAME: カタログ名(使用可能な場合)とスキーマ名

  • SCHEMA_HASH: Avroスキーマのハッシュ・コード

4.7.2 セキュリティ

Oracle GoldenGate for Big Data Flume HandlerからFlumeソースへの接続ではKerberos認証が機能します。この機能は、Thrift Flumeソースを使用するFlume 1.6.0以降でのみサポートされています。これを有効にするには、Flumeエージェント構成ファイルでFlumeソースの構成を変更します。

Flumeエージェント構成ファイルで、Kerberos認証を有効にするFlumeソース構成の例を次に示します。クライアントとサーバーのKerberosプリンシパル名を指定する必要があります。クライアント・プリンシパルのパスワードを実行時に解決できるように、Kerberos keytabファイルへのパスを指定する必要があります。Kerberosの管理方法、Kerberosプリンシパルおよび対応するパスワード、Kerberos keytabファイルの作成については、Kerberosのドキュメントを参照してください。

client.type = thrift
hosts = h1
hosts.h1 =host_ip:host_port
kerberos=true
client-principal=flumeclient/client.example.org@EXAMPLE.ORG
client-keytab=/tmp/flumeclient.keytab
server-principal=flume/server.example.org@EXAMPLE.ORG

4.7.3 フェイルオーバー機能

Flumeハンドラは、プライマリのFlumeソースが使用できなくなった場合にフェイルオーバーするように構成できます。この機能は現在、Avro Flumeソースを使用するFlume 1.6.0以降でのみサポートされています。これは、Flumeエージェント構成ファイルのFlumeソースの構成で有効にします。フェイルオーバー機能を有効にする構成例を次に示します。

client.type=default_failover
hosts=h1 h2 h3
hosts.h1=host_ip1:host_port1
hosts.h2=host_ip2:host_port2
hosts.h3=host_ip3:host_port3
max-attempts = 3
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.7.4 ロード・バランシング機能

発生するFlumeイベントが、複数のFlumeソース間でロード・バランシングされるように、Flumeハンドラを構成できます。これは現在、Avro Flumeソースを使用するFlume 1.6.0以降でのみサポートされています。この機能は、Flumeエージェント構成ファイルのFlumeソースの構成で有効にします。ロード・バランシング機能を有効にする構成例を次に示します。

client.type = default_loadbalance
hosts = h1 h2 h3
hosts.h1 = host_ip1:host_port1
hosts.h2 = host_ip2:host_port2
hosts.h3 = host_ip3:host_port3
backoff = false
maxBackoff = 0
host-selector = round_robin
batch-size = 100
connect-timeout = 20000
request-timeout = 20000

4.8 Flumeハンドラのトラブルシューティング

トピック:

4.8.1 Javaクラスパス

Javaクラスパスは、非常によくある問題の1つです。クラスパスに問題があることは、Oracle GoldenGate Java log4jログ・ファイルの、ClassNotFoundExceptionでわかります。この問題のトラブルシューティングに、Java log4jログ・ファイルを使用できます。ログ・レベルをDEBUGに設定すると、ログ・ファイルに記録されるgg.classpathオブジェクトで参照されているjarそれぞれを記録できます。この方法で、必要な依存性JARがすべて解決されることを確認できます。「クラスパス構成」を参照してください。

4.8.2 Flumeフロー制御の問題

状況によっては、Flumeハンドラは、Flumeシンクがメッセージをディスパッチするより早くFlumeソースに書込みを行う場合があります。この場合、Flumeハンドラはしばらく動作しますが、いったんFlumeがメッセージを受け付けなくなると、異常終了します。Oracle GoldenGate Javaログ・ファイルに記録された原因はEventDeliveryExceptionである可能性があり、これはFlumeハンドラがイベントを送信できなかったことを示します。問題の正確な原因は、Flumeのログを確認してください。FlumeエージェントでOutOfMemoryExceptionが発生している場合には、Flumeチャネルを構成して、Javaヒープの容量を増やすか、構成を増やすことができます。これで問題が完全に解決しない場合もあります。Flumeシンクがメッセージをディスパッチするより早くFlumeハンドラがFlumeソースにデータをプッシュする場合は、いずれかを変更すれば、エラーになるまでFlumeハンドラが稼働する期間が広がります。

4.8.3 Flumeエージェント構成ファイルが見つからない

Flumeエージェント構成ファイルがクラスパスにない場合は、Flumeハンドラが起動時に異常終了します。その結果、通常は、Flumeプロデューサのプロパティをロードする際のエラーとしてConfigExceptionに問題がリストされます。gg.handler.nameをチェックします。 RpcClientProperites構成ファイルで、Flumeエージェント・プロパティ・ファイルの命名が正しいことを確認します。GoldenGateのgg.classpathプロパティをチェックして、Flumeエージェント・プロパティ・ファイルを含むディレクトリがクラスパスに存在することを確認します。また、クラスパスをチェックして、Flumeエージェント・プロパティ・ファイルへのパスがワイルドカード(*)文字で終わっていないことも確認します。

4.8.4 Flume接続の例外

Flumeソースに接続できない場合、Flumeハンドラが起動時に異常終了します。この問題の根本原因は、Oracle GoldenGate Java log4jファイルでIOExeptionとしてレポートされ、特定のホストおよびポートでFlumeに接続できなかったことを示します。次の点を確認します。

  • Flumeエージェント・プロセスが実行されていること。

  • FlumeハンドラがアクセスするFlumeエージェント構成ファイルに、正しいホストとポートが指定されていること。

4.8.5 その他のエラー

Oracle GoldenGate Java log4jファイルの内容を確認して、修正するその他の問題を特定します。