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

Andrew Olson commented on KAFKA-824:
------------------------------------

We are seeing a similar NPE in our application's direct usage of the ZkClient, 
unrelated to commitOffsets.

Here are a couple example stack traces.
{noformat}
Caused by: java.lang.NullPointerException
        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)
{noformat}

{noformat}
Caused by: java.lang.NullPointerException
        at 
org.I0Itec.zkclient.ZkConnection.writeDataReturnStat(ZkConnection.java:115)
        at org.I0Itec.zkclient.ZkClient$10.call(ZkClient.java:817)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:675)
        at org.I0Itec.zkclient.ZkClient.writeDataReturnStat(ZkClient.java:813)
        at org.I0Itec.zkclient.ZkClient.writeData(ZkClient.java:808)
        at org.I0Itec.zkclient.ZkClient.writeData(ZkClient.java:777)
{noformat}

ZkClient implements the org.apache.zookeeper.Watcher interface, so the 
process() callback can be invoked at any time by the background ZK event thread 
[1]. This callback method is not synchronized against the other ZkClient public 
methods, however. So if a state change event occurs that requires a 
reconnection [2], the internal ZkConnection is closed while reconnecting [3] 
which sets its org.apache.zookeeper.ZooKeeper to null [4] resulting in the 
NullPointerException if the process is concurrently using the ZkClient to read 
or write data.

[1] 
http://zookeeper.apache.org/doc/r3.3.4/zookeeperProgrammers.html#Java+Binding
[2] 
https://github.com/sgroschupf/zkclient/blob/master/src/main/java/org/I0Itec/zkclient/ZkClient.java#L457
[3] 
https://github.com/sgroschupf/zkclient/blob/master/src/main/java/org/I0Itec/zkclient/ZkClient.java#L953-954
[4] 
https://github.com/sgroschupf/zkclient/blob/master/src/main/java/org/I0Itec/zkclient/ZkConnection.java#L79

> java.lang.NullPointerException in commitOffsets 
> ------------------------------------------------
>
>                 Key: KAFKA-824
>                 URL: https://issues.apache.org/jira/browse/KAFKA-824
>             Project: Kafka
>          Issue Type: Bug
>          Components: consumer
>    Affects Versions: 0.7.2
>            Reporter: Yonghui Zhao
>            Assignee: Neha Narkhede
>         Attachments: ZkClient.0.3.txt, ZkClient.0.4.txt, screenshot-1.jpg
>
>
> Neha Narkhede
> "Yes, I have. Unfortunately, I never quite around to fixing it. My guess is
> that it is caused due to a race condition between the rebalance thread and
> the offset commit thread when a rebalance is triggered or the client is
> being shutdown. Do you mind filing a bug ?"
> 2013/03/25 12:08:32.020 WARN [ZookeeperConsumerConnector] [] 
> 0_lu-ml-test10.bj-1364184411339-7c88f710 exception during commitOffsets
> java.lang.NullPointerException
>         at org.I0Itec.zkclient.ZkConnection.writeData(ZkConnection.java:111)
>         at org.I0Itec.zkclient.ZkClient$10.call(ZkClient.java:813)
>         at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:675)
>         at org.I0Itec.zkclient.ZkClient.writeData(ZkClient.java:809)
>         at org.I0Itec.zkclient.ZkClient.writeData(ZkClient.java:777)
>         at kafka.utils.ZkUtils$.updatePersistentPath(ZkUtils.scala:103)
>         at 
> kafka.consumer.ZookeeperConsumerConnector$$anonfun$commitOffsets$2$$anonfun$apply$4.apply(ZookeeperConsumerConnector.scala:251)
>         at 
> kafka.consumer.ZookeeperConsumerConnector$$anonfun$commitOffsets$2$$anonfun$apply$4.apply(ZookeeperConsumerConnector.scala:248)
>         at scala.collection.Iterator$class.foreach(Iterator.scala:631)
>         at 
> scala.collection.JavaConversions$JIteratorWrapper.foreach(JavaConversions.scala:549)
>         at scala.collection.IterableLike$class.foreach(IterableLike.scala:79)
>         at 
> scala.collection.JavaConversions$JCollectionWrapper.foreach(JavaConversions.scala:570)
>         at 
> kafka.consumer.ZookeeperConsumerConnector$$anonfun$commitOffsets$2.apply(ZookeeperConsumerConnector.scala:248)
>         at 
> kafka.consumer.ZookeeperConsumerConnector$$anonfun$commitOffsets$2.apply(ZookeeperConsumerConnector.scala:246)
>         at scala.collection.Iterator$class.foreach(Iterator.scala:631)
>         at kafka.utils.Pool$$anon$1.foreach(Pool.scala:53)
>         at scala.collection.IterableLike$class.foreach(IterableLike.scala:79)
>         at kafka.utils.Pool.foreach(Pool.scala:24)
>         at 
> kafka.consumer.ZookeeperConsumerConnector.commitOffsets(ZookeeperConsumerConnector.scala:246)
>         at 
> kafka.consumer.ZookeeperConsumerConnector.autoCommit(ZookeeperConsumerConnector.scala:232)
>         at 
> kafka.consumer.ZookeeperConsumerConnector$$anonfun$1.apply$mcV$sp(ZookeeperConsumerConnector.scala:126)
>         at kafka.utils.Utils$$anon$2.run(Utils.scala:58)
>         at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>         at 
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
>         at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.java:722)



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to