P (partition tolerance) refers to network partitions. There's nothing a distributed system can do to prevent network partitions; they're a property of the network. The question is, in the face of partitions, what does the software do? It basically has two options:
* Respond to requests, even though it may not have the most up to date information. I.e., it sacrifices consistency. These are AP systems.
* Not respond to requests, in which case it sacrifices availability. These are CP systems, of which ZK is one.
In particular with ZK, if you lose quorum (i.e., the cluster has fewer than (n + 1) / 2 active nodes where n is the cluster size) the cluster (or partition thereof) will become unavailable in order to avoid sacrificing consistency.
Non-distributed databases (like postgres) are sometimes considered to be CA. But I think it's clear that CA doesn't make sense in a distributed system.
* Respond to requests, even though it may not have the most up to date information. I.e., it sacrifices consistency. These are AP systems.
* Not respond to requests, in which case it sacrifices availability. These are CP systems, of which ZK is one.
In particular with ZK, if you lose quorum (i.e., the cluster has fewer than (n + 1) / 2 active nodes where n is the cluster size) the cluster (or partition thereof) will become unavailable in order to avoid sacrificing consistency.