По каким-то причинам мне нужно использовать как - ConsumerGroup
(потребитель высокого уровня a.k.a.), так и SimpleConsumer
(потребитель низкого уровня a.k.a.) для чтения из Kafka. Для ConsumerGroup
я использую конфигурацию на основе ZooKeeper, и я полностью ее доволен, но SimpleConsumer
требует, чтобы посредники-посредники были созданы.
Я не хочу вести список обоих - ZooKeeper и хостов-брокеров. Таким образом, я ищу способ автоматически обнаружить брокеров для определенной темы из ZooKeeper.
Из-за некоторой косвенной информации я полагаю, что эти данные хранятся в ZooKeeper по одному из следующих путей:
-
/brokers/topics/<topic>/partitions/<partition-id>/state
- /брокеры/иды/
Однако, когда я пытаюсь прочитать данные из этих узлов, я получаю ошибку сериализации (я использую для этого com.101tec.zkclient
):
org.I0Itec.zkclient.exception.ZkMarshallingError: java.io.StreamCorruptedException: недопустимый заголовок потока: 7B226A6D at org.I0Itec.zkclient.serialize.SerializableSerializer.deserialize(SerializableSerializer.java:37) на 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) на org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:750) at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:744) ... 64 удаленных Вызывается: java.io.StreamCorruptedException: недопустимый заголовок потока: 7B226A6D в java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804) в java.io.ObjectInputStream. (ObjectInputStream.java:299) at org.I0Itec.zkclient.serialize.TcclAwareObjectIputStream. (TcclAwareObjectIputStream.java:30) at org.I0Itec.zkclient.serialize.SerializableSerializer.deserialize(SerializableSerializer.java:31) ... 69 подробнее
Я могу писать и читать пользовательские объекты Java (например, строки) без каких-либо проблем, поэтому я считаю, что это не проблема клиента, а довольно сложная кодировка. Таким образом, я хочу знать:
- Если это правильный путь, как правильно прочитать эти узлы?
- Если весь подход неверен, , что является правильным?