2017-06-08 1 views
0

最近私は本当に奇妙な問題を抱えました。ストームクラスターには3台のマシンがあります。トポロジ構造は、このようなものです。Kafka Spout A - > Bolt B - > Bolt C例外をスローする可能性はありますが、すべてのボルトですべてのタプルを確認しました。タプルをackしてください)。 しかし、ここでは奇妙なことが起こります。スパウトのログを印刷します。スパウトによってすべてのタプルを受け取りましたが、他の2台のマシンでは、ほとんどすべてのタプルが失敗しました。そして60秒後にタプルが何度も繰り返し再生されました。 'ほぼ'は開始時を意味し、すべてのタプルは他の2台のマシンで失敗しました。ある時間が過ぎると、2台のマシンに少量のタプルがあります。ストームメッセージが失敗しました

タプルは、タイムアウトのために失敗しました。しかし、なぜ彼らがタイムアウトしたのかは分かりません。私が印刷したログによれば、すべてのボルトでexecuteメソッドの最後にすべてのタプルが確認されていることは間違いありません。だから私は2つのマシンでタプルのいくつかが失敗した理由を知りたい。

トポロジーや嵐のクラスタに何が問題なのか調べるためにできることはありますか?本当に感謝し、あなたの返事を期待しています。

答えて

0

あなたの問題はStormTopologyのKafkaSpoutによる背圧の処理に関連しています。

あなたはトポロジー構成でmaxSpoutPending値を設定することにより、KafkaSpoutの背圧を処理することができ、

Config config = new Config(); 
config.setMaxSpoutPending(200); 
config.setMessageTimeoutSecs(100); 

StormSubmitter.submitTopology("testtopology", config, builder.createTopology()); 

maxSpoutPendingは、ある時点で、あなたのトポロジで承認を保留することができタプル数です。このプロパティを設定すると、KafkaSpoutは、未確認タプル数がmaxSpoutPending値未満でない限り、カフカからのデータをそれ以上消費しないようになります。

また、タイムアウト前にタプルが認識されるように、できるだけ軽量になるようにボルトを微調整できることを確認してください。

関連する問題