第4章 Kafka Connect について
Kafka Connect は、Kafka ブローカーと他のシステムの間でデータをストリーミングする統合ツールです。もう 1 つのシステムは通常、データベースなどの外部データソースまたはターゲットです。
Kafka Connect はプラグインアーキテクチャーを使用して、コネクターの実装アーティファクトを提供します。プラグインは他のシステムへの接続を可能にし、データを操作するための追加の設定を提供します。プラグインには、コネクターや、データコンバーターや変換などの他のコンポーネントが含まれます。コネクターは、特定のタイプの外部システムで動作します。各コネクターは、その設定のスキーマを定義します。設定を Kafka Connect に指定して、Kafka Connect 内にコネクターインスタンス を作成します。次に、コネクターインスタンスは、システム間でデータを移動するための一連のタスクを定義します。
AMQ Streams は、分散モード で Kafka Connect を操作し、データストリーミングタスクを 1 つ以上のワーカー Pod に分散します。Kafka Connect クラスターは、ワーカー Pod のグループで設定されます。各コネクターは、1 つのワーカーでインスタンス化されます。各コネクターは、ワーカーのグループ全体に分散される 1 つ以上のタスクで設定されます。ワーカー間での分散により、拡張性の高いパイプラインが可能になります。
ワーカーは、データをある形式からソースシステムまたはターゲットシステムに適した別の形式に変換します。コネクターインスタンスの設定によっては、ワーカーが変換 (単一メッセージ変換 (SMT) とも呼ばれます) を適用する場合もあります。変換は、コンバージョンされる前に、特定のデータのフィルタリングなど、メッセージを調整します。Kafka Connect にはいくつかの組み込みの変換がありますが、必要に応じてプラグインによって他の変換を提供できます。
4.1. Kafka Connect でのデータのストリーミング方法
Kafka Connect は、コネクターインスタンスを使用して他のシステムと統合し、データをストリーミングします。
Kafka Connect は、起動時に既存のコネクターインスタンスをロードし、データストリーミングタスクとコネクター設定をワーカー Pod 全体に分散します。ワーカーは、コネクターインスタンスのタスクを実行します。各ワーカーは個別の Pod として実行され、Kafka Connect クラスターの耐障害性を高めます。ワーカーよりも多くのタスクがある場合は、ワーカーには複数のタスクが割り当てられます。ワーカーに障害が発生した場合、そのタスクは Kafka Connect クラスター内のアクティブなワーカーに自動的に割り当てられます。
ストリーミングデータで使用される主な Kafka Connect コンポーネントは次のとおりです。
- タスクを作成するためのコネクター
- データを移動するタスク
- タスクを実行するワーカー
- データを操作するための変換
- データを変換するコンバーター
4.1.1. コネクター
コネクターは、次のいずれかのタイプにすることができます。
- データを Kafka にプッシュするソースコネクター
- Kafka からデータを抽出するシンクコネクター
プラグインは、Kafka Connect がコネクターインスタンスを実行するための実装を提供します。コネクターインスタンスは、Kafka との間でデータを転送するために必要なタスクを作成します。Kafka Connect ランタイムは、必要な作業をワーカー Pod 間で分割するタスクを調整します。
MirrorMaker 2 は、Kafka Connect フレームワークも使用します。この場合、外部データシステムは別の Kafka クラスターです。MirrorMaker 2 の専用コネクターは、ソースとターゲットの Kafka クラスター間のデータレプリケーションを管理します。
MirrorMaker 2 コネクターに加えて、Kafka は例として 2 つのコネクターを提供します。
-
File Stream Source Connector
は、ワーカーのファイルシステム上のファイルから Kafka にデータをストリーミングし、入力ファイルを読み取り、各行を特定の Kafka トピックに送信します。 -
FileStreamSinkConnector
は、Kafka からワーカーのファイルシステムにデータをストリーミングし、Kafka トピックからメッセージを読み取り、出力ファイルにそれぞれの行を書き込みます。
次のソースコネクターの図は、外部データシステムからレコードをストリーミングするソースコネクターのプロセスフローを示しています。Kafka Connect クラスターは、ソースコネクターとシンクコネクターを同時に操作する場合があります。ワーカーはクラスター内で分散モードで実行されています。ワーカーは、複数のコネクターインスタンスに対して 1 つ以上のタスクを実行できます。
Kafka へのソースコネクターストリーミングデータ
- プラグインがソースコネクターの実装アーティファクトを提供する
- 1 つのワーカーがソースコネクターインスタンスを開始する
- ソースコネクターがデータをストリーミングするタスクを作成する
- タスクが並行して実行され、外部データシステムをポーリングしてレコードを返す
- 変換がレコードのフィルタリングや再ラベル付けなど、レコードを調整する
- コンバーターがレコードを Kafka に適した形式に変換する
- ソースコネクターが KafkaConnectors または Kafka Connect API を使用して管理される
次のシンクコネクターの図は、Kafka から外部データシステムにデータをストリーミングするときのプロセスフローを示しています。
Kafka からのシンクコネクターストリーミングデータ
- プラグインがシンクコネクターの実装アーティファクトを提供する
- 1 つのワーカーがシンクコネクターインスタンスを開始する
- シンクコネクターがデータをストリーミングするタスクを作成する
- タスクが並行して実行され、Kafka をポーリングしてレコードを返す
- コンバーターがレコードを外部データシステムに適した形式に変換する
- 変換がレコードのフィルタリングや再ラベル付けなど、レコードを調整する
- シンクコネクターが KafkaConnectors または Kafka Connect API を使用して管理される
4.1.2. タスク
Kafka Connect ランタイムによって調整されたデータ転送は、並行して実行されるタスクに分割されます。タスクは、コネクターインスタンスによって提供される設定を使用して開始されます。Kafka Connect は、タスク設定をワーカーに配布します。ワーカーは、タスクをインスタンス化して実行します。
- ソースコネクタータスクは外部データシステムをポーリングし、ワーカーが Kafka ブローカーに送信するレコードのリストを返します。
- シンクコネクタータスクは、外部データシステムに書き込むためにワーカーから Kafka レコードを受信します。
シンクコネクターの場合、作成されるタスクの数は、消費されるパーティションの数に関連します。ソースコネクターの場合、ソースデータの分割方法はコネクターによって定義されます。コネクター設定で tasksMax
を設定することにより、並行して実行できるタスクの最大数を制御できます。コネクターが作成するタスク数は、最大設定よりも少ないなる可能性があります。たとえば、ソースデータをその数のパーティションに分割できない場合、コネクターは作成するタスクが少なくなる可能性があります。
Kafka Connect のコンテキストでは、partition (パーティション) は、外部システムのトピックパーティションまたは shard of data (データのシャード) を意味する場合があります。
4.1.3. ワーカー
ワーカーは、Kafka Connect クラスターにデプロイされたコネクター設定を採用します。設定は、Kafka Connect によって使用される内部 Kafka トピックに保存されます。ワーカーは、コネクターとそのタスクも実行します。
Kafka Connect クラスターには、同じ group.id
を持つワーカーのグループが含まれています。ID は、Kafka 内のクラスターを識別します。ID は、KafkaConnect
リソースを介してワーカー設定で割り当てられます。ワーカー設定では、Kafka Connect の内部トピックの名前も指定されます。トピックには、コネクター設定、オフセット、およびステータス情報が格納されます。これらのトピックのグループ ID と名前も、Kafka Connect クラスターに固有である必要があります。
ワーカーには、1 つ以上のコネクターインスタンスとタスクが割り当てられます。Kafka Connect をデプロイするための分散型アプローチは、フォールトトレラントでスケーラブルです。ワーカー Pod に障害が発生した場合、実行中のタスクはアクティブなワーカーに再割り当てされます。Kafka Connect
リソースの replicas
プロパティーを設定することで、ワーカー Pod のグループに追加できます。
4.1.4. 変換
Kafka Connect は、外部データを変換します。シングルメッセージは、変更メッセージをターゲットの宛先に適した形式に変換します。たとえば、変換によってフィールドが挿入または名前変更される場合があります。変換では、データをフィルタリングしてルーティングすることもできます。プラグインには、ワーカーが 1 つ以上の変換を実行するために必要な実装が含まれています。
- ソースコネクターは、データを Kafka でサポートされている形式に変換する前に変換を適用します。
- シンクコネクターは、データを外部データシステムに適した形式に変換した後に変換を適用します。
変換は、コネクタープラグインに含めるために JAR ファイルにパッケージ化された Java クラスファイルのセットで設定されます。Kafka Connect は一連の標準変換を提供しますが、独自の変換を作成することもできます。
4.1.5. コンバーター
ワーカーはデータを受信すると、コンバーターを使用してデータを適切な形式に変換します。KafkaConnect
リソースのワーカー config
でワーカーのコンバーターを指定します。
Kafka Connect は、JSON や Avro などの Kafka でサポートされている形式との間でデータを変換できます。また、データを構造化するためのスキーマもサポートしています。データを構造化形式に変換しない場合は、スキーマを有効にする必要はありません。
特定のコネクターのコンバーターを指定して、全ワーカーに該当する一般的な Kafka Connect ワーカー設定をオーバーライドすることもできます。