オリジナルリンクします。https://blog.csdn.net/z1941563559/java/article/details/88753938
問題の説明:消費後の時間のいくつかの話題カフカ期間、ユニークな消費者を再起動し、オフセットは最小限にリセットされます再消費オフセット、消費が繰り返し問題カフカ消費につながっています。
問題の原因は:古い情報に起因するオフセットです。私は、常に最新の変位情報の有効期限が切れていない、消費者はオンラインのままと思いました。しかし、このような変位情報などのオンライン消費者は、およそ失効する場合でも。データ構成log.retention.hours = 168保持時間時間= 1440、すなわち、24時間より長い変位offsets.retention.minutesの保持時間比。オフセット古い情報の後、消費者を再起動してください。オフセット情報を見つけることができません、設定auto.offset.resetに応じて支出を開始します=早い、最小変位から、再び消費される前に、データの消費につながっています。
ソリューション:
オリジナル:https://issues.apache.org/jira/browse/KAFKA-3806
log.retention.hoursとoffsets.retention.minutesのデフォルト値調整
特殊なケースでは、デフォルト値との組み合わせでlog.retention.hours(168時間= 7日)とoffsets.retention.minutes(1440分= 1日測定)は危険なことができます。オフセット予約は常に予約数よりも大きくなければなりません。
当社は、以下の観察との質問があります。
- プロデューサーの更新は2日前に対象のデータの生産を禁止された、対象は削除されません。
- 消費者は、すべてのデータを使用し、カフカのに割り当てられたオフセットを補正します。
- これ以上の着信データがあるため、消費者はもはや何も特定できるコンテンツがありません、話題を相殺するために提出していません。(私たちは、私は確信して行動が提出自動的に有効化されていないよ、自動コミット無効になっています。)
- 一日を過ごした後:カフカが古すぎるクリアoffsets.retention.minutesに応じたオフセット。
- 二日後:このトピックはされているので、長時間実行しているユーザの再起動更新後、offsets.retention.minutesを削除したので、被写体に提出された任意のオフセットを見つけることができませんでしたので、最初からそれを使用し始めました。
- まだカフカメッセージ、長いlog.retention.hoursので、メッセージが約5日間は再び読んでいます。
この問題の既知の解決策を解決するには:
- 明示的な設定log.retention.hoursとoffsets.retention.minutes、デフォルト値を使用しないでください。
提案:
- デフォルト値offsets.retention.minutesはlog.retention.hoursとして大きなとして少なくとも二倍に拡張しました。
- カフカ起動時にこれらの値をチェックし、offsets.retention.minutesのlog.retention.hoursは、警告が記録されている場合よりも少ないです。
- (オフセット保存されたカフカとZooKeeperの違いを理解するために、移行ガイドにメモを追加http://kafka.apache.org/documentation.html#upgradeを)。
レビュー:
デフォルトデフォルト値問題のパラメータoffsets.retention.minutes&のlog.retention.minutes。
前者は7日24時間であるデフォルトパラメータ、です。保存中のデータは、問題を引き起こすが、障害がデータ消費量のクライアントの重複を原因と相殺することができます。
0.10.0.0公式パラメーターます。http://kafka.apache.org/0100/documentation.html#log
offsets.retention.minutes
オフセットトピックの分単位でログの保存ウィンドウ
カフカサーバー保存された有効期限の時間は終わりを相殺しました。デフォルト値1440(1440分の24時間である)であり、それはすなわち10080、log.retention.hoursと一致するように調整されるべきです。
log.retention.hours&log.retention.minutes
これらの2つのパラメータは、ファイルを削除します、プロパティがオーバーフローしているのにかかわらず、削除ログを設定するために使用されています。
log.retention.hours:
ナンバーで時間の砦のAログの削除ファイルの前にITは、(時間)、log.retention.msプロパティに三次
int型のパラメータ、デフォルト:168(168時間が7日IE)。
log.retention.minutes:
分の数は、二次log.retention.msプロパティに、(分単位)を削除する前に、ログファイルを維持します。設定されていない場合は、log.retention.hoursの値が使用され
参数int型类型、默认值:ヌル。