コンシューマー クライアントでリバランスが発生した場合、リバランスの開始時刻、期間、原因などのリバランスの詳細を表示できます。また、リバランスが発生した回数や、リバランス後にコンシューマーがコンシューマー グループに追加されたかどうかを確認することもできます。
背景情報
ApsaraMQ for Kafka では、リバランスとは、パーティションがコンシューマー グループに再マップされるプロセスです。コンシューマー クライアントでは、次の原因によりリバランスがトリガーされる可能性があります。
コンシューマーがコンシューマー グループへのサブスクリプションを追加または削除する。
トピック内のパーティション数が変更される。
コンシューマー グループ内のコンシューマーの数が増減する。
消費応答の遅延により、消費ハートビートがタイムアウトします。ハートビートがタイムアウトしたコンシューマーをフィルタリングするために、リバランスがトリガーされます。
max.poll.interval.msパラメーターで指定された時間が経過してもメッセージがプルされない場合。これにより、クライアントはキューから切断され、リバランスがトリガーされます。 max.poll.interval.ms パラメーターのデフォルト値は 5 分です。コンシューマー グループ内のコンシューマーの数が多すぎる。トピックとパーティションのリソースを節約するために、特定のコンシューマーをシャットダウンする必要があります。これにより、リバランスがトリガーされます。
コンシューマー グループ内のコンシューマーの数が不足している。これにより、トピックとパーティションでメッセージの遅延が発生します。メッセージの遅延を防ぐために、特定の数のコンシューマーを追加する必要があります。これにより、リバランスがトリガーされます。
手順
ApsaraMQ for Kafka コンソール にログインします。左側のナビゲーション ペインで、インスタンスリスト をクリックします。
上部のナビゲーション バーで、管理するインスタンスが存在するリージョンを選択します。 インスタンスリスト ページで、管理するインスタンスの名前をクリックします。
左側のナビゲーション ペインで、Group の管理 をクリックします。表示されるページで、管理するグループを見つけ、グループの名前をクリックします。
[グループの詳細] ページで、リバランス詳細 タブをクリックします。
クライアントで頻繁にリバランスが発生するのはなぜですか?
考えられる原因
この問題は、次の原因により発生する可能性があります。
バージョン 0.10.2 より前のクライアントの場合: コンシューマーには、ハートビート メッセージを送信するための個別のスレッドがありません。ハートビート メッセージは、poll インターフェースを使用して送信されます。消費応答が停止すると、ハートビート メッセージを送信するリクエストがタイムアウトし、リバランスが発生します。
バージョン 0.10.2 以降のクライアントの場合:
max.poll.interval.msパラメーターで指定された時間が経過してもメッセージがプルされません。これにより、クライアントはメッセージ キューから切断され、リバランスがトリガーされます。 max.poll.interval.ms パラメーターのデフォルト値は 5 分です。
解決策
次のパラメーターを理解する必要があります。
session.timeout.ms: ハートビート メッセージを送信するリクエストのタイムアウト期間を指定します。ビジネス要件に基づいてカスタム値を指定できます。max.poll.records: 各 poll に対して返されるメッセージの最大数を指定します。バージョン 0.10.2 より前のクライアントの場合: ハートビート メッセージは、poll インターフェースを使用して送信されます。コンシューマーには、ハートビート メッセージを送信するための個別のスレッドがありません。
バージョン 0.10.2 以降のクライアントの場合:
max.poll.interval.msパラメーターを設定して、クライアントが長時間メッセージを消費しないようにすることができます。
以下の項目は、パラメーター値を設定するための参考資料です。
session.timeout.ms: バージョン 0.10.2 より前のクライアントの場合は、メッセージのバッチを消費するために必要な時間よりも長く、30 秒よりも短い値を設定します。 25 秒に設定することをお勧めします。バージョン 0.10.2 以降のクライアントの場合は、デフォルト値の 10 秒を維持します。
max.poll.records:
1 秒あたりにスレッドごとに消費されるメッセージ数 × スレッド数 × max.poll.interval.ms パラメーターの値よりもはるかに小さい値を設定します。max.poll.interval.ms:
max.poll.records の値 / (1 秒あたりにスレッドごとに消費されるメッセージ数 × スレッド数)よりも大きい値を設定します。
クライアントの消費速度を向上させ、消費ロジックを処理するための個別のスレッドを割り当てます。
グループがサブスクライブするトピックの数を 5 以下に減らします。 1 つのグループが 1 つのトピックのみをサブスクライブすることをお勧めします。
クライアントをバージョン 0.10.2 以降にアップグレードします。