Amazon Web Services ブログ
Amazon MSK レプリケータのご紹介 – 同一または異なる AWS リージョンの MSK クラスター間でのフルマネージドレプリケーション
Amazon Managed Streaming for Apache Kafka (Amazon MSK) は、ストリーミングデータの処理方法を簡素化する、完全に管理された可用性の高い Apache Kafka サービスを提供します。Apache Kafka を使用するときの一般的なアーキテクチャパターンは、あるクラスターから別のクラスターにデータを複製することです。
クロスクラスターレプリケーションは、事業継続とディザスタリカバリ計画を実施し、AWS リージョン全体でアプリケーションの回復力を高めるためによく使用されます。マルチリージョンアプリケーションを構築する際のもう一つのユースケースは、より低遅延なアクセスのために、複数の地域にあるストリーミングデータのコピーをエンドコンシューマーにより近い場所に保存させることです。また、分析のために、複数のクラスターのデータを 1 つの一元化されたクラスターに集約する必要がある場合もあります。
これらのニーズに対応するには、カスタムコードを書くか、バージョン 2.4 から Apache Kafka の一部として利用できる MirrorMaker 2.0 のようなオープンソースのツールをインストールして管理する必要があります。しかし、これらのツールは、信頼性の高いレプリケーションのためのセットアップが複雑で時間がかかる場合があり、継続的な監視とスケーリングが必要です。
10月18日、MSK レプリケータをご紹介します。Amazon MSK のこの新しい機能は、MSK クラスター間のクロスリージョンおよび同一リージョンのレプリケーションを確実にセットアップすることを容易にし、ワークロードを処理するために自動的にスケーリングします。MSK レプリケータは、階層型ストレージを使用するものを含め、プロビジョニングされた MSK クラスタータイプとサーバーレス MSK クラスタータイプの両方で使用できます。
MSK レプリケータを使用すると、アクティブパッシブとアクティブアクティブの両方のクラスタートポロジをセットアップして、リージョン間の Kafka アプリケーションの回復力を高めることができます。
- アクティブ・アクティブ設定では、両方の MSK クラスターがアクティブに読み取りと書き込みを処理しています。
- アクティブ・パッシブ設定では、一度に 1 つの MSK クラスターだけがストリーミングデータをアクティブに処理し、もう一方のクラスターはスタンバイ状態です。
ここで、実際にどのように機能するか見てみましょう。
AWS リージョン間での MSK レプリケータの作成
2 つの MSK クラスターを異なるリージョンにデプロイしています。MSK レプリケータでは、クラスターで IAM 認証が有効になっている必要があります。他のクライアントでは、mTLS や SASL などの他の認証方法を引き続き使用できます。ソースクラスターでは、マルチ VPC プライベート接続も有効にする必要があります。
ネットワークの観点から、クラスターのセキュリティグループは、クラスターとレプリケータが使用するセキュリティグループ間のトラフィックを許可します。例えば、同じセキュリティグループからのトラフィックと同じセキュリティグループへのトラフィックを許可する自己参照のインバウンドルールとアウトバウンドルールを追加できます。簡単にするために、両方のクラスターでデフォルトの VPC とそのデフォルトのセキュリティグループを使用します。
レプリケータを作成する前に、ソースクラスターのクラスターポリシーを更新して、MSK サービス (レプリケータを含む) がクラスターを見つけて到達できるようにします。Amazon MSK コンソールで、ソースリージョンを選択します。ナビゲーションペインから [クラスター] を選択し、次にソースクラスターを選択します。まず、一番上にあるソースクラスター ARN をコピーします。次に、[プロパティ] タブで、[セキュリティ設定] の [クラスターポリシーの編集] を選択します。そこで、次の JSON ポリシー (ソースクラスター ARN を置き換える) を使用して変更を保存します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "kafka.amazonaws.com"
},
"Action": [
"kafka:CreateVpcConnection",
"kafka:GetBootstrapBrokers",
"kafka:DescribeClusterV2"
],
"Resource": "<SOURCE_CLUSTER_ARN>"
}
]
}
コンソールでターゲットリージョンを選択します。ナビゲーションペインから「レプリケータ」を選択し、「リプリケータの作成」を選択します。ここに、レプリケータの名前と説明を入力します。
ソースクラスターセクションで、ソース MSK クラスターのリージョンを選択します。次に、[ブラウズ] を選択して、リストからソース MSK クラスターを選択します。レプリケータは、クラスターポリシーが設定されているクラスターに対してのみ作成できることに注意してください。
デフォルトの VPC とそのデフォルトのセキュリティグループを使用するために、サブネットとセキュリティグループをデフォルト値のままにしています。このネットワーク設定を使用して、クラスターとの通信を円滑にするエラスティックネットワークインターフェイス (EIN) を配置できます。
ソースクラスターのアクセス制御方法はIAM ロールベース認証に設定されています。オプションで、複数の認証方式を同時にオンにして、リプリケータが IAM を使用している間も、mTLS や SASL などの他の認証方式を必要とするクライアントを引き続き使用できます。クロスリージョンレプリケーションでは、ソースクラスターへのアクセスに複数の VPC を使用するため、ソースクラスターは認証なしアクセスを有効にすることはできません。
ターゲットクラスターセクションでは、クラスターリージョンがコンソールを使用しているリージョンに設定されています。[ブラウズ] を選択して、リストからターゲット MSK クラスターを選択します。
ソースクラスターで行ったことと同様に、サブネットとセキュリティグループはデフォルト値のままにしておきます。このネットワーク設定を使用して、ターゲットクラスターとの通信に必要な ENI を配置します。ターゲットクラスターのアクセス制御方法も IAM ロールベース認証に設定されています。
レプリケータ設定セクションでは、デフォルトのトピックレプリケーション構成を使用して、すべてのトピックがレプリケートされるようにします。オプションで、複製するトピックまたは複製から除外するトピックの名前を示す正規表現のカンマ区切りリストを指定できます。追加設定では、トピック設定、アクセスコントロールリスト (ACL) のコピー、および新しいトピックの検出とコピーを選択できます。
コンシューマー・グループ・レプリケーションでは、コンシューマーグループのオフセットをレプリケートするかどうかを指定できます。これにより、スイッチオーバー後、コンシューマーアプリケーションは、プライマリクラスター内で処理を中断した場所の近くで処理を再開することができます。複製する、または複製から除外するコンシューマーグループの名前を示す正規表現のカンマ区切りリストを指定できます。また、新しいコンシューマーグループを検出してコピーすることもできます。すべてのコンシューマーグループを複製するデフォルト設定を使用しています。
[圧縮] では、複製されるデータに使用できる圧縮タイプのリストから [なし] を選択します。
Amazon MSK コンソールは、レプリケータが機能するために必要な権限を持つサービス実行ロールを自動的に作成できます。この役割は、MSK サービスがソースおよびターゲットクラスターに接続し、ソースクラスターから読み取り、ターゲットクラスターに書き込むために使用されます。ただし、自分でロールを作成して提供することもできます。[アクセス権] では、「IAM ロールを作成または更新」を選択します。
最後に、レプリケータにタグを追加します。タグを使用して、リソースを検索してフィルタリングしたり、コストを追跡したりできます。[レプリケータタグ] セクションでは、キーとして [環境
]、値として [AWS ニュースブログ
] と入力します。[作成] を選択します。
数分後には、レプリケータが実行されています。使ってみましょう!
AWS リージョン間での MSK レプリケータのテスト
ソースクラスターとターゲットクラスターに接続するために、2 つのリージョンに既に 2 つの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスをセットアップしました。MSK ドキュメントの指示に従って Apache Kafka クライアントツールをインストールしました。IAM 認証を使用しているため、2 つのインスタンスには、クラスターの接続、送受信を可能にする IAM ロールがアタッチされています。ネットワークを簡素化するために、EC2 インスタンスと MSK クラスターにはデフォルトのセキュリティグループを使用しました。
まず、ソースクラスターに新しいトピックを作成し、いくつかのメッセージを送信します。Amazon EC2 Instance Connect を使用して、ソースリージョンの EC2 インスタンスにログインします。ディレクトリを Kafka クライアント実行ファイルがインストールされているパスに変更します (パスは使用するバージョンによって異なります)。
ソースクラスターに接続するには、そのブートストラップサーバーを知る必要があります。ソースリージョンの MSK コンソールを使用して、ナビゲーションページから [クラスター] を選択し、リストからソースクラスターを選択します。[クラスターの概要] セクションで、[クライアント情報の表示] を選択します。そこで、ブートストラップサーバーのリストをコピーします。EC2 インスタンスはクラスターと同じ VPC にあるため、プライベートエンドポイント (シングル VPC) 列のリストをコピーします。
EC2 インスタンスに戻り、ブートストラップサーバーのリストを SOURCE_BOOTSTRAP_SERVERS
環境変数に入れました。
次に、ソースクラスターにトピックを作成します。
新しいトピックを使用して、ソースクラスターにいくつかのメッセージを送信します。
ターゲットクラスターで何が起こるか見てみましょう。ターゲットリージョンの EC2 インスタンスに接続します。他のインスタンスで行ったのと同様に、ターゲットクラスターのブートストラップサーバーのリストを取得し、TARGET_BOOTSTRAP_SERVERS
環境変数に入力します。
ターゲットクラスターでは、ソースクラスターエイリアスがレプリケートされたトピック名のプレフィックスとして追加されます。ソースクラスターエイリアスを見つけるには、MSK コンソールのナビゲーションペインで [レプリケータ] を選択します。そこで、先ほど作成したレプリケータを選択します。[プロパティ] タブの [ソースクラスター] セクションでクラスターエイリアスを検索します。
ターゲットクラスター内のトピックのリスト (出力リストの最後のもの) を見て、複製されたトピックの名前を確認します。
ターゲットクラスターで複製されたトピックの名前がわかったので、最初は送信元クラスターに送信されたメッセージを受信するためにコンシューマーを起動します。
プレフィックスを自動的に処理し、ソースクラスターとターゲットクラスターで同じ構成を持つために、トピックサブスクリプションでワイルドカード (例えば、.*my-topic
) を使用できることに注意してください。
予想どおり、ソースクラスターに送信したすべてのメッセージは、ターゲットクラスターに接続しているコンシューマーによって複製および受信されました。
[監視] タブを使用して、MSK レプリケータのレイテンシー、スループット、エラー、およびラグのメトリックを監視できます。これは Amazon CloudWatch を通じて機能するため、独自のアラームを簡単に作成し、これらのメトリックスをダッシュボードに含めることができます。
構成をアクティブアクティブなセットアップに更新するために、同様の手順でもう一方のリージョンにレプリケータを作成し、もう一方の方向のクラスター間でストリーミングデータをレプリケートします。フェイルオーバーとフェイルバックの管理方法の詳細については、MSK レプリケータのドキュメントを参照してください。
利用可能なリージョンと料金
MSK レプリケータは現在、米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、欧州 (フランクフルト)、欧州 (アイルランド) の各 AWS リージョンでご利用いただけます。
MSK レプリケータでは、複製されたデータの GB 単位と、各レプリケータの時間単位の料金を支払います。また、ソースとターゲットの MSK クラスターに対する Amazon MSK の通常料金と、リージョンをまたぐデータ転送に対する標準的な AWS 料金を支払います。詳しくは、MSK の料金表をご覧ください。
MSK レプリケータを使用すれば、クロスリージョンや同一リージョンのレプリケーションを迅速に実装して、アーキテクチャの耐障害性を向上させ、パートナーやエンドユーザーの近くにデータを保存できます。また、この新機能を使用して、分析を実行しやすい単一の集中型クラスターにストリーミングデータを複製することで、より優れた洞察を得ることもできます。
Amazon MSK レプリケータを使用してデータストリームアーキテクチャを簡素化します。
— Danilo
原文はこちらです。