Thanks a lot, ZkStringSerializer works like a charm! For those googling for the same question, here's a gist, which instantiates ZkClient and sets proper serializer (in case somebody else finds this question).
[1]: https://gist.github.com/jjkoshy/3842975 On Tue, Apr 7, 2015 at 6:49 PM, Guozhang Wang <wangg...@gmail.com> wrote: > Andrei, > > Kafka uses string serialization when writing data to ZK, you can find its > implementation in kafka.utils.ZKStringSerializer. > > Guozhang > > On Tue, Apr 7, 2015 at 6:40 AM, Andrei <faithlessfri...@gmail.com> wrote: > > > I'm trying to read data from ZooKeeper nodes that was written by > different > > Kafka components. As a specific example (just one from a bunch), I'm > trying > > to read current offset for specific group, topic and partition. As far > as I > > understand, it is stored under the path > > > > /consumers/data-processing-team/offsets/unloads/35 > > > > I'm using `com.101tec.zkclient` to get data. I'm able to walk through > node > > tree and create new nodes, as well as write and read simple types (e.g. > > strings) to them. But when it comes to reading data from Kafka-specific > > nodes like this: > > > > > zkClient.readData("/consumers/data-processing-team/offsets/unloads/35") > > > > I'm getting decoding error: > > > > org.I0Itec.zkclient.exception.ZkMarshallingError: > > > java.io.StreamCorruptedException: invalid stream header: 32323737 > > > at > > > > > > org.I0Itec.zkclient.serialize.SerializableSerializer.deserialize(SerializableSerializer.java:37) > > > at org.I0Itec.zkclient.ZkClient.derializable(ZkClient.java:740) > > > at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:773) > > > at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:761) > > > at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:750) > > > at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:744) > > > ... 64 elided > > > Caused by: java.io.StreamCorruptedException: invalid stream header: > > > 32323737 > > > at > > java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804) > > > at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299) > > > at > > > > > > org.I0Itec.zkclient.serialize.TcclAwareObjectIputStream.<init>(TcclAwareObjectIputStream.java:30) > > > at > > > > > > org.I0Itec.zkclient.serialize.SerializableSerializer.deserialize(SerializableSerializer.java:31) > > > ... 69 more > > > > > > As far as I understand, this is due to specific serialization of nodes. > So > > I'm wondering, what is this format and how can I read such nodes? > > > > > > -- > -- Guozhang >