私はkafkaとstormを接続するためにkafka-stormを使用していました。 zookeeper、kafka、stormという3つのサーバーがあります。 9つのパーティションを持つkafkaのトピック 'test'があります。ackによって引き起こされた嵐の待ち時間
ストームトポロジでは、KafkaSpoutエグゼキュータの数は9です。デフォルトでは、タスクの数も9でなければなりません。そして、 'extract'ボルトはKafkaSpoutに接続されている唯一のボルト、 'log'スパウトです。
UIから、スパウトには大きな障害が発生しています。しかし、ボルトで実行されたメッセージの数=放出されたメッセージの数 - ボルトで失敗したメッセージの数。この式は、最初に失敗したメッセージが空の場合にほぼ一致します。
私の理解によれば、これはボルトがメッセージをスパウトから受信しましたが、ack信号は飛行中に中断されています。だからこそスパウトの厄介者の数が非常に少ない理由です。
この問題は、timeout秒とspout保留メッセージ番号を増やすことで解決できます。しかし、これによりメモリ使用量が増え、無限に増やすことはできません。
スパム/ボルトで嵐を強制的に無視してタイムアウトまでその信号を待たないようにする方法があれば、私はさまよっていました。これにより、全体的に大幅に増加するはずですが、メッセージ処理が保証されません。
ありがとうございました。 'topology.max.spout.pending'を2000に制限することでこの問題を解決しました。 –