code: func (cg *Consumergroup) WatchPartitionOwner(topic string, partition int32) (*ConsumergroupInstance, <-chan zk.Event, error) {
  	node := fmt.Sprintf("%s/consumers/%s/owners/%s/%d", cg.kz.conf.Chroot, cg.Name, topic, partition)
  	instanceID, _, changed, err := cg.kz.conn.GetW(node)
  
  	switch err {
  	case nil:
  		return &ConsumergroupInstance{cg: cg, ID: string(instanceID)}, changed, nil
  
  	case zk.ErrNoNode:
  		return nil, nil, nil
  
  	default:
  		return nil, nil, err
  	}
  }
docs: // WatchPartitionOwner retrieves what instance is currently owning the partition, and sets a
  // Zookeeper watch to be notified of changes. If the partition currently does not have an owner,
  // the function returns nil for every return value. In this case is should be safe to claim
  // the partition for an instance.