Zipkin is a distributed tracing system that helps gather timing data to troubleshoot latency issues in microservices. It works by having tracers in applications record timing metadata about operations into spans, which are sent to Zipkin via reporters. Spans contain things like trace IDs, span IDs, timestamps, and annotations. Related spans with the same trace ID form traces that show how requests flow through systems. Zipkin's components include collectors that store and index spans, storage like Cassandra or Elasticsearch, search APIs, and a web UI for viewing traces. It supports tracing HTTP, Thrift, and messaging protocols.