See https://issues.apache.org/jira/browse/FLINK-33053.
While removeAllWatches removes all watches both client-side and server-side, removeWatches only check the watcher existence and remove the client-side one, remain the server-side watcher as is. Thus, it can leak if no any further events. Is it by design or we can make some better solution? Best, tison.