web-dev-qa-db-ja.com

ZooKeeperが継続的にEndOfStreamExceptionを取得し、クラッシュを引き起こす

私のZookeeperは、コンピューターが処理する準備ができるまで各ノードで関連するジョブデータを保持することにより、異なるジョブのいくつかの異なるキューを制御しています。サービス全体を停止すると、ジョブを開始できなくなり、ZooKeeperは再起動後に問題なく実行されます。ただし、これらのジョブの一部が原因でZooKeeperがクラッシュし、ZooKeeperログに次のメッセージが表示されます。

WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@349] - caught end of stream exception
EndOfStreamException: Unable to read additional data from client sessionid 0x15677f740ad002a, likely client has closed socket
        at org.Apache.zookeeper.server.NIOServerCnxn.doIO(NIOServerCnxn.Java:220)
        at org.Apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.Java:208)
        at Java.lang.Thread.run(Thread.Java:745)
INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1001] - Closed socket connection for client /127.0.0.1:46998 which had sessionid 0x15677f740ad002a

私が最初に設定した人から引き継いでいるため、私のZooKeeperの知識は非常に限られています。

私はzookeeperシェルでrmr [path]を使用して多数のノードを削除しようとしましたが、効果があるように見えました(残された、または使用されなかった50k以上のノードを削除した)が、毎日、昨夜クラッシュし続けました同じエラー/クラッシュが発生するまでに数分以上実行できませんでした。

これを引き起こしている原因を見つけるにはどうすればよいですか?

受信されたデータ、または保存されたデータ/ノードに関する一般的な問題であると確信しています。ディスクは92%だけ使用されています。私はこの投稿も見つけました: Zookeeperは警告を受け取り続けます: "catch end of stream exception" ですが、解決策は私にはあまり意味がありません。また、znodeに保存されているメッセージのサイズが1MBを超えないことは確かですが、これを確認する方法がわかりません。

ZooKeeperログを変更して、クラッシュする前に動作しているznodeのコンテンツ/名前などの追加情報を出力できるようにする方法はありますか?

19
Nixxon

ZooKeeperを実行しているサーバーからすべてのzookeeperスナップショットとログファイルを削除することで、問題を解決できました。なぜこれが違いを生んだのかは分かりませんが、過去22時間は問題なく動作しています。

5
Nixxon