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のデータサイズ上限値」と書いてあるが、それはサーバ側の話なので、この件とは関係がない。