web-dev-qa-db-ja.com

KafkaプロデューサーTimeOutException

Samzaにデータを書き込んでいるストリームジョブを実行していますKafkaトピック。Kafkaは3ノードクラスタを実行しています。 Samzaジョブは、yarnにデプロイされます。これらの例外の多くがコンテナーログに表示されます:

 INFO [2018-10-16 11:14:19,410] [U:2,151,F:455,T:2,606,M:2,658] samza.container.ContainerHeartbeatMonitor:[ContainerHeartbeatMonitor:stop:61] - [main] - Stopping ContainerHeartbeatMonitor
ERROR [2018-10-16 11:14:19,410] [U:2,151,F:455,T:2,606,M:2,658] samza.runtime.LocalContainerRunner:[LocalContainerRunner:run:107] - [main] - Container stopped with Exception. Exiting process now.
org.Apache.samza.SamzaException: org.Apache.samza.SamzaException: Unable to send message from TaskName-Partition 15 to system kafka.
        at org.Apache.samza.task.AsyncRunLoop.run(AsyncRunLoop.Java:147)
        at org.Apache.samza.container.SamzaContainer.run(SamzaContainer.scala:694)
        at org.Apache.samza.runtime.LocalContainerRunner.run(LocalContainerRunner.Java:104)
        at org.Apache.samza.runtime.LocalContainerRunner.main(LocalContainerRunner.Java:149)
Caused by: org.Apache.samza.SamzaException: Unable to send message from TaskName-Partition 15 to system kafka.
        at org.Apache.samza.system.kafka.KafkaSystemProducer$$anon$1.onCompletion(KafkaSystemProducer.scala:181)
        at org.Apache.kafka.clients.producer.internals.RecordBatch.done(RecordBatch.Java:109)
        at org.Apache.kafka.clients.producer.internals.RecordBatch.maybeExpire(RecordBatch.Java:160)
        at org.Apache.kafka.clients.producer.internals.RecordAccumulator.abortExpiredBatches(RecordAccumulator.Java:245)
        at org.Apache.kafka.clients.producer.internals.Sender.run(Sender.Java:212)
        at org.Apache.kafka.clients.producer.internals.Sender.run(Sender.Java:135)
        at Java.lang.Thread.run(Thread.Java:748)
Caused by: org.Apache.kafka.common.errors.TimeoutException: Expiring 5 record(s) for Topic3-16 due to 30332 ms has passed since last attempt plus backoff time

これらの3種類の例外は頻繁に発生しています。

59088 org.Apache.kafka.common.errors.TimeoutException: Expiring 115 record(s) for Topic3-1 due to 30028 ms has passed since last attempt plus backoff time

61015 org.Apache.kafka.common.errors.TimeoutException: Expiring 60 record(s) for Topic3-1 due to 74949 ms has passed since batch creation plus linger time

62275 org.Apache.kafka.common.errors.TimeoutException: Expiring 176 record(s) for Topic3-4 due to 74917 ms has passed since last append

ここで問題が何であるかを理解してください。それが起こったときはいつでもSamza=コンテナは再起動されています。

4
Anuj jain

このエラーは、一部のレコードがクライアントから送信されるよりも速い速度でキューに入れられることを示しています。

プロデューサーがメッセージを送信すると、メッセージは(ターゲットブローカーに送信する前に)バッファーに格納され、スループットを向上させるためにレコードがバッチにグループ化されます。新しいレコードをバッチに追加する場合、request.timeout.msによって制御される-設定可能な時間枠内で送信する必要があります(デフォルトは30秒に設定されています)。バッチが長時間キューにある場合、TimeoutExceptionがスローされ、バッチレコードはキューから削除され、ブローカーに配信されません。

request.timeout.msの値を増やすとうまくいくはずです。

これが機能しない場合は、batch.sizeを減らしてバッチがより頻繁に送信されるようにして(ただし、今回はメッセージの数が少なくなる)、linger.msが0に設定されていることを確認することもできます(これはデフォルト値)。

構成パラメーターを変更した後、kafkaブローカーを再始動する必要があることに注意してください。

それでもエラーが発生する場合は、ネットワークで問題が発生していると思います。 SSLを有効にしましたか?

5