[ 
https://issues.apache.org/jira/browse/KAFKA-1664?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14157228#comment-14157228
 ] 

Gwen Shapira commented on KAFKA-1664:
-------------------------------------

For a more meaningful error, I'm thinking: Catch the exception thrown by 
zkClient at createParentPath, log an error like "Invalid ZooKeeper path, please 
check syntax and that path exists" and throw our own ConfigException

Since the original error is thrown by zkClient, we'll need to handle that in 
multiple places where we call it. Does it make sense to patch zkClient instead?



> Kafka does not properly parse multiple ZK nodes with non-root chroot
> --------------------------------------------------------------------
>
>                 Key: KAFKA-1664
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1664
>             Project: Kafka
>          Issue Type: Bug
>          Components: clients
>            Reporter: Ricky Saltzer
>            Assignee: Gwen Shapira
>            Priority: Minor
>              Labels: newbie
>
> When using a non-root ZK directory for Kafka, if you specify multiple ZK 
> servers, Kafka does not seem to properly parse the connection string. 
> *Error*
> {code}
> [root@hodor-001 bin]# ./kafka-console-consumer.sh --zookeeper 
> baelish-001.edh.cloudera.com:2181/kafka,baelish-002.edh.cloudera.com:2181/kafka,baelish-003.edh.cloudera.com:2181/kafka
>  --topic test-topic
> [2014-10-01 15:31:04,629] ERROR Error processing message, stopping consumer:  
> (kafka.consumer.ConsoleConsumer$)
> java.lang.IllegalArgumentException: Path length must be > 0
>       at org.apache.zookeeper.common.PathUtils.validatePath(PathUtils.java:48)
>       at org.apache.zookeeper.common.PathUtils.validatePath(PathUtils.java:35)
>       at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:766)
>       at org.I0Itec.zkclient.ZkConnection.create(ZkConnection.java:87)
>       at org.I0Itec.zkclient.ZkClient$1.call(ZkClient.java:308)
>       at org.I0Itec.zkclient.ZkClient$1.call(ZkClient.java:304)
>       at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:675)
>       at org.I0Itec.zkclient.ZkClient.create(ZkClient.java:304)
>       at org.I0Itec.zkclient.ZkClient.createPersistent(ZkClient.java:213)
>       at org.I0Itec.zkclient.ZkClient.createPersistent(ZkClient.java:223)
>       at org.I0Itec.zkclient.ZkClient.createPersistent(ZkClient.java:223)
>       at org.I0Itec.zkclient.ZkClient.createPersistent(ZkClient.java:223)
>       at kafka.utils.ZkUtils$.createParentPath(ZkUtils.scala:245)
>       at kafka.utils.ZkUtils$.createEphemeralPath(ZkUtils.scala:256)
>       at 
> kafka.utils.ZkUtils$.createEphemeralPathExpectConflict(ZkUtils.scala:268)
>       at 
> kafka.utils.ZkUtils$.createEphemeralPathExpectConflictHandleZKBug(ZkUtils.scala:306)
>       at 
> kafka.consumer.ZookeeperConsumerConnector.kafka$consumer$ZookeeperConsumerConnector$$registerConsumerInZK(ZookeeperConsumerConnector.scala:226)
>       at 
> kafka.consumer.ZookeeperConsumerConnector$WildcardStreamsHandler.<init>(ZookeeperConsumerConnector.scala:755)
>       at 
> kafka.consumer.ZookeeperConsumerConnector.createMessageStreamsByFilter(ZookeeperConsumerConnector.scala:145)
>       at kafka.consumer.ConsoleConsumer$.main(ConsoleConsumer.scala:196)
>       at kafka.consumer.ConsoleConsumer.main(ConsoleConsumer.scala)
> {code}
> *Working*
> {code}
> [root@hodor-001 bin]# ./kafka-console-consumer.sh --zookeeper 
> baelish-001.edh.cloudera.com:2181/kafka --topic test-topic
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to