翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
2KCL.x から 3.x KCL への移行
このトピックでは、 step-by-stepコンシューマーを 2.x から KCL 3.x KCL に移行する手順について説明します。 KCL 3.x は、2.x KCL コンシューマーのインプレース移行をサポートしています。ワーカーをローリング方式で移行しながら、Kinesis データストリームからのデータを引き続き消費できます。
重要
KCL 3.x は 2.x KCL と同じインターフェイスとメソッドを維持します。したがって、移行中にレコード処理コードを更新する必要はありません。ただし、適切な設定を行い、移行に必要なステップを確認する必要があります。移行をスムーズに行うには、次の移行ステップに従うことを強くお勧めします。
ステップ 1: 前提条件
3.x KCL の使用を開始する前に、以下があることを確認してください。
-
Java Development Kit (JDK) 8 以降
-
AWS SDK for Java 2.x
-
依存関係管理のための Maven または Gradle
ステップ 2: 依存関係を追加する
Maven を使用している場合は、次の依存関係を pom.xml
ファイルに追加します。3.x.x をKCL最新バージョンに置き換えたことを確認してください。
<dependency> <groupId>software.amazon.kinesis</groupId> <artifactId>amazon-kinesis-client</artifactId> <version>3.x.x</version> <!-- Use the latest version --> </dependency>
Gradle を使用している場合は、build.gradle
ファイルに以下を追加します。3.x.x をKCL最新バージョンに置き換えたことを確認してください。
implementation 'software.amazon.kinesis:amazon-kinesis-client:3.x.x'
Maven Central Repository
ステップ 3: 移行関連の設定をセットアップする
2KCL.x から 3.x KCL に移行するには、次の設定パラメータを設定する必要があります。
-
CoordinatorConfig.clientVersionConfig: この設定により、アプリケーションを実行するKCLバージョン互換性モードが決まります。2KCL.x から 3.x に移行する場合は、この設定を に設定する必要があります
CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X
。この設定を行うには、スケジューラオブジェクトを作成するときに次の行を追加します。
configsBuilder.coordiantorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPLATIBLE_WITH_2X)
2.x から 3KCL.x CoordinatorConfig.clientVersionConfig
に移行するために を設定する方法の例を次に示します。必要に応じて、特定の要件に基づいて他の設定を調整できます。
Scheduler scheduler = new Scheduler( configsBuilder.checkpointConfig(), configsBuilder.coordiantorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPLATIBLE_WITH_2X), configsBuilder.leaseManagementConfig(), configsBuilder.lifecycleConfig(), configsBuilder.metricsConfig(), configsBuilder.processorConfig(), configsBuilder.retrievalConfig() );
KCL 2.x と 3.x では異なるロードバランシングアルゴリズムが使用されるため、コンシューマーアプリケーションのすべてのワーカーが同時に同じロードバランシングアルゴリズムを使用することが重要です。負荷分散アルゴリズムが異なるワーカーを実行すると、2 つのアルゴリズムが独立して動作するため、最適ではない負荷分散が発生する可能性があります。
この KCL 2.x 互換性設定により、コンシューマーアプリケーションのすべてのワーカーが KCL 3.x にアップグレードされるまで、3.x KCL アプリケーションは 2.x KCL と互換性のあるモードで実行され、2.x KCL の負荷分散アルゴリズムを使用できます。移行が完了すると、 KCLは自動的にフル KCL 3.x 機能モードに切り替え、実行中のすべてのワーカーに対して新しい KCL 3.x ロードバランシングアルゴリズムの使用を開始します。
重要
を使用していないConfigsBuilder
が、設定を設定するLeaseManagementConfig
オブジェクトを作成する場合は、KCLバージョン 3.x 以降applicationName
で というパラメータを 1 つ追加する必要があります。詳細については、「コン LeaseManagementConfig ストラクタを使用したコンパイルエラー」を参照してください。ConfigsBuilder
を使用してKCL設定することをお勧めします。 ConfigsBuilder
は、より柔軟で保守可能な方法でKCLアプリケーションを設定する方法を提供します。
ステップ 4: shutdownRequested() メソッド実装のベストプラクティスに従う
KCL 3.x では、リースの再割り当てプロセスの一環としてリースが別のワーカーに引き渡されたときのデータの再処理を最小限に抑えるために、グレースフルリースハンドオフと呼ばれる機能が導入されています。これは、リースの引き渡し前にリーステーブルで最後に処理されたシーケンス番号をチェックポイントすることで実現されます。リースの引き渡しが適切に機能するようにするには、 RecordProcessor
クラスの shutdownRequested
メソッド内で checkpointer
オブジェクトを呼び出す必要があります。shutdownRequested
メソッド内でcheckpointer
オブジェクトを呼び出しない場合は、次の例に示すように実装できます。
重要
-
次の実装例は、正常なリース引き渡しの最小要件です。必要に応じて、チェックポイントに関連する追加のロジックを含めるように拡張できます。非同期処理を実行する場合は、チェックポイントを呼び出す前に、ダウンストリームに配信されたすべてのレコードが処理されていることを確認してください。
-
リースの正常な引き渡しにより、リース転送中のデータ再処理の可能性が大幅に低下しますが、この可能性を完全に排除するわけではありません。データの整合性と一貫性を維持するには、ダウンストリームのコンシューマーアプリケーションをべき等になるように設計します。つまり、システム全体に悪影響を及ぼさずに、重複する可能性のあるレコード処理を処理できる必要があります。
/** * Invoked when either Scheduler has been requested to gracefully shutdown * or lease ownership is being transferred gracefully so the current owner * gets one last chance to checkpoint. * * Checkpoints and logs the data a final time. * * @param shutdownRequestedInput Provides access to a checkpointer, allowing a record processor to checkpoint * before the shutdown is completed. */ public void shutdownRequested(ShutdownRequestedInput shutdownRequestedInput) { try { // Ensure that all delivered records are processed // and has been successfully flushed to the downstream before calling // checkpoint // If you are performing any asynchronous processing or flushing to // downstream, you must wait for its completion before invoking // the below checkpoint method. log.info("Scheduler is shutting down, checkpointing."); shutdownRequestedInput.checkpointer().checkpoint(); } catch (ShutdownException | InvalidStateException e) { log.error("Exception while checkpointing at requested shutdown. Giving up.", e); } }
ステップ 5: ワーカーメトリクスを収集するための KCL 3.x の前提条件を確認する
KCL 3.x は、ワーカーのCPU使用率などのCPU使用率メトリクスを収集して、ワーカー間で負荷を均等に分散します。コンシューマーアプリケーションワーカーは、Amazon EC2、Amazon ECS、Amazon EKS、または で実行できます AWS Fargate。 KCL 3.x は、次の前提条件が満たされた場合にのみ、ワーカーからCPU使用率メトリクスを収集できます。
Amazon Elastic Compute Cloud(AmazonEC2)
-
オペレーティングシステムは Linux OS である必要があります。
-
EC2 インスタンスIMDSv2で を有効にする必要があります。
Amazon での Amazon Elastic Container Service (Amazon ECS) EC2
-
オペレーティングシステムは Linux OS である必要があります。
-
ECS タスクメタデータエンドポイントバージョン 4 を有効にする必要があります。
-
Amazon ECSコンテナエージェントのバージョンは 1.39.0 以降である必要があります。
ECSでの Amazon AWS Fargate
-
Fargate タスクメタデータエンドポイントバージョン 4 を有効にする必要があります。Fargate プラットフォームバージョン 1.4.0 以降を使用している場合、これはデフォルトで有効になっています。
-
Fargate プラットフォームバージョン 1.4.0 以降。
Amazon での Amazon Elastic Kubernetes Service (Amazon EKS) EC2
-
オペレーティングシステムは Linux OS である必要があります。
EKSでの Amazon AWS Fargate
-
Fargate プラットフォーム 1.3.0 以降。
重要
前提条件が満たされていないために KCL 3.x がワーカーからCPU使用率メトリクスを収集できない場合、リースあたりのスループットレベルの負荷が再調整されます。このフォールバック再調整メカニズムにより、すべてのワーカーが各ワーカーに割り当てられたリースから同様の合計スループットレベルを得ることができます。詳細については、「がワーカーにリースをKCL割り当て、負荷のバランスをとる方法」を参照してください。
ステップ 6: 3.x KCL のIAMアクセス許可を更新する
3KCL.x コンシューマーアプリケーションに関連付けられたIAMロールまたはポリシーに、次のアクセス許可を追加する必要があります。これには、KCLアプリケーションで使用される既存のIAMポリシーの更新が含まれます。詳細については、「IAM KCLコンシューマーアプリケーションに必要な アクセス許可」を参照してください。
重要
既存のKCLアプリケーションでは、 2.x KCL で必要なかったため、IAMポリシーに次のIAMアクションとリソースが追加されていない可能性があります。3.x KCL アプリケーションを実行する前に、それらを追加していることを確認してください。
-
アクション:
UpdateTable
-
リソース (ARNs):
arn:aws:dynamodb:region:account:table/KCLApplicationName
-
-
アクション:
Query
-
リソース (ARNs):
arn:aws:dynamodb:region:account:table/KCLApplicationName/Index/*
-
-
アクション:
CreateTable
、DescribeTable
、、Scan
、GetItem
PutItem
、UpdateItem
、DeleteItem
-
リソース (ARNs):
arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats
、arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState
の「region」、「account」、KCLApplicationName「」をそれぞれ独自の名前 AWS リージョン、 AWS アカウント 数値、およびKCLアプリケーション名ARNsに置き換えます。設定を使用して、 によって作成されたメタデータテーブルの名前をカスタマイズする場合はKCL、KCLアプリケーション名ではなく、指定されたテーブル名を使用します。
-
ステップ 7: 3.x KCL コードをワーカーにデプロイする
移行に必要な設定を行い、以前の移行チェックリストをすべて完了したら、コードをビルドしてワーカーにデプロイできます。
注記
LeaseManagementConfig
コンストラクタでコンパイルエラーが発生した場合は、「コン LeaseManagementConfig ストラクタでのコンパイルエラー」を参照してトラブルシューティング情報を確認してください。
ステップ 8: 移行を完了する
3.x KCL コードのデプロイ中、 は 2.x KCL のリース割り当てアルゴリズムをKCL引き続き使用します。すべてのワーカーに 3.x KCL コードを正常にデプロイすると、 KCLは自動的にこれを検出し、ワーカーのリソース使用率に基づいて新しいリース割り当てアルゴリズムに切り替えます。新しいリース割り当てアルゴリズムの詳細については、「」を参照してくださいがワーカーにリースをKCL割り当て、負荷のバランスをとる方法。
デプロイ中に、次のメトリクスを出力して移行プロセスをモニタリングできます CloudWatch。Migration
オペレーションでメトリクスをモニタリングできます。すべてのメトリクスは per-KCL-applicationメトリクスであり、SUMMARY
メトリクスレベルに設定されます。CurrentState:3xWorker
メトリクスのSum
統計がKCLアプリケーション内のワーカーの総数と一致する場合は、3.x KCL への移行が正常に完了したことを示します。
重要
すべてのワーカーが新しいリース割り当てアルゴリズムを実行する準備ができたらKCL、 が新しいリース割り当てアルゴリズムに切り替えるまでに少なくとも 10 分かかります。
メトリクス | 説明 |
---|---|
CurrentState:3xWorker |
3.x KCL に正常に移行し、新しいリース割り当てアルゴリズムを実行したKCLワーカーの数。このメトリクスの
|
CurrentState:2xCompatibleWorker |
移行プロセス中に 2.x KCL 互換モードで実行されているKCLワーカーの数。このメトリクスのゼロ以外の値は、移行がまだ進行中であることを示します。
|
Fault |
移行プロセス中に発生した例外の数。これらの例外のほとんどは一時的なエラーであり、3.x KCL は自動的に移行の完了を再試行します。永続的な
|
GsiStatusReady |
リーステーブルのグローバルセカンダリインデックス (GSI) 作成のステータス。このメトリクスは、リーステーブルGSIの が作成されたかどうかを示します。これは 3.x KCL を実行するための前提条件です。値は 0 または 1 で、1 は作成が成功したことを示します。ロールバック状態の間、このメトリクスは出力されません。ロールフォワードを再開すると、このメトリクスのモニタリングを再開できます。
|
workerMetricsReady |
すべてのワーカーからのワーカーメトリクスの放出のステータス。メトリクスは、すべてのワーカーがCPU使用率などのメトリクスを出力しているかどうかを示します。値は 0 または 1 で、1 はすべてのワーカーがメトリクスを正常に出力し、新しいリース割り当てアルゴリズムの準備が整っていることを示します。ロールバック状態の間、このメトリクスは出力されません。ロールフォワードを再開すると、このメトリクスのモニタリングを再開できます。
|
KCL は、移行中に 2.x 互換モードへのロールバック機能を提供します。3.x KCL への移行が成功したら、ロールバックが不要CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X
になった場合は CoordinatorConfig.clientVersionConfig
の設定を削除することをお勧めします。この設定を削除すると、KCLアプリケーションからの移行関連のメトリクスの放出が停止します。
注記
移行中および移行完了後の一定期間、アプリケーションのパフォーマンスと安定性をモニタリングすることをお勧めします。問題が発生した場合は、KCL移行ツールを使用して