記事ディレクトリ
概要
Kafka Connect は、ある場所から別の場所にデータを転送するのに役立つツールです。たとえば、Web サイトを持っていて、分析のためにユーザー データを別の場所に転送したい場合は、Kafka Connect を使用してこのタスクを完了できます。
Kafka Connect の使用は非常に簡単です。これには 2 つの主要な概念があります:source 和 sink
。ソースはデータ ソースからデータを読み取るコンポーネントであり、シンクはターゲット システムにデータを書き込むコンポーネントです。Kafka Connect を使用すると、ソースとシンクの関連情報を設定するだけで、データをある場所から別の場所に自動的に送信できます。
メインコンセプト
Kafka Connect を使用してデータ フローを調整する場合、次の重要な概念がいくつかあります。
コネクタ
- コネクタは、データ フローを調整するための高レベルの抽象化です。データ ソースからデータを読み取り、Kafka クラスター内の特定のトピックに転送する方法、または Kafka クラスター内の特定のトピックからデータを読み取り、データ ストアまたは他のターゲット システムに書き込む方法について説明します。
Kafka Connect のコネクタは、データのレプリケート先とレプリケーション元を定義します。コネクタ インスタンスは、Kafka と別のシステム間のデータのレプリケーションを管理する論理ジョブです。コネクタによって実装または使用されるすべてのクラスは、コネクタ プラグインで定義されます。コネクタ インスタンスとコネクタ プラグインは両方とも「コネクタ」と呼ばれます。
Kafka Connect を使用すると、複数のソースから Kafka へ、また Kafka から複数のターゲットへデータを簡単にストリーミングできます。Kafka Connect には何百もの異なるコネクタがあります。最も人気のあるものは次のとおりです。
これらのコネクタの詳細は次のとおりです。
RDBMS コネクタ: リレーショナル データベース (Oracle、SQL Server、DB2、Postgres、MySQL など) からデータを読み取り、Kafka クラスター内の指定されたトピックに書き込むか、Kafka クラスター内の指定されたトピックからデータを読み取って書き込むために使用されます。それをリレーショナル データベースに保存します。
クラウド オブジェクト ストア コネクタ: クラウド オブジェクト ストレージ (Amazon S3、Azure Blob Storage、Google Cloud Storage など) からデータを読み取り、Kafka クラスター内の指定されたトピック、または Kafka クラスター内の指定されたトピックにデータを書き込むために使用されます。データを作成してクラウド オブジェクト ストレージに書き込みます。
メッセージ キュー コネクタ: メッセージ キュー (ActiveMQ、IBM MQ、RabbitMQ など) からデータを読み取り、Kafka クラスター内の指定されたトピックに書き込むか、Kafka クラスター内の指定されたトピックからデータを読み取るために使用されます。メッセージキューに追加されます。
NoSQL およびドキュメント ストア コネクタ: NoSQL データベース (Elasticsearch、MongoDB、Cassandra など) からデータを読み取り、Kafka クラスター内の指定されたトピックに書き込むか、Kafka クラスター内の指定されたトピックからデータを読み取って書き込むために使用されます。 NoSQL データベースにコピーします。
クラウド データ ウェアハウス コネクタ: クラウド データ ウェアハウス (Snowflake、Google BigQuery、Amazon Redshift など) からデータを読み取り、それを Kafka クラスター内の指定されたトピックに書き込むか、Kafka クラスター内の指定されたトピックからデータを読み取るために使用されます。それをクラウド データ ウェアハウスに書き込みます。
上記の一般的なコネクタに加えて、Kafka Connect は次のような他の多くのデータ ソースとターゲットをサポートします。
- Hadoop ファイル システム (HDFS)
- アマゾンキネシス
- ツイッター
- FTP/SFTP
- セールスフォース
- JMS
- Apache HBase
- アパッチ カサンドラ
- 流入DB
- アパッチドルイド
これらのコネクタにより、Kafka Connect を柔軟で拡張可能なデータ パイプラインにし、さまざまなソースから Kafka にデータを簡単に流したり、さまざまな宛先にデータを流したりすることができます。
タスク
タスクは、実際のデータ レプリケーション プロセスを調整する Kafka Connect データ モデルの主要コンポーネントです。各コネクタ インスタンスは、ソースからターゲットへのデータのコピーを担当する一連のタスクを調整します。
Kafka Connect は、コネクタが単一のジョブを複数のタスクに分割できるようにすることで、並列処理とスケーラビリティの組み込みサポートを提供します。これらのタスクはステートレスであり、ローカルに状態情報を保存しません。代わりに、タスクのステータスは、Kafka の 2 つの特別なトピック config.storage.topic と status.storage.topic に保存され、関連付けられたコネクタによって管理されます。
Kafka Connect は、タスクの状態を Kafka に保存することで、弾力的でスケーラブルなデータ パイプラインを有効にします。これは、状態情報を失うことなく、いつでもタスクを開始、停止、または再開できることを意味します。さらに、タスクの状態は Kafka に保存されるため、状態情報をさまざまな Kafka Connect インスタンス間で簡単に共有でき、高可用性と耐障害性が実現します。
作品
- ワーカーは、コネクタとタスクを実行するプロセスを実行します。これらは、Kafka クラスター内の特定のトピックからタスク構成を読み取り、コネクタ インスタンスのタスクに割り当てます。
コンバーター
コンバーターは、データを送受信するシステム間でデータを変換するための Kafka Connect のメカニズムです。異なるシステム間で転送できるように、データをある形式から別の形式に変換します。
Kafka Connect では、データは通常、バイト配列の形式で送信されます。コンバーターは、Java オブジェクトをバイト配列にシリアル化し、バイト配列を Java オブジェクトに逆シリアル化します。このようにして、データ形式の互換性を気にせずに、異なるシステム間でデータを転送できます。
Kafka Connect は、JSON コンバーター、Avro コンバーター、Protobuf コンバーターなどのさまざまな組み込みコンバーターを提供します。これらのコンバータはさまざまなデータ形式をサポートしており、簡単に構成して使用できます。
さらに、Kafka Connect はカスタム コンバーターもサポートしており、ユーザーは特定のニーズを満たすために独自のコンバーターを作成できます。カスタム コンバータは通常、org.apache.kafka.connect.storage.Converter インターフェイスを実装し、シリアル化メソッドと逆シリアル化メソッドの実装を提供する必要があります。
つまり、コンバーターは Kafka Connect の非常に便利なメカニズムであり、異なるシステム間でデータを転送し、データ形式の変換を実現するのに役立ちます。
変換
変換は、コネクタによって生成される、またはコネクタに送信されるすべてのメッセージに単純なロジックを適用することによって、メッセージを変換するための Kafka Connect のメカニズムです。変換は、データ クリーニング、データ変換、データ拡張などのシナリオで一般的に使用されます。
変換を通じて、フィールドの削除、フィールド名の変更、タイムスタンプの追加、データ型の変更などの一連の変換操作を各メッセージに適用できます。変換は通常、一連のトランスフォーマーで構成され、それぞれが特定の変換操作の実行を担当します。
Kafka Connect は、ExtractField、TimestampConverter、ValueToKey などのさまざまな組み込みコンバータを提供します。さらに、特定のニーズを満たすためにカスタム コンバータを作成することもできます。
つまり、Transforms は Kafka Connect の非常に便利なメカニズムであり、メッセージの構造とコンテンツを変更して、データのクリーニング、変換、強化などの機能を実現するのに役立ちます。
デッドレターキュー
Dead Letter Queue は、Kafka Connect がコネクタ エラーを処理するためのメカニズムです。コネクタがメッセージを処理できない場合は、後の検査と処理のためにメッセージをデッドレター キューに送信できます。
デッド レター キューは通常、コネクタで処理できないメッセージを保存するための特別なトピックです。これらのメッセージは、逆シリアル化、変換、ターゲット システムへの書き込みができないか、無効なデータが含まれている可能性があります。いずれの場合も、これらのメッセージをデッドレター キューに送信すると、信頼性と一貫性のあるデータ フローを確保できます。
Dead Letter Queue を使用すると、コネクタ エラーを簡単に監視し、適切に処理できます。たとえば、デッドレター キュー内のメッセージを手動でチェックして問題の解決を試みることも、これらのメッセージを自動的にチェックして処理するスクリプトまたはアプリケーションを作成することもできます。
つまり、Dead Letter Queue は、Kafka Connect がコネクタ エラーを処理するための重要なメカニズムであり、データ ストリームの信頼性と一貫性を確保し、エラー処理プロセスを簡素化するのに役立ちます。
主な利用シーン
Kafka には通常、データ パイプラインで 2 つの主な使用シナリオがあります。
- Kafka は、データ パイプラインのエンドポイント、ソースまたは宛先として機能します。たとえば、Kafka から S3 にデータをエクスポートしたり、MongoDB から Kafka にデータをインポートしたりします。
- Kafka は、データ パイプライン内の 2 つのエンドポイント間のミドルウェアとして機能します。たとえば、xx ストリームから Kafka にデータをインポートし、Kafka から Elasticsearch にエクスポートします。
主な値
Kafka がデータ パイプラインにもたらす主な価値は次のとおりです。
-
これは大きなバッファとして機能し、データのプロデューサーとコンシューマーを効果的に分離します。
-
セキュリティと効率の点で非常に信頼性が高く、データ パイプラインの構築には最適です。
Kafka Connect API 対プロデューサーおよびコンシューマー API
Kafka Connect API は、データ統合における一般的な問題を解決するように設計されています。
プロデューサー API とコンシューマー API を直接使用する場合に比べて、Kafka Connect API には次のような利点があります。
- 開発を簡素化します。プロデューサとコンシューマのロジックを手動で記述する必要はありません。
- フォールトトレラントです。Connect は失敗したタスクを自動的に再開し、損失なくデータの同期を継続します。
- 共通のデータ ソースと宛先はすでに組み込まれています。たとえば、mysql、postgres、elasticsearch などのコネクタが開発されており、簡単に使用できます。
- 一貫した構成と管理インターフェイス。コネクタ タスクは、REST API を介して簡単に構成、開始、停止できます。
Kafka Connect API に加えて、Kafka を他のシステムと統合してデータ統合を実現することもできます。例えば:
- Spark Streaming と統合して、リアルタイムのデータ分析と機械学習を実現します。
- Flink と組み合わせることで、Exactly-Once セマンティクスによるストリーム処理を実現します。
- Storm と組み合わせてリアルタイム コンピューティング ツールを構築します。
- Hadoop と組み合わせてリアルタイムおよびバッチ コンピューティングを実現します。
データ パイプラインを構築する際に考慮すべき重要な問題
- 適時性: さまざまな適時性要件をサポートし、移行できます。Kafka はバッファーとして機能し、プロデューサーとコンシューマーを分離し、リアルタイムおよびバッチ処理をサポートします。
- 信頼性: 単一障害点を回避し、迅速に回復できます。Kafka は少なくとも 1 回の配信をサポートしており、外部システムと組み合わせて 1 回のみの配信も可能です。
- 高スループットと動的スループット: 高い同時実行性とバースト トラフィックをサポートします。Kafka はスループットが高く、プロデューサーとコンシューマーが分離されており、動的に調整できます。
- データ形式: さまざまな形式がサポートされており、コネクタは形式を変換できます。Kafka および Connect API はフォーマットに依存せず、プラグイン可能なコンバーターを使用します。
- 変換: ETL と ELT。ETL はスペースと時間を節約しますが、ダウンストリーム システムは制限されます。ELT は元のデータを保持し、より柔軟です。
- セキュリティ: データ暗号化、認証と認可、監査ログ。Kafka はこれらのセキュリティ機能をサポートしています。
- 障害処理: 異常なデータを処理し、再試行して修正します。Kafka はデータを長期間保持するため、履歴データを再処理できます。
- 結合と柔軟性:
- アプリケーションごとに個別のデータ パイプラインを作成し、メンテナンス コストを増加させることを避けます。
- メタデータを保持し、スキーマの変更を許可して、プロデューサーとコンシューマー間の密結合を回避します。
- 処理するデータをできる限り少なくし、下流システムの柔軟性を高めます。過剰な治療は下流システムを制限する可能性があります。
つまり、優れたデータ パイプラインを構築するには、時間、セキュリティ、形式変換、障害処理のあらゆる側面を考慮する必要があると同時に、ダウンストリーム システムに最大限の柔軟性を与えるために、可能な限り疎結合にする必要があります。データを使用します。
Kafka はストリーム処理プラットフォームとして、これらの問題をうまく解決し、プロデューサーとコンシューマーを切り離すバッファーの役割を果たします。同時に、Kafka Connect はデータ入出力用の共通インターフェイスを提供し、統合作業を簡素化します。
Kafka を使用して構築されたデータ パイプラインは、リアルタイム処理シナリオとバッチ処理シナリオの両方に対応でき、高可用性、高スループット、および高スケーラビリティの特性を備えています。
ETL VS ELT
さまざまなデータ統合方法
2 つの異なるデータ統合方法
- ETL: 抽出-変換-ロード、つまり抽出-変換-ロード。このアプローチでは、データはソース システムから抽出され、変換および処理されてからターゲット システムにロードされます。
- ELT: Extract-Load-Transform、つまり抽出-ロード-変換。このように、データはソース システムから抽出された後、まずターゲット システムにロードされ、次にターゲット システムで変換および処理されます。
- ETL と ELT の主な違いは、データ変換のタイミングと場所です。ETL はロード前にデータを変換し、ELT はロード後にデータを変換します。ETL の変換はソース システムとターゲット システムの間で発生し、ELT の変換はターゲット システム内で発生します。
ETL と ELT にはどちらにも長所と短所があります。
ETL の利点:
- ロード中にデータをフィルタリング、集計、サンプリングできるため、ストレージとコンピューティングのコストが削減されます。
- データをターゲット システムにロードする前に、データの形式と品質を確認できます。
ETL の欠点: - 変換ロジックがデータ パイプラインに混在しているため、保守とデバッグが困難になります。
- 下流システムは変換されたデータにのみアクセスできるため、柔軟性に欠けます。
ELT の利点: - より柔軟に下流システムに生データを提供します。下流システムは、必要に応じてデータ自体を処理および変換できます。
- 変換ロジックはダウンストリーム システムにあるため、デバッグと保守が容易になります。
- ソースデータは後戻りして再処理するのが簡単です。
ELT の欠点:
- ターゲット システムには強力なデータ処理機能が必要です。
- 生データを保存するには、より大きなストレージ容量が必要です。
- 変換プロセスにより、ターゲット システムに大きな負荷がかかる可能性があります。
一般に、ダウンストリーム システムが高い柔軟性と強力なデータ処理能力でデータを処理する必要がある場合、多くの場合、ELT の方が適しています。それ以外の場合は、データをロードする前にデータを前処理し、ダウンストリーム システムの負荷を軽減することで、ETL の効率を高めることができます。多くの場合、ETL と ELT の混合も使用されます。