マルチテナント Apache Kafka on Heroku
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2022年11月29日(火)
Table of Contents
Apache Kafka on Heroku は、サービスとしての Kafka を Heroku プラットフォームに完全に統合するためのアドオンです。この記事では、Heroku のマルチテナント Kafka Basic プランについて説明します。このプランでは、専用クラスタープランに比べてアクセスしやすいエントリポイントが提供されます。
Kafka Dev Center の主要記事では、Kafka 開発環境のセットアップなど、Kafka のコア概念について説明しています。
Basic プランでは、Heroku アプリは他の Heroku アプリと Kafka クラスターを共有し、各アプリはクラスター全体に分散したトピックの独自セットに安全かつ排他的にアクセスできます。
Basic プランは以下のユースケース向けに最適化されています。
- 実験とプロトタイプ作成。Kafka を学習してその動作を実験し、アプリケーションのアーキテクチャに適しているかどうかを評価するためのオプションは、多くの開発者に必要とされています。
- 開発とテスト。Basic インスタンスは迅速にプロビジョニングされるため、開発およびテスト環境に適しています。
- 低容量の本番用途。Basic プランは、専用クラスターを必要としない小規模な本番環境ユースケースに十分な容量を提供できます。
Apache Kafka on Heroku を初めて使用する場合は、開発環境の準備に関するこちらのセクションを参照してください。
Basic プラン
Heroku は、次の Basic プランを提供しています。
プラン名 | クラスター生成クォータ (kb/秒) | クラスター消費クォータ (kb/秒) | 容量 (GB) | 使用可能な最大パーティション数 |
---|---|---|---|---|
basic-0 | 64 | 256 | 4 | 240 |
basic-1 | 512 | 2048 | 32 | 480 |
basic-2 | 4096 | 16384 | 64 | 960 |
これらのプラン間の主な違いは次のとおりです。
- 生成および消費クォータ (スループット率)
- 容量 (一度に保持できるデータの総量)
- トピックあたりの最大許容パーティション数
用途のニーズに適さないパラメータがある場合は、具体的なニーズについてお知らせください。専用クラスター Kafka プランも検討してください。
Basic プランの共通デフォルト設定
- トピックあたりの最大パーティション数: 256
- アドオンあたりの最大トピック数: 40
- 最小 (およびデフォルト) 保持期間: 1 日
- 最大メッセージサイズ: 1MB
- 最大保持期間: 7日
- デフォルトのパーティション数: 8
Basic プランは、Common Runtime (US および EU) と、それらの Common Runtime の場所と重複する Private Space リージョン (バージニアおよびダブリン) でご利用になれます。Private Space からプロビジョニングした場合でも Basic プランはマルチテナントであり、プラン自体が Private Space に含まれるわけではありません。
スループットクォータ
プロビジョニングされた Basic アドオンには、生成クォータと消費クォータ (スループット速度制限) のセットがプランレベルに基づいて付与されます。
アドオンの容量を超過すると、容量をプランの制限に収めるために、生成および消費クォータが削減されてスループットがスロットルされます。アドオンが容量制限の範囲内に収まったら、クォータはプランの基準値に戻ります。
クォータはクラスター全体に適用されます。このため、各 Kafka ブローカーに、アドオンの合計クォータの 8 分の 1 が割り当てられます。したがって、アドオンに割り当てられたクォータが飽和するには、少なくとも 8 つのパーティションがトピックに存在し、すべてのパーティションでスループットがほぼ均等であることが必要になります。
知識のあるユーザーは、ProduceResponse
で得られるスロットリングメタデータを精査すると、タイムアウトの回避に役立つ場合があります。
トピックの設定に関する制限
Basic プランを使用する場合、すべてのトピックで時間ベースの保持が有効になります。これは、圧縮が有効になっているトピックにも当てはまります (両方の保持ルールが適用されます)。
専用 Kafka プランとの違い
接続: Kafka 接頭辞
マルチテナントの Kafka クラスターに接続するプロセスは、専用クラスターに接続するプロセスとほとんど同じですが、1 つの例外があります。すべての Kafka Basic トピックおよびコンシューマーグループは、アドオンに関連付けられた一意の接頭辞で始まります。
この接頭辞には KAFKA_PREFIX
環境設定からアクセスできます。
Kafka クライアントを設定するときは、接頭辞をハードコーディングせず、コードから動的に取得してください。こうしておくと、別のアドオンがある別の環境にコードをデプロイするときにも、コードを変更する必要はありません。KAFKA_PREFIX
環境設定の値は固定ではなく、それを前提にした扱いが必要です。
接頭辞がない場合、コンシューマーはメッセージを受信せず、Broker: Topic authorization failed (ブローカー: トピックの認証に失敗しました) や Broker: Group authorization failed (ブローカー: グループの認証に失敗しました) のようなエラーが Kafka デバッグイベントに記録されます。
コンシューマーグループ
Kafka には、個別のコンシューマーとコンシューマーグループの両方のためのプリミティブが含まれています。コンシューマーグループでは Kafka の使用は必須ではありませんが、Basic プランでコンシューマーグループを使用するには追加の手順が必要であることは注目に値します。コンシューマーグループは使用前に作成する必要があり、次のトピックと同じように (KAFKA_PREFIX
を使用して) 接頭辞が付けられます。
$ heroku kafka:consumer-groups:create my-consumer-group
アプリケーションのコードでは、接頭辞を付けてコンシューマーグループ名を使用する必要があります。接頭辞を付けずにコンシューマーグループを参照しても、機能しません。
どのコンシューマーグループがアクティブであるかは、次のコマンドで調べることができます。
$ heroku kafka:consumer-groups
不要になったコンシューマーグループは、次のようにして削除できます。
$ heroku kafka:consumer-groups:destroy my-consumer-group
使用できない機能
次のコマンドは Basic プランでは使用できません。
heroku kafka:fail
heroku kafka:upgrade
Basic とダッシュボード
Basic プランでは、data.heroku.com からアクセスできるダッシュボードで分析情報を入手できます。アドオンのメトリクスを表示したり、トピックを作成および削除したりできます。
メンテナンス
Heroku では、基盤のソフトウェアを更新するために、マルチテナント Kafka クラスターの定期メンテナンスを実行します。このメンテナンス期間はアプリケーションに対して透過的で、個別のブローカーとの通信時に数秒のレイテンシー増加やエラーを伴います。ただし、一部のアプリケーションでは、この種のメンテナンス時にその他の問題が発生する場合があります。堅牢なアプリケーションの構築についての詳細は、こちらの記事を参照してください。
マルチテナント
個々の Basic アドオンは、他の多くのテナントと Kafka クラスターを共有します。テナントごとに独自の CA 証明書とクライアント証明書が提供され、転送中のデータ暗号化に使用されます。また、名前空間 (アドオンに関連付けられた KAFKA_PREFIX
) で指定された一連のトピックにアクセスを限定してセキュリティで保護するために、一連の ACL もテナントごとに提供されます。保存時のデータはボリュームレベルで暗号化されます。