Zipkin 架构与使用
Zipkin 是 Twitter 开源的分布式追踪系统,比 Jaeger 更早出现(2012 年),是链路追踪领域的先驱。虽然近年来 OpenTelemetry 和 Jaeger 的热度更高,Zipkin 仍然在 Java 生态(尤其是 Spring Boot 应用)中拥有大量用户。
Zipkin 的设计哲学是简单至上:它追求极简的架构和极低的门槛,适合中小规模的追踪场景。对于需要轻量化追踪能力的团队,Zipkin 是一个值得考虑的选择。
架构组成
Zipkin 分为四个组件:
Collector:接收来自客户端的追踪数据,支持 HTTP 和 Kafka 两种传输方式。Collector 验证数据格式后写入存储层。
Storage:Zipkin 支持多种存储后端:内存(开发测试用)、MySQL、Cassandra、Elasticsearch。生产环境推荐 Elasticsearch 或 Cassandra。
API:提供 RESTful API 供 UI 和其他客户端查询 Trace 数据。API 支持按 TraceID 查询、时间范围查询、服务名过滤等。
Web UI:基于 AngularJS 的单页应用,提供 Trace 列表、瀑布图、依赖图等可视化功能。UI 界面相比 Jaeger 较为朴素。
轻量级优势
相比 Jaeger 和Tempo,Zipkin 的优势在于轻量:
部署简单:All-in-One 模式只需一个 JAR 包,Docker 一条命令即可启动。相比 Jaeger 需要部署 Agent/Collector/Query 多组件,Zipkin 的运维复杂度更低。
资源占用低:Zipkin 的资源消耗约为 Jaeger 的 1/3 到 1/2。对于中小规模部署(Trace 量 < 1000 QPS),Zipkin 的性价比很高。
Spring Boot 原生集成:Spring Cloud Sleuth 是 Spring Cloud 的追踪组件,内置集成 Zipkin。配置 spring.zipkin.base-url 即可自动将追踪数据发送到 Zipkin,无需额外编码。
Spring Boot 集成示例
局限性
Zipkin 的主要局限是功能相对基础:
不支持 OTLP:Zipkin 使用自己的传输协议,不支持 OTLP 协议。如果想将数据发送到 Jaeger 或 Grafana Tempo,需要额外转换。
采样策略有限:Zipkin 的采样策略比 Jaeger 简单,不支持尾部采样、基于错误的采样等高级策略。
生态有限:相比 OpenTelemetry 的多语言支持,Zipkin 的 SDK 主要面向 Java 生态,多语言支持较弱。
对于新项目,推荐使用 OpenTelemetry + Jaeger/Tempo 的组合;对于已使用 Spring Cloud 的存量项目,Zipkin + Spring Cloud Sleuth 仍然是一个稳定的选择。