Consul vs. Serf
The internal gossip protocol used within Consul is in fact powered by the Serf library: Consul leverages the membership and failure detection features and builds upon them to add service discovery. By contrast, the discovery feature of Serf is at a node level, while Consul provides a service and node level abstraction.
The membership provided by Serf is at a node level, while Consul focuses on the service level abstraction, mapping single nodes to multiple services. This can be simulated in Serf using tags, but it is much more limited and does not provide useful query interfaces. Consul also makes use of a strongly-consistent catalog while Serf is only eventually-consistent.
Consul is opinionated in its usage while Serf is a more flexible and general purpose tool. In terms, Consul uses a CP architecture, favoring consistency over availability. Serf is an AP system and sacrifices consistency for availability. This means Consul cannot operate if the central servers cannot form a quorum while Serf will continue to function under almost all circumstances.