すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for Kafka:Kafka を使用しているときにメッセージが蓄積された場合はどうすればよいですか?

最終更新日:Jan 11, 2025

ApsaraMQ for Kafka を使用しているときに、グループにメッセージが蓄積される場合があります。このトピックでは、メッセージの蓄積が正常かどうかを判断する方法と、異常なメッセージの蓄積を処理する方法について説明します。

クライアントでの消費プロセス

メッセージの蓄積が存在するかどうかを理解するには、クライアントでメッセージがどのように消費されるかを理解する必要があります。次の図は、消費プロセスを示しています。

メッセージの蓄積が正常かどうかを判断する

グループにメッセージが蓄積された場合は、次の手順を実行して、メッセージの蓄積が正常かどうかを判断します。

  1. Kafka コンソール にログインします。

  2. 上部のナビゲーションバーで、Kafka インスタンスが存在するリージョンを選択します。

  3. 左側のナビゲーションペインで、インスタンス をクリックします。

  4. インスタンス ページで、管理するインスタンスの名前をクリックします。

  5. [インスタンスの詳細] ページの左側のナビゲーションペインで、[グループ] をクリックします。

  6. グループ詳細コンシューマーの状態アクション ページで、管理するグループを見つけ、 列の > を選択します。

  7. コンシューマー ステータス ページで、最終コンシューム日時累積メッセージ数、および コンシューマー オフセット パラメーターの値に基づいて、メッセージの累積が正常かどうかを判断します。 これらのパラメーターの値は 1 分間隔で記録されます。

    説明

    [詳細] をクリックして、コンシューマーオフセットを表示できます。

    • 最新の消費時刻が現在の時刻に近く、累積メッセージ数が想定される安定した範囲内で変動している。 これは、クライアントが新しいメッセージをプルしており、メッセージの蓄積が正常であることを示します。

      説明

      累積メッセージ数は、メッセージ生成率とコンシューマーオフセットのコミット頻度によって異なります。[累積メッセージ] パラメーターの値が大きいからといって、メッセージの蓄積が異常であるとは限りません。 たとえば、トピックにメッセージを送信するための 1 秒あたりのトランザクション数(TPS)が 10,000 で、コンシューマーオフセットのコミット頻度が 1 秒に 1 回の場合、累積メッセージ数は通常のシナリオでは約 10,000 で変動する可能性があります。

    • 累積メッセージ数が徐々に増加し、コンシューマーオフセットが変化しない。 これは、クライアントのコンシューマースレッドがブロックされており、クライアントがメッセージの消費とブローカーへのコンシューマーオフセットのコミットを停止していることを示します。 この場合、メッセージの蓄積は異常です。 この問題の解決方法については、このトピックの「異常なメッセージの蓄積を処理する方法」セクションを参照してください。

    • 累積メッセージ数が徐々に増加し、コンシューマーオフセットがコミットされている。 これは、クライアントがまだメッセージを消費しているものの、メッセージ消費率がメッセージ生成率よりも低いことを示します。 この場合、メッセージの蓄積は異常です。 メッセージはクライアントによってブローカーからアクティブにプルされます。 したがって、この問題は、このトピックの「クライアントでの消費プロセス」セクションの手順 1 の操作が原因ではありません。 この場合、手順 2 の消費時間を確認します。 この問題の解決方法については、このトピックの「異常なメッセージの蓄積を処理する方法」セクションを参照してください。

      説明

      ほとんどの場合、異常なメッセージの蓄積は、メッセージ消費の遅延または消費スレッドのブロックが原因です。 消費ロジックで関連パラメーターに長い時間を指定しないことをお勧めします。

    • メッセージがパーティションに蓄積されているが、ダウンストリームシステムでの消費は正常である。 ダウンストリームシステムでは assign 消費モードが使用されている可能性があります。 このモードでは、オフセットは自分で管理されます。 この場合、メッセージはすでに消費されている可能性があります。 オフセットがコミットされていないため、メッセージは累積されたものとして表示されます。 メッセージの蓄積の問題を解決するために、できるだけ早くオフセットを手動でコミットすることをお勧めします。

異常なメッセージの蓄積を処理する方法

前述の操作に基づいて異常なメッセージの蓄積が存在することを確認した後、メッセージ消費時間を出力するか、スタック情報に基づいてスレッドの実行を確認できます。 異常なメッセージの蓄積を防ぐために、次の方法を使用してメッセージ消費率を上げることができます。

  • コンシューマーの数を増やします。 プロセスにコンシューマーを追加し、各コンシューマーが 1 つのスレッドに対応するようにすることができます。 あるいは、複数のコンシューマープロセスをデプロイすることもできます。 コンシューマーの数がパーティションの数を超えると、消費率を上げることはできません。 そうしないと、特定のコンシューマーがアイドル状態になります。

  • 消費スレッドの数を増やします。 詳細については、「コンシューマーのベストプラクティス」トピックの「消費率の向上」セクションを参照してください。

説明
  • jstack コマンドを実行して、Java スレッドに関するスタック情報をクエリできます。

  • Kafka コンソールでメッセージが蓄積され、コンシューマーの状態が異常な場合、リバランスが発生した可能性があります。 リバランス中は、メッセージは消費されません。 この場合、多数のクライアントが Kafka に接続または切断するため、メッセージが蓄積されます。 詳細については、「コンシューマークライアントでリバランスが頻繁に発生するのはなぜですか?」を参照してください。

参考資料

  • jstack の詳細については、「jstack - スタックトレース」を参照してください。

  • その他のよくある質問(FAQ)については、「FAQ」を参照してください。