Zipkin 1.8
Zipkin 1.8 is a library change focused on encoding performance. If you are instrumenting apps and use Zipkin's Codec, you'll want to upgrade.
Span encoding has been completely rewritten in order to get common-case overhead in microsecond or less range.
Zipkin 1.7 Codec.writeSpan() vs libthrift (pace car)
CodecBenchmarks.writeClientSpan_json_zipkin avgt 15 17.131 ± 0.446 us/op
CodecBenchmarks.writeClientSpan_thrift_libthrift avgt 15 1.952 ± 0.043 us/op
CodecBenchmarks.writeClientSpan_thrift_zipkin avgt 15 0.996 ± 0.021 us/op
CodecBenchmarks.writeLocalSpan_json_zipkin avgt 15 10.124 ± 0.177 us/op
CodecBenchmarks.writeLocalSpan_thrift_libthrift avgt 15 1.168 ± 0.016 us/op
CodecBenchmarks.writeLocalSpan_thrift_zipkin avgt 15 0.593 ± 0.010 us/op
CodecBenchmarks.writeRpcSpan_json_zipkin avgt 15 43.495 ± 1.086 us/op
CodecBenchmarks.writeRpcSpan_thrift_libthrift avgt 15 4.878 ± 0.046 us/op
CodecBenchmarks.writeRpcSpan_thrift_zipkin avgt 15 2.666 ± 0.018 us/op
CodecBenchmarks.writeRpcV6Span_json_zipkin avgt 15 49.759 ± 0.867 us/op
CodecBenchmarks.writeRpcV6Span_thrift_libthrift avgt 15 5.390 ± 0.073 us/op
CodecBenchmarks.writeRpcV6Span_thrift_zipkin avgt 15 3.147 ± 0.026 us/op
Zipkin 1.8 Codec.writeSpan() vs libthrift (pace car)
CodecBenchmarks.writeClientSpan_json_zipkin avgt 15 1.445 ± 0.036 us/op
CodecBenchmarks.writeClientSpan_thrift_libthrift avgt 15 1.951 ± 0.014 us/op
CodecBenchmarks.writeClientSpan_thrift_zipkin avgt 15 0.433 ± 0.011 us/op
CodecBenchmarks.writeLocalSpan_json_zipkin avgt 15 0.813 ± 0.010 us/op
CodecBenchmarks.writeLocalSpan_thrift_libthrift avgt 15 1.191 ± 0.016 us/op
CodecBenchmarks.writeLocalSpan_thrift_zipkin avgt 15 0.268 ± 0.004 us/op
CodecBenchmarks.writeRpcSpan_json_zipkin avgt 15 3.606 ± 0.068 us/op
CodecBenchmarks.writeRpcSpan_thrift_libthrift avgt 15 5.134 ± 0.081 us/op
CodecBenchmarks.writeRpcSpan_thrift_zipkin avgt 15 1.384 ± 0.078 us/op
CodecBenchmarks.writeRpcV6Span_json_zipkin avgt 15 3.912 ± 0.115 us/op
CodecBenchmarks.writeRpcV6Span_thrift_libthrift avgt 15 5.488 ± 0.098 us/op
CodecBenchmarks.writeRpcV6Span_thrift_zipkin avgt 15 1.323 ± 0.014 us/op
Why encoding speed matters
Applications that report to Zipkin typically record timing information and metadata on the calling thread. After the operation completes, this is encoded into a Span and scheduled to go out of process, usually via http or Kafka. When the encoding overhead is measurable, it can confuse timing information, particularly when operations are in single-digit or less milliseconds.
For example, if a local operation takes 400us, and your encoding overhead is 40us, there will be a 10% gap between the end of one span and the start of the next. This will notably skew the duration of the parent, particularly if there are a lot of spans like this. When encoding overhead in single-digit microseconds or less, this problem is less noticeable.