ApsaraMQ for Kafka クライアントのバージョンが古い、またはコンシューマーにハートビート メッセージを送信するための個別のスレッドがないことが原因である可能性があります。
症状
Message Queue for Apache Kafka を使用すると、コンシューマー クライアントでリバランスが頻繁に発生します。
原因
考えられる原因は次のとおりです。
バージョン 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 以降にアップグレードします。