Amazon Managed Streaming for Apache Kafka（MSK） 概要

# 背景・目的
- Amazon Managed Streaming for Apache Kafka(以降、MSKという。)をさわる機会があったので整理する。

# 内容
## 特徴
- フルマネージドの Apache Kafka。以下の機能を有する。
    - サーバーのプロビジョニング
    - Apache Kafka クラスターの設定
    - 障害時のサーバーの交換
    - サーバーのパッチとアップグレードのオーケストレート
    - 高可用性のためのクラスターの構築
    - データの永続的な保存とセキュリティの確保
    - モニタリングとアラームの設定
    - 負荷変動をサポートするためのスケーリングの実行

- オープンソースで安全性の高い Apache Kafka クラスターを複数のアベイラビリティーゾーン (AZ) に分散して提供し、耐障害性と可用性の高いストリーミングストレージを実現する。
- 他のAWSのサービスとの緊密な統合により、アプリケーション開発がよりシンプルになる。
- セキュリティのためのIAMおよび、AWS Certificate Manager、スキーマガバナンスのための AWS Glue スキーマレジストリ、ストリーム処理のための Amazon Kinesis Data Analytics（KDA） および AWS Lambda などと統合可能。
- データの取り込みや処理サービス、マイクロサービスアプリケーションアーキテクチャの中心となる、最新のメッセージングおよびイベントドリブンアプリケーションの統合バックボーンを提供する。

## サーバー管理が不要
### フルマネージド
- コンソールで数回クリックするだけで、Apache Kafka のデプロイのベストプラクティスに従うフルマネージド型の Apache Kafka クラスターを作成したり、カスタム設定を使用して独自のクラスターを作成可能。
- MSK により Apache Kafka クラスターオペレーションと Apache ZooKeeper ノードが自動的にプロビジョニング、設定、管理される。

### Apache ZooKeeper が付属
- Apache Kafka の実行、クラスタータスクの調整、クラスターを操作するリソースの状態の維持には、Apache ZooKeeper が必要。
- MSK は、Apache ZooKeeper ノードを自動的に管理する。
- MSK クラスターには、Apache Kafka クラスター用の Apache ZooKeeper ノードが適切な数含まれる。

### Amazon MSK Serverless (プレビュー)
- MSK Serverless は Amazon MSK のクラスタータイプ。
- Apache Kafka クラスターを簡単に実行可能。コンピューティング容量とストレージ容量を管理する必要はない。
- MSK Serverless は、Apache Kafka パーティションを管理しながらリソースを自動的にプロビジョニングおよびスケーリングするため、クラスターの適切なサイズ設定やスケーリングについて心配することなくデータをストリーミングできる。

## 高い可用性
### 高可用性
- すべてのクラスターは複数のアベイラビリティーゾーンに分散され (デフォルトでは 3 つ)、Amazon MSK のサービスレベルアグリーメント (プレビュー中の MSK Serverless には未適用) によってサポートされ、クラスターのインフラストラクチャと Apache Kafka ソフトウェアの問題を検出して対応する自動システムによってサポートされている。
- コンポーネントが故障しても、Amazon MSK が自動的に交換するため、アプリケーションのダウンタイムが発生しない。
- Apache ZooKeeper ノードの可用性は Amazon MSK によって管理されるため、ノードをお客様ご自身で起動、停止、直接アクセスする必要はない。
- クラスターを最新の状態に保ってスムーズに実行するため、必要に応じてソフトウェアパッチもデプロイする。

### データレプリケーション
- 可用性を高めるためにマルチ AZ レプリケーションを使用。データのレプリケーションに追加料金はかからない。

## 高い安全性
### プライベート接続
- Apache Kafka クラスターは、MSK によって管理されるVPCで実行される。
- クラスターは、指定した設定に基づいてVPC、サブネット、セキュリティグループで利用可能。ネットワークの設定や IP アドレスを完全にコントロール可能。

### きめ細かいアクセスコントロール
- IAM ロールやユーザーポリシーを使用してアクセスを制御することで、クラスター認証と Apache Kafka API 承認を簡素化する。
- IAM アクセスコントロールを使用し、Apache Kafka のクライアント認証と認可を制御するために 1 回限りのアクセス管理システムを構築して実行する必要がなくなる。
- クラスターはデフォルトで最小権限の許可を使用して保護される。
- プロビジョンドクラスターの場合、Simple Authentication and Security Layer (SASL)/Salted Challenge Response Authentication Mechanism (SCRAM) または Apache Kafka アクセスコントロールリスト (ACL) を使用した相互 Transport Layer Security (TLS) 認証を使用して、クライアントのアクセスを制御することもできる。


