4.9. リバランスの影響の最小限に抑える方法
グループ内のアクティブなコンシューマー間のパーティションをリバランスするには、次の操作分の時間がかかります。
- コンシューマーによるオフセットのコミット
- 作成される新しいコンシューマーグループ
- グループリーダーによるグループメンバーへのパーティションの割り当て
- 割り当てを受け取り、取得を開始するグループのコンシューマー
リバランスプロセスにより、サービスのダウンタイムが長くなる可能性があります。特に、コンシューマーグループクラスターのローリング再起動中にリバランスが繰り返し発生する場合に顕著です。
この状況では、グループ内の各コンシューマーインスタンスに一意の識別子 (group.instance.id
) を割り当てることで、静的メンバーシップ を導入できます。静的メンバーシップは永続性を使用し、セッションタイムアウト後の再起動時にコンシューマーインスタンスが認識されるようにします。その結果、コンシューマーはトピックパーティションの割り当てを維持し、障害または再起動後にグループに再度参加する際の不要なリバランスが減ります。
さらに、max.poll.interval.ms
設定を調整すると、長時間にわたる処理タスクに起因するリバランスが防止され、新しいメッセージのポーリング間の最大間隔を指定できるようになります。max.poll.records
プロパティーを使用すると、各ポーリング中にコンシューマーバッファーから返されるレコード数が制限されます。レコード数を減らすと、コンシューマーはより少ないメッセージをより効率的に処理できるようになります。長時間のメッセージ処理が避けられない場合は、そのようなタスクをワーカースレッドのプールにオフロードすることを検討してください。この並列処理アプローチを使用すると、大量のレコードでコンシューマーに負荷がかかることに起因する遅延や潜在的なリバランスが防止されます。
# ... group.instance.id=UNIQUE-ID 1 max.poll.interval.ms=300000 2 max.poll.records=500 3 # ...