As far as best practices goes, we do not recommend installing ZK on the same servers/nodes as NiFi. NiFi dataflows can be very CPU, disk, and/or memory intensive. Any of these can interfere with ZK --> NiFi comms/performance. This can result in NiFi nodes dropping from cluster, new NiFi cluster coordinators being assigned, and/or new primary nodes being elected frequently.
While it does work, i would keep away from co-location in production for sure.