public static boolean setData(ZooKeeperWatcher zkw, String zkNode, byte[] data, int expectedVersion)
            throws KeeperException, KeeperException.NoNodeException {
        try {
            return zkw.getRecoverableZooKeeper().setData(zkNode, data, expectedVersion) != null;
        } catch (InterruptedException e) {
            zkw.interruptedException(e);
            return false;
        }
    }
Sets the data of the existing zkNode to be the specified data. Ensures that the current data
has the specified expected version.
<p/>
<p/>
If the node does not exist, a {@link NoNodeException} will be thrown.
<p/>
<p/>
If their is a version mismatch, method returns null.
<p/>
<p/>
No watches are set but setting data will trigger other watchers of this node.
<p/>
<p/>
If there is another problem, a KeeperException will be thrown.

@param zkw             zk reference
@param zkNode           path of node
@param data            data to set for node
@param expectedVersion version expected when setting data
@return true if data set, false if version mismatch
@throws KeeperException if unexpected zookeeper exception
inlong-tubemq/tubemq-server/src/main/java/org/apache/inlong/tubemq/server/common/zookeeper/ZKUtil.java