public static void createWithParents(ZooKeeperWatcher zkw, String zkNode) throws KeeperException {
        try {
            if (zkNode == null) {
                return;
            }
            waitForZKConnectionIfAuthenticating(zkw);
            zkw.getRecoverableZooKeeper().create(zkNode, new byte[0], createACL(zkw, zkNode),
                    CreateMode.PERSISTENT);
        } catch (KeeperException.NodeExistsException nee) {
            return;
        } catch (KeeperException.NoNodeException nne) {
            createWithParents(zkw, getParent(zkNode));
            createWithParents(zkw, zkNode);
        } catch (InterruptedException ie) {
            zkw.interruptedException(ie);
        }
    }
Creates the specified node and all parent nodes required for it to exist.
<p/>
No watches are set and no errors are thrown if the node already exists.
<p/>
The nodes created are persistent and open access.

@param zkw   zk reference
@param zkNode path of node
@throws KeeperException if unexpected zookeeper exception
inlong-tubemq/tubemq-server/src/main/java/org/apache/inlong/tubemq/server/common/zookeeper/ZKUtil.java