ApsaraMQ for Kafka インスタンスでメッセージ蓄積、データスキュー、または速度制限が発生した場合、コンシューマーの詳細を使用して根本原因を特定します。コンシューマーの詳細には、パーティションごとのオフセット、接続されているクライアント、および各 Topic-グループのペアの蓄積されたメッセージ数が表示されます。これらは、アプリケーションに影響を与える前に、停止または低速なコンシューマーを特定するために必要なデータポイントです。
事前準備
メッセージ蓄積のリスクを軽減するために、各コンシューマーグループの Topic サブスクリプションを 3 つ以下に制限します。
コンシューマーが
assignモード (手動パーティション割り当て) を使用している場合は、オフセットを速やかにコミットしてください。未コミットのオフセットは、クライアントがすでに処理しているにもかかわらず、消費されたメッセージがコンソールに蓄積されているように表示される原因となります。大量のメッセージが蓄積されている場合は、消費レートと生成レートを比較します。消費レートが低い場合は、消費容量を増やしてください。詳細については、「コンシューマーのスケールアップ」をご参照ください。
Topic をサブスクライブするコンシューマーグループの表示
[Topics] ページから、特定の Topic をサブスクライブするコンシューマーグループを確認し、パーティションごとの詳細を掘り下げます。
ApsaraMQ for Kafka コンソールにログインします。[概要] ページの [リソース分布] セクションで、インスタンスが存在するリージョンを選択します。
[Instances] ページで、インスタンス名をクリックします。
左側のナビゲーションウィンドウで、[Topics] をクリックします。
[Topics] ページで、Topic 名をクリックします。
トピックの詳細 ページで、サブスクリプション関係 タブをクリックします。この Topic をサブスクライブするすべてのコンシューマーグループが、現在のトピックを購読しているオンライングループのリスト セクションに一覧表示されます。

グループを見つけて、操作 列の [Consumer Details] をクリックします。[Consumer Details] ページには、このグループのパーティションごとのメトリックが表示されます。フィールドの説明については、「コンシューマー詳細フィールド」をご参照ください。

コンシューマーグループがサブスクライブする Topic の表示
[Groups] ページから、コンシューマーグループがサブスクライブするすべての Topic と、各 Topic の蓄積されたメッセージ数を確認します。
[Instances] ページで、インスタンス名をクリックします。
左側のナビゲーションウィンドウで、[Groups] をクリックします。
[Groups] ページで、グループ ID をクリックします。
[Group Details] ページで、消費ステータス タブをクリックします。このグループがサブスクライブするすべての Topic が、各 Topic の蓄積されたメッセージ数とともに一覧表示されます。

Topic を見つけて、操作 列の [Consumer Details] をクリックします。[Consumer Details] ページには、このグループ-Topic のペアのパーティションごとのメトリックが表示されます。フィールドの説明については、「コンシューマー詳細フィールド」をご参照ください。

コンシューマー詳細フィールド
| フィールド | 説明 |
|---|---|
| パーティション ID | パーティションの ID です。 |
| クライアント | 接続されているコンシューマーの識別子で、フォーマットは <クライアント ID>_/<IP アドレス> です。切断されたコンシューマーはこの列に表示されません。 |
| 最大オフセット | このパーティションで消費可能な最大のオフセットです。 |
| Consumer Offset | コンシューマーグループが、このパーティションでどこまで消費をコミットしたかを示すオフセットです。 |
| Messages Accumulated | このパーティション内の未消費メッセージ数で、[最大オフセット] から [コンシューマオフセット] を引いて計算されます。この値が持続的に増加する場合、通常はコンシューマーがブロックされているか、消費レートが生成レートよりも低いことを示します。修正オプションについては、「コンシューマオフセットのリセット」をご参照ください。 |
メッセージ蓄積の解釈
すべてのメッセージ蓄積が問題を示すわけではありません。アクションが必要かどうかを判断するには、次のパターンを使用します。
| 表示される内容 | 意味 | 操作 |
|---|---|---|
| 蓄積されたメッセージが安定した範囲内で変動し、最終消費日時が現在の時刻に近い。 | 正常な動作。コンシューマーグループは新しいメッセージをアクティブにプルしています。 | 操作は不要です。 |
| 蓄積されたメッセージが着実に増加し、コンシューマオフセットが変更されない。 | コンシューマースレッドがブロックされています。クライアントはメッセージの消費を停止し、オフセットをコミットしなくなりました。 | ブロックされたスレッドまたはデッドロックについて、コンシューマーアプリケーションを調査してください。 |
| 蓄積メッセージは着実に増加しますが、コンシューマオフセットは引き続きコミットされています。 | コンシューマーグループはメッセージを処理していますが、消費レートが生成レートよりも低い。 | 消費容量を増やしてください。詳細については、「コンシューマーのスケールアップ」をご参照ください。 |
コンシューマーのスケールアップ
消費レートが生成レートよりも低いためにメッセージ蓄積が発生する場合は、次のいずれかの方法で消費容量を増やします。
コンシューマーを追加する。プロセス内にコンシューマーインスタンスを追加するか (コンシューマーごとに 1 つのスレッド)、追加のコンシューマープロセスをデプロイします。コンシューマーの総数をパーティション数以下に保ちます。その数を超えるコンシューマーはアイドル状態のままになります。
コンシューマーごとの消費スレッドを増やす。実装の詳細については、「消費レートを増やす」をご参照ください。
よくある質問
アプリケーションが正常に消費しているのに、コンソールにメッセージが蓄積されていると表示されるのはなぜですか?
これは通常、アプリケーションが手動パーティション割り当てのために assign モードを使用している場合に発生します。assign モードでは、オフセットを自分で管理します。オフセットがブローカーにコミットされない場合、クライアントがすでに処理しているにもかかわらず、コンソールはメッセージが蓄積されていると報告します。この不一致を解決するには、オフセットを速やかにコミットしてください。
メッセージ蓄積は常に問題を示しますか?
いいえ。蓄積されたメッセージ数が予測可能な範囲内で変動し、最終消費日時が現在の時刻に近い場合、コンシューマーグループは正常であり、メッセージをアクティブにプルしています。
蓄積が問題を示唆するのは、時間が経つにつれてカウントが着実に増加する場合のみです。2 つの一般的な原因は、コンシューマースレッドがブロックされている (オフセットの進行が停止する) か、消費レートが生成レートに追いつかない (オフセットは進行するが、ギャップが拡大する) ことです。
関連情報
GetConsumerProgress -- プログラムでコンシューマーの詳細を取得する。
コンシューマオフセットのリセット -- コンシューマオフセットを特定のポジションにリセットして、蓄積されたメッセージをスキップする。
メッセージが蓄積された場合はどうすればよいですか? -- メッセージ蓄積に関するエンドツーエンドのトラブルシューティングガイド。