DEA / ドメイン1 データの取り込みと変換
Amazon MSK
(Managed Streaming for ) は、オープンソースの Apache Kafka をマネージドで動かすサービスです。Kafka の とそのまま互換なので、既存の Kafka のプロデューサー、コンシューマー、Kafka Connect のコネクタを書き換えずに AWS へ移せます。DEA では、ストリーミングソースからの読み取りと、 との選び分けが出題の中心です。
Point
- MSK = Managed Streaming for Apache Kafka の略です。
- Kafka の用語: トピック (データの種類ごとの流れ)、パーティション (トピックを分割した並列と順序の単位)、ブローカー (データを保持するサーバー)、オフセット (パーティション内の位置)。
- 和訳
- Broker: 仲介者
- Weblio英和辞書「broker」
概要
プロデューサーはトピックへ書き込み、メッセージはキーに応じてパーティションに振り分けられます。パーティション内では順序が保たれます。コンシューマーはコンシューマーグループ単位で読み、グループごとに独立したオフセット (どこまで読んだか) を持つため、同じトピックを複数の処理系が別々に読めます。
| の用語 | () の用語 |
|---|---|
| ストリーム | トピック |
| パーティション | |
| メッセージのキー | |
| シーケンス番号 | オフセット |
| のアプリケーション | コンシューマーグループ |
主要技術
①クラスターの種類: プロビジョンドとサーバーレス ⚠️ 頻出
| 種類 | 特徴 | 向くケース |
|---|---|---|
| プロビジョンド | ブローカーの台数とを選ぶ。 の設定を細かく調整できる | 流量が大きく安定、Kafka の設定を細かく管理したい |
| MSK Serverless | 容量の見積もりと拡張をサービスが行い、に応じて課金 | 流量が変わる、容量管理をしたくない |
プロビジョンドのブローカーには、ストレージを自分で用意する Standard ブローカーと、ストレージをサービスが管理し拡張を速くした Express ブローカーがあります。Standard ブローカーでは、古いデータを安価な層へ移す階層型ストレージ (tiered storage) を使って長期の保持を安くできます。
MSK Serverless は、認証と認可に アクセス制御が必須で、Kafka の は使えません。
②可用性と保持
| 項目 | 内容 |
|---|---|
| ブローカーの配置 | 複数の に分散して配置する |
| パーティションを複数のブローカーへ複製する (レプリケーション係数)。本番では3つの AZ と係数3が一般的 | |
| 保持期間 | トピックごとの設定 (時間やサイズ) で決める。保持期間内ならオフセットを戻して読み直せる |
コンシューマーグループのオフセットを過去に戻すと、保持期間内のデータを再処理できます (パイプラインの再現性)。
③MSK Connect
Connect は、 Connect をマネージドで動かす機能です。コネクタのワーカーの台数管理をサービスに任せられます。
| コネクタの種類 | 例 |
|---|---|
| ソースコネクタ | Debezium で / の変更 () をトピックへ流す |
| シンクコネクタ | トピックのデータを 、 などへ書き出す |
既存の Kafka Connect のコネクタ (JAR) をプラグインとして登録して使えます。
④読み取り側の AWS サービス連携
| 連携先 | 使い方 |
|---|---|
| イベントソースマッピングでトピックを読み、バッチで関数を呼ぶ | |
| をソースにして などへ配信する | |
| トピックをソースにした処理 | |
| ストリーミング取り込みでトピックをへ取り込む | |
| ストリーミング ジョブで読み、変換して書き込む | |
| などのスキーマを登録し、互換性を検証する |
⑤認証とネットワーク
| 方式 | 内容 |
|---|---|
| アクセス制御 | IAM ポリシーでトピック単位の操作を許可。Serverless では必須 |
| SASL/SCRAM | ユーザー名とパスワード。認証情報は に保管 |
| 相互 (mTLS) | クライアント証明書で認証。AWS Private CA を使う |
| 暗号化 | 保管時は 、転送中は TLS |
クラスターは 内に作ります。他の VPC や他アカウントのクライアントからは、マルチ VPC プライベート接続 () で接続できます。
⑥Kinesis Data Streams との選び分け ⚠️ 頻出
| 観点 | ||
|---|---|---|
| AWS 独自 (、KPL、) | 互換 | |
| 既存資産 | 新規に AWS ネイティブで作る | 既存の Kafka アプリ・コネクタを移行 |
| 容量の単位 | (または自動の) | ブローカーとパーティション (または Serverless) |
| 保持期間 | 既定 24 時間、最大 365 日 | トピックの設定で決める。階層型ストレージで長期保持 |
| 設定の自由度 | 少ない (その分運用が楽) | Kafka の設定を細かく調整できる |
| 1件のサイズ | 最大 10 MiB | Kafka の設定 (既定 1 MB) で調整できる |
| エコシステム | AWS サービスとの連携が簡単 | Kafka Connect、Kafka Streams などオープンソースの道具 |
⚠️ 頻出: 「の Kafka を、アプリケーションの変更を最小にして AWS へ移したい」は MSK です。「AWS ネイティブで、運用を最小にストリームを作りたい」は Kinesis Data Streams (オンデマンド) です。
試験対策
①判断マトリクス
| 問題文のキーワード | 選ぶ機能・サービス |
|---|---|
| 既存の アプリ・コネクタをそのまま使う | |
| Kafka を容量管理なしで使いたい | MSK Serverless |
| Kafka の設定を細かく調整したい | MSK プロビジョンド |
| Kafka のデータを長期間安く保持 | 階層型ストレージ |
| DB の変更を Kafka のトピックへ (Debezium) | MSK Connect のソースコネクタ |
| トピックのデータを へ、コード不要 | (MSK ソース) または MSK Connect のシンクコネクタ |
| トピックを で低遅延に分析 | Redshift のストリーミング取り込み |
| スキーマの互換性を管理 | |
| AWS ネイティブ、運用最小 |
②よくある誤答
- 互換の要件に を選ぶこと。 が違うため、アプリケーションの書き換えが必要です。
- Serverless で Kafka の や SASL/SCRAM を使おうとすること。 アクセス制御が必須です。
- 別のコンシューマーグループを作ると既存のグループの位置が変わると考えること。グループごとにオフセットは独立です。