### 保管中と転送中の暗号化
- MSKでは、特殊な設定やサードパーティー製ツールがなくても保管時にデータが暗号化される。
- プロビジョンドクラスターの場合、保存中のデータはすべてデフォルトで AWS Key Management Service (KMS) キーを使用して、自分のキーを使用して暗号化可能。
- ブローカー間およびクラスター上のクライアントとブローカー間の転送データを TLS を介して暗号化可能。
- サーバーレスクラスターの場合、保管中のデータはすべてデフォルトでサービスマネージドキーを使用して暗号化され、転送中のデータはすべてデフォルトで TLS を介して暗号化される。

## 統合
- 以下を統合可能。
    - Apache Kafka とサービスレベルの API アクセスコントロールのためのIAM
    - KDAは、フルマネージド型の Appache Flink アプリケーションを実行し、Apache Kafka 内のストリーミングデータを処理。KDA Studio では、Apache FlinkSQL を使用して、インタラクティブな Streaming SQL や長時間実行する SQL ジョブを実行可能。
    - スキーマを一元的に管理および進化させる AWS Glue スキーマレジストリ
    - AWS IoT Core による IoT イベントストリームの MSK への配信
    - 変更データのキャプチャと分析向けの AWS Database Migration Service (AWS DMS)と統合
    - VPC
    - AWS Key Management Service (AWS KMS)
    - 相互 TLS クライアント認証向けの AWS Certificate Manager Private Certificate Authority
    - AWS Secrets Manager による SASL/SCRAM の秘密の安全な保存と管理
    - MSK をコードで展開する AWS CloudFormation
    - クラスター、ブローカー、トピック、コンシューマー、パーテーションレベルのメトリクス向けの Amazon CloudWatch

## OSS
### ネイティブの Apache Kafka で動作
- MSK は、ネイティブバージョンの Apache Kafka をデプロイしているため、Apache Kafka 向けに構築されたアプリケーションやツールは、アプリケーションコードを変更することなく、すぐに Amazon MSK で動作可能。

### 合理化されたバージョンの提供
- MSK は通常、Apache Kafka の新バージョンを公開後、7 日以内に提供する。

### シームレスなバージョンアップグレード
- プロビジョンドクラスターの Apache Kafka バージョンを数回クリックするだけでアップグレード可能。
- クライアントの I/O の可用性を維持するために、稼働中のクラスターへのバージョンアップグレードの展開を自動化する。
- サーバーレスクラスターの場合、Apache Kafka のバージョンはMSK によって自動的にアップグレードされる。

## 最低コスト
- MSKは、1 日あたり 2.50 USD 以下で開始可能。

## スケーラブル
### ブローカーのスケーリング (プロビジョンドクラスターのみ)
- Apache Kafka ブローカーのサイズまたはファミリーを変更して、ダウンタイムなしで数分以内に Amazon MSK クラスターをスケーリング可能。サイズまたはファミリーを変更することは、ワークロードの変化に合わせてクラスターのコンピューティング性能を柔軟に調整できるため、MSK クラスターを拡張する一般的な方法。この方法は、Apache Kafka の可用性に影響を与える可能性のあるパーテーションの再割り当てを必要としないため、好ましい方法となる。

### クラスタースケーリング (サーバーレスクラスターのみ)
- MSK は、アプリケーションのスループットニーズに応じて、クラスターのコンピューティングリソースとストレージリソースを自動的にスケーリングする。

### オートマチックパーテーションマネジメント
- MSK は、Apache Kafka 用の人気オープンソースツールである Cruise Control と統合している。パーテーションの割り当てを自動的に管理する。
- サーバーレスクラスターの場合、Amazon MSK がパーティションの割り当てを自動的に管理する。

### 自動ストレージスケーリング (プロビジョンドクラスターのみ)
- AWS マネジメントコンソールまたは AWS CLIを使用して、ストレージ要件の変化に合わせてブローカーごとにプロビジョニングされるストレージの量をシームレスにスケールアップ可能。
- オートスケーリングポリシーを作成することで、増大するストリーミング要件に合わせて自動的にストレージを拡張することができる。

## 設定可能
- MSK は、デフォルトで Apache Kafka のベストプラクティスクラスター設定をデプロイする。
- プロビジョンドクラスターの場合、あらゆる動的設定およびトピックレベルの設定をサポートしながら、30 種を超える異なるクラスター設定を調整可能。

## 可視性
### CloudWatch メトリクスをデフォルトで搭載し、ストリーミングパフォーマンスを容易に観測可能
- CloudWatch を使用して、重要なメトリクスを視覚化してモニタリングし、ストリーミングアプリケーションのパフォーマンスを理解して維持することが可能。

### Open Monitoring で JMX、Node メトリクスを Prometheus サーバーにエクスポートする (プロビジョンドクラスターのみ)
- Open Monitoring with Prometheus では、Datadog、Lenses、New Relic、Sumo Logic、または Prometheus サーバーなどのソリューションを使用して Amazon MSK をモニタリングし、既存のモニタリングダッシュボードを簡単に Amazon MSK に移行することが可能。

# 参考
- https://aws.amazon.com/jp/msk/