AWS FSx ONTAPでのパフォーマンスの概要と検証
NetApp NFS上にストレージレイヤがマウントされたKafkaクラスタは、AWS FSx ONTAPでパフォーマンスのベンチマークを実施しました。ベンチマークの例については、次のセクションで説明します。
AWS FSx ONTAPのApache Kafka
Network File System(NFS;ネットワークファイルシステム)は、大量のデータを格納するために広く使用されているネットワークファイルシステムです。ほとんどの組織では、データがApache Kafkaなどのストリーミングアプリケーションによって生成されるようになっています。このようなワークロードには、拡張性、低レイテンシ、最新のストレージ機能を備えた堅牢なデータ取り込みアーキテクチャが必要です。リアルタイム分析を実現し、実用的な分析情報を提供するには、適切に設計されたパフォーマンスの高いインフラが必要です。
Kafkaは、設計上POSIX準拠のファイルシステムと連携し、ファイル操作をファイルシステムに依存して処理しますが、NFSv3ファイルシステムにデータを格納する場合、KafkaブローカーのNFSクライアントは、ファイル操作をXFSやext4などのローカルファイルシステムとは異なる方法で解釈できます。一般的な例としては、NFSのsilly renameがあり、クラスタの拡張時やパーティションの再割り当て時にKafkaブローカーでエラーが発生していました。この課題に対処するため、NetAppはオープンソースのLinux NFSクライアントを更新し、RHEL8.7およびRHEL9.1で一般提供されるようになりました。また、最新のFSx ONTAPリリースであるONTAP 9 12.1からサポートされるようになりました。
Amazon FSx ONTAPは、拡張性とパフォーマンスに優れたフルマネージドのNFSファイルシステムをクラウドで提供します。FSx ONTAP上のKafkaデータは、大量のデータを処理し、フォールトトレランスを確保するために拡張できます。NFSは、重要で機密性の高いデータセットに対して一元的なストレージ管理とデータ保護を提供します。
これらの機能強化により、AWSのお客様はAWSコンピューティングサービスでKafkaワークロードを実行する際にFSx ONTAPを活用できるようになります。これらの利点は次のとおりです。* CPU使用率の削減によるI/O待機時間の短縮* Kafkaブローカーのリカバリ時間の短縮。*信頼性と効率性。*拡張性とパフォーマンス。*マルチアベイラビリティゾーンの可用性。*データ保護:
AWS FSx ONTAPでのパフォーマンスの概要と検証
ストレージレイヤをNetApp NFS上にマウントしたKafkaクラスタは、AWSクラウドでのパフォーマンスについてベンチマークテストを実施しました。ベンチマークの例については、次のセクションで説明します。
AWS FSx ONTAPのKafka
AWS FSx ONTAPを使用したKafkaクラスタは、AWSクラウドでのパフォーマンスについてベンチマークを実施しました。このベンチマークについては、以降のセクションで説明します。
アーキテクチャのセットアップ
次の表に、AWS FSx ONTAPを使用するKafkaクラスタの環境構成を示します。
プラットフォームコンポーネント | 環境の構成 |
---|---|
Kafka 3.2.3. |
|
すべてのノード上のオペレーティングシステム |
RHEL8.6 |
AWS FSX ONTAP の略 |
マルチアストラゼネカ、4GB/秒のスループット、160000 IOPS |
NetApp FSx ONTAPのセットアップ
-
最初のテストでは、2TBの容量と40000 IOPSで2GB/秒のスループットを実現するFSx ONTAPファイルシステムを作成しました。
[root@ip-172-31-33-69 ~]# aws fsx create-file-system --region us-east-2 --storage-capacity 2048 --subnet-ids <desired subnet 1> subnet-<desired subnet 2> --file-system-type ONTAP --ontap-configuration DeploymentType=MULTI_AZ_HA_1,ThroughputCapacity=2048,PreferredSubnetId=<desired primary subnet>,FsxAdminPassword=<new password>,DiskIopsConfiguration="{Mode=USER_PROVISIONED,Iops=40000"}
この例では、AWS CLIを使用してFSx ONTAPを導入しています。必要に応じて、環境内でコマンドをさらにカスタマイズする必要があります。FSx ONTAPはAWSコンソールからさらに導入、管理できるため、コマンドラインの入力が少なく、導入がより簡単かつ合理的になります。
ドキュメントFSx ONTAPでは、テストリージョン(US-East-1)の2GB/秒スループットファイルシステムで達成可能な最大IOPSは8万IOPSです。FSx ONTAPファイルシステムの合計最大IOPSは16万IOPSですが、これを達成するには4GB/秒のスループット導入が必要です。これについては、このドキュメントの後半で説明します。
FSx ONTAPのパフォーマンス仕様の詳細については、AWS FSx ONTAPのドキュメントを参照してください。 https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/performance.html
FSx「create-file-system」のコマンドライン構文の詳細については、以下を参照してください。 https://docs.aws.amazon.com/cli/latest/reference/fsx/create-file-system.html
たとえば、KMSキーが指定されていない場合に使用されるデフォルトのAWS FSxマスターキーとは異なり、特定のKMSキーを指定できます。
-
FSx ONTAPファイルシステムを作成するときは、ファイルシステムを次のように定義したら、JSONの「ライフサイクル」ステータスが「利用可能」に変わるまで待ちます。
[root@ip-172-31-33-69 ~]# aws fsx describe-file-systems --region us-east-1 --file-system-ids fs-02ff04bab5ce01c7c
-
fsxadminユーザを使用してFSx ONTAP SSHにログインし、クレデンシャルを検証します。fsxadminは、作成時にFSx ONTAPファイルシステムのデフォルトの管理アカウントです。fsxadminのパスワードは、手順1で完了したように、AWSコンソールまたはAWS CLIでファイルシステムを最初に作成したときに設定したパスワードです。
[root@ip-172-31-33-69 ~]# ssh fsxadmin@198.19.250.244 The authenticity of host '198.19.250.244 (198.19.250.244)' can't be established. ED25519 key fingerprint is SHA256:mgCyRXJfWRc2d/jOjFbMBsUcYOWjxoIky0ltHvVDL/Y. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '198.19.250.244' (ED25519) to the list of known hosts. (fsxadmin@198.19.250.244) Password: This is your first recorded login.
-
クレデンシャルの検証が完了したら、FSx ONTAPファイルシステムにSVMを作成
[root@ip-172-31-33-69 ~]# aws fsx --region us-east-1 create-storage-virtual-machine --name svmkafkatest --file-system-id fs-02ff04bab5ce01c7c
Storage Virtual Machine(SVM)は分離されたファイルサーバで、FSx ONTAPボリューム内のデータを管理およびアクセスするための独自の管理クレデンシャルとエンドポイントを備え、FSx ONTAPマルチテナンシーを提供します。
-
プライマリSVMの設定が完了したら、新しく作成したFSx ONTAPファイルシステムにSSH接続し、以下のサンプルコマンドを使用してSVMにボリュームを作成します。同様に、この検証用に6つのボリュームを作成します。Kafkaのパフォーマンスが向上するように、デフォルトのコンスティチュエント(8個)以下のコンスティチュエントを使用してください。
FsxId02ff04bab5ce01c7c::*> volume create -volume kafkafsxN1 -state online -policy default -unix-permissions ---rwxr-xr-x -junction-active true -type RW -snapshot-policy none -junction-path /kafkafsxN1 -aggr-list aggr1
-
テスト用にボリュームに追加の容量が必要になります。ボリュームのサイズを2TBに拡張し、ジャンクションパスにマウントします。
FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN1 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN1" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN2 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN2" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN3 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN3" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN4 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN4" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN5 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN5" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume size -volume kafkafsxN6 -new-size +2TB vol size: Volume "svmkafkatest:kafkafsxN6" size set to 2.10t. FsxId02ff04bab5ce01c7c::*> volume show -vserver svmkafkatest -volume * Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- svmkafkatest kafkafsxN1 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN2 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN3 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN4 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN5 - online RW 2.10TB 1.99TB 0% svmkafkatest kafkafsxN6 - online RW 2.10TB 1.99TB 0% svmkafkatest svmkafkatest_root aggr1 online RW 1GB 968.1MB 0% 7 entries were displayed. FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN1 -junction-path /kafkafsxN1 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN2 -junction-path /kafkafsxN2 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN3 -junction-path /kafkafsxN3 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN4 -junction-path /kafkafsxN4 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN5 -junction-path /kafkafsxN5 FsxId02ff04bab5ce01c7c::*> volume mount -volume kafkafsxN6 -junction-path /kafkafsxN6
FSx ONTAPでは、ボリュームをシンプロビジョニングできます。この例では、拡張されたボリュームの合計容量がファイルシステムの合計容量を超えているため、プロビジョニングされた追加のボリューム容量のロックを解除するには、ファイルシステムの合計容量を拡張する必要があります。これについては、次の手順で説明します。
-
次に、パフォーマンスと容量を強化するために、FSx ONTAPのスループット容量を2GB/秒から4GB/秒、IOPSを160000、容量を5TBに拡張しました。
[root@ip-172-31-33-69 ~]# aws fsx update-file-system --region us-east-1 --storage-capacity 5120 --ontap-configuration 'ThroughputCapacity=4096,DiskIopsConfiguration={Mode=USER_PROVISIONED,Iops=160000}' --file-system-id fs-02ff04bab5ce01c7c
FSx「update-file-system」の詳細なコマンドライン構文は、次のとおりです。
https://docs.aws.amazon.com/cli/latest/reference/fsx/update-file-system.html -
FSx ONTAPボリュームは、Kafkaブローカーでnconnectとデフォルトのオプションを使用してマウントされます。
次の図は、FSx ONTAPベースのKafkaクラスタの最終的なアーキテクチャを示しています。
-
コンピューティング:3ノードのKafkaクラスタを使用し、専用サーバで3ノードのZookeeperアンサンブルを実行しました。各ブローカーには、FSx ONTAPインスタンス上の6つのボリュームに対するNFSマウントポイントが6つありました。
-
監視:Prometheus-Grafanaの組み合わせには2つのノードを使用しました。ワークロードの生成には、独立した3ノードクラスタを使用し、このKafkaクラスタを生成して使用しました。
-
ストレージ:FSx ONTAPを使用し、2TBのボリュームを6個マウントしました。その後、NFSマウントを使用してボリュームをKafkaブローカーにエクスポートしました。FSx ONTAPボリュームは、16のnconnectセッションとKafkaブローカーのデフォルトオプションでマウントされます。
-
OpenMessageベンチマーク設定。
NetApp Cloud Volumes ONTAPと同じ構成を使用しました。詳細はこちらをご覧ください。
リンク:kafka-nfs-performance-overview-and-validation-in-aws.html#architecture-setup
テストの方法論
-
Kafkaクラスタは、前述の仕様に従ってterraformとAnsibleを使用してプロビジョニングされました。Terraformを使用して、Kafkaクラスタ用のAWSインスタンスを使用してインフラを構築し、Ansibleを使用してKafkaクラスタを構築します。
-
上記のワークロード構成とSyncドライバでOMBワークロードがトリガーされました。
sudo bin/benchmark –drivers driver-kafka/kafka-sync.yaml workloads/1-topic-100-partitions-1kb.yaml
-
同じワークロード構成でスループットドライバを使用して別のワークロードがトリガーされました。
sudo bin/benchmark –drivers driver-kafka/kafka-throughput.yaml workloads/1-topic-100-partitions-1kb.yaml
観察
NFSで実行されるKafkaインスタンスのパフォーマンスをベンチマークするために、2種類のドライバを使用してワークロードを生成しました。ドライバの違いは、log flushプロパティです。
Kafkaレプリケーションファクタ1とFSx ONTAPの場合:
-
Syncドライバで一貫して生成された総スループット:最大3218 Mbps、最大パフォーマンス(最大3652 Mbps)
-
スループットドライバによって一貫して生成された総スループット:最大3679 Mbps、最大3908 Mbpsのパフォーマンス。
レプリケーションファクタ3のKafkaとFSx ONTAPの場合:
-
Syncドライバで一貫して生成される合計スループット:最大1252 Mbps、最大1382 Mbps。
-
スループットドライバによって一貫して生成される総スループット:最大1218 Mbps、最大パフォーマンス(最大1328 Mbps)
Kafkaレプリケーションファクタ3では、FSx ONTAPで読み取りと書き込みの処理が3回行われました。Kafkaレプリケーションファクタ1では、読み取りと書き込みの処理がFSx ONTAPで1回行われたため、どちらの検証でも最大スループットである4GB/秒に到達できました。
Syncドライバはログが即座にディスクにフラッシュされるときに一貫したスループットを生成できますが、Throughputドライバはログがディスクに一括コミットされるときにスループットのバーストを生成します。
これらのスループット値は、指定されたAWS構成に対して生成されます。より高いパフォーマンス要件に対応するには、インスタンスタイプをスケールアップしてさらに調整し、スループットを向上させることができます。総スループットまたは総レートは、生産者と消費者の両方のレートの組み合わせです。
以下の表は、Kafkaレプリケーションファクタ3の2GB/秒FSx ONTAPと4GB/秒のパフォーマンスを示しています。レプリケーションファクタ3は、FSx ONTAPストレージで読み取りと書き込みの処理を3回行います。スループットドライバの合計レートは881 MB/秒で、2GB/秒のFSx ONTAPファイルシステムではKafkaの読み取りと書き込みを行います。スループットドライバの合計レートは1328 MB/秒で、Kafkaの読み取りと書き込みを行います。Kafkaのパフォーマンスは、FSx ONTAPのスループットに基づいてリニアで拡張性に優れています。
以下の表は、EC2インスタンスとFSx ONTAPのパフォーマンスを示しています(Kafkaレプリケーション係数:3)。