ZooKeeperでgetChildren()で大量のノードを取得しようとするとKeeperExceptionがスローされる

ZooKeeperに100万件ぐらいノードを投入して、getChildren()するとConnectionが強制的に切断されてKeeperExceptionが発生する。

原因

クライアント側で受信したパケットサイズが大きくなりすぎると(デフォルト4MB)、強制的にConnectionを閉じるようになっている。

対処法

クライアント側のJVM起動時に システムプロパティ:jute.maxbuffer を設定する。16MBを上限とする場合は以下のようになる。

java -Djute.maxbuffer=16777216 ...

ちなみにZooKeeper Administrator's Guideには、「jute.maxbufferはznodeのデータサイズ上限値」と書いてあるが、それはサーバ側の話なので、この件とは関係がない。