2017-07-06 23 views
0

私は特定のトピックのデータを消費しているカフカコンシューマを持っています。私は0.10.0.0カフカ版を使用しています。オフセットを非同期的にコミットしている間に「オフセットのコミットに失敗しました」

LoggingCommitCallback.onComplete: Commit failed for offsets= {....}, eventType= some_type, time taken= 19ms, error= org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured session.timeout.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing the session timeout or by reducing the maximum size of batches returned in poll() with max.poll.records. 

は、私はこれらの2つの余分な消費者のプロパティを追加しましたが、まだそれは助けませんでした:

session.timeout.ms=20000 
max.poll.records=500 

下図のように私は別のバックグラウンドスレッドでのオフセットをコミットしています:

kafkaConsumer.commitAsync(new LoggingCommitCallback(consumerType.name())); 

何そのエラーはどういう意味ですか、どのように解決できますか?他のコンシューマープロパティを追加する必要がありますか?

+0

セッションタイムアウトの前にpollを呼び出していないことを意味します。私はあなたの最も簡単な選択肢は、ポーリングが呼び出されたときにだけ起きるのではなく、ハートビートがバックグラウンドスレッドで送られる0.10.2以上にアップグレードすることだと思います。それ以外の場合は、max.poll.recordsをプログラム作業のできる値に下げることを検討してください。 0.10.0.0ブローカでアップグレードされたクライアントを使用するとうまくいくはずですので、もっと簡単だと思います。 – dawsaw

+0

私はこの時点でアップグレードできませんので、私が持っている唯一のオプションは 'max.poll.records'を下げることです。 –

+0

デフォルトの 'session.timeout.ms'は10000で、デフォルトの' max.poll.records'は500です。どんな値を試しましたか?また、 '0.10.2.x'については、' session.timeout.ms'の代わりに 'max.poll.interval.ms'を増やすことを検討するべきです。 2つの連続する 'poll()'呼び出しの間の時間を測定して、良い設定値を見つけるのに役立ちます。 –

答えて

0

はい、以下のmax.poll.records。あなたはデータのより小さいバッチを得るでしょうが、ポーリングを頻繁に呼び出すとセッションが生き続けるのに役立ちます。

関連する問題