Apache Thrift 0.25.0 介绍与选型指南
介绍 Apache Thrift 0.25.0:跨语言 RPC 与序列化框架的分层架构、25 种官方语言矩阵、IDL 快速上手、适用场景与限制,并与 gRPC、Protocol Buffers、Avro 就许可、stars、版本节奏与兼容矩阵做量化对比。
Apache Thrift 0.25.0 介绍与选型指南
一、信息基准
| 项目 | 内容 |
|---|---|
| 查询日期 | 2026-10-18 |
| 本次介绍版本 | Apache Thrift 0.25.0(官网标注的最新稳定版) |
| 发布日期 | 2026-09-30(官网下载页原文:released on 2026-SEP-30) |
| 开源许可 | Apache License 2.0(Apache 软件基金会顶级项目) |
| 前序版本 | 0.24.0(2026-07-11)、0.23.0(2026-04-27),见 GitHub releases.atom |
官方来源清单:
| 来源 | 地址 | 用途 |
|---|---|---|
| 官网下载页 | https://thrift.apache.org/download | 最新稳定版号与发布日期 |
| ASF 发行目录 | https://downloads.apache.org/thrift/ | 当前在架版本目录(0.24.0/0.25.0)与 KEYS |
| 核心概念文档 | https://thrift.apache.org/docs/concepts | 分层架构(Transport/Protocol/Processor/Server) |
| 语言支持矩阵 | https://thrift.apache.org/docs/Languages | 各语言起始版本、协议与服务器矩阵 |
| 官方教程 | https://thrift.apache.org/tutorial | IDL 定义与客户端/服务端示例 |
| GitHub 发行记录 | https://github.com/apache/thrift/releases.atom | 历史版本发布时间戳交叉核验 |
| Maven Central | https://repo1.maven.org/maven2/org/apache/thrift/libthrift/ | Java 构件坐标核验 |
版本依据说明:官网下载页明确写明「The latest stable release of Thrift is 0.25.0 (released on 2026-SEP-30)」,并同步给出 Maven 依赖坐标 0.25.0;downloads.apache.org/thrift/ 目录当前仅保留 0.24.0 与 0.25.0 两个版本目录;GitHub releases.atom 中 0.25.0 条目时间为 2026-09-30。三方数据交叉一致。
二、软件概述
本文介绍的是 Apache Thrift 0.25.0(2026-09-30 发布的最新稳定版)。Apache Thrift 是一个可伸缩的跨语言远程过程调用(RPC)与序列化框架:开发者在一份 Thrift 接口定义语言(IDL)文件中声明数据类型与服务接口,Thrift 编译器据此自动生成各语言的客户端桩(stub)与服务器骨架(skeleton)代码,从而让不同编程语言之间的调用方与被调方可以像调用本地方法一样通信。按照官网首页的描述,开发者无需再手写大量的对象序列化、网络传输与远程方法调用样板代码,可以直接专注于业务逻辑。
Thrift 起源于 Facebook 的内部系统,开源后捐赠给 Apache 软件基金会,现为 Apache 顶级项目(TLP),采用 Apache License 2.0 许可。截至查询日 2026-10-18,其 GitHub 仓库(github.com/apache/thrift)页面显示 10,960 个 stars,最近一次发版为 0.25.0,且自 2026 年以来保持了约每季度一个稳定版的节奏(0.23.0、0.24.0、0.25.0 分别发布于 2026 年 4 月、7 月与 9 月)。
三、核心架构
3.1 分层模型
官方概念文档(thrift.apache.org/docs/concepts)将 Thrift 运行时自底向上划分为四层,各层可独立替换组合:
- Transport(传输层):对网络读写的简单抽象,提供 open/close/read/write 等接口,使底层传输与序列化解耦;服务器侧另有 ServerTransport 接口负责接受新连接。多数语言可用的底层传输包括 file、http、socket、TLS 等,可叠加 framed(帧)、header(头)、zlib(压缩)等传输包装器。
- Protocol(协议层):定义内存数据结构与线上格式的映射,负责具体的编码与解码。常见协议包括 binary(二进制)、compact(紧凑二进制)、JSON 与 multiplexed(多路复用)。Thrift 协议按设计是流式面向的,无需显式分帧。
- Processor(处理器层):由编译器针对具体服务生成,负责从输入协议读取请求、回调用户实现的 handler、再经输出协议写出响应,核心接口可概括为 process(in, out)。
- Server(服务器层):把传输、协议与处理器组装起来,创建输入/输出协议、绑定处理器并等待连接。0.25.0 语言矩阵中列出的服务器类型包括 Simple、Threaded、ThreadPool、Nonblocking 与 Forking。
3.2 IDL 与代码生成
Thrift IDL 提供强类型的结构定义能力:基础类型(bool、byte、i16、i32、i64、double、string、binary 等)、集合类型(list、map、set)、struct、enum、exception 与 service;字段可声明 required/optional 并带默认值,service 支持通过 extends 继承其他服务。编译器以 IDL 文件为输入,为各目标语言生成类型定义、序列化代码与 RPC 桩代码,保证跨语言线格式一致。
3.3 多语言矩阵(0.25.0 官方语言表)
官方 Languages 页面(thrift.apache.org/docs/Languages)列出 25 种语言实现,包括:C (glib)、C++、Common LISP、Dlang、Dart、Delphi、.NET、Erlang、Go、Haxe、Java (SE)、Java (ME)、JavaScript、Kotlin、Lua、node.js、node.ts、OCaml、Perl、PHP、Python、Ruby、Rust、Smalltalk 等,并逐语言标注起始版本、测试过的语言/库版本、底层传输、传输包装器、协议与服务器支持情况。以 Java (SE) 与 C++ 为起点最早(自 0.2.0 起支持),Rust(0.11.0)、.NET(0.13.0)、Kotlin(0.17.0)等较新语言的接入时间则相对靠后。
四、功能特性
- 跨语言代码生成:一份 IDL 生成 25 种语言的类型、序列化与 RPC 代码,跨语言线格式由框架保证。
- 可插拔分层:传输、协议、服务器三两组合均可按部署形态替换,例如 socket + TLS、framed + compact、Nonblocking 服务器等。
- 强类型演进能力:字段编号机制支持新增字段与 optional 字段,为接口向后兼容演进提供基础。
- 官方多发行形态:downloads.apache.org/thrift/ 提供 0.25.0 源码包(tar.gz)、Windows 预编译编译器 thrift-0.25.0.exe,以及 debian 与 rpm 发行目录;发布附带 PGP 签名与 SHA256/SHA1/MD5 校验。
- Maven 构件:Java 运行时以 org.apache.thrift:libthrift:0.25.0 发布于 Maven Central,官网下载页直接给出依赖片段。
- 官方教程与测试套件:thrift.apache.org/tutorial 提供 tutorial.thrift 与 shared.thrift 完整示例及多语言实现,源码树内置跨语言测试套件用于验证各语言实现一致性。
五、快速上手
以下步骤与代码均引自官方教程与官网首页示例(thrift.apache.org/tutorial),本文未做本地实测。
- 编写 IDL 文件。官方首页示例(tutorial.thrift 节选):
struct Work {
1: i32 num1 = 0,
2: i32 num2,
3: Operation op,
4: optional string comment,
}
exception InvalidOperation {
1: i32 whatOp,
2: string why
}
service Calculator extends shared.SharedService {
// 方法以类似 C 语言的语法声明
}
- 用编译器生成目标语言代码(官方教程用法,语言可替换为 --gen java、--gen go 等):
thrift --gen py tutorial.thrift
- 在客户端中组合传输与协议并调用(官方首页 Python Client 节选):
def main():
# 创建 socket
transport = TSocket.TSocket('localhost', 9090)
# 缓冲很关键,原始 socket 速度很慢
transport = TTransport.TBufferedTransport(transport)
# 包装协议
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 创建客户端
client = Calculator.Client(protocol)
transport.open()
client.ping()
print('ping()')
sum_ = client.add(1, 1)
- 服务端使用编译器生成的 Processor 与选定的 Server 组装(官方教程提供 py、java 等多语言服务端完整实现,见 tutorial 页面与其源码树)。
六、适用场景与限制
适用场景:
- 多语言异构微服务之间的内部 RPC,需要用一份 IDL 统一接口契约。
- 对序列化体积与编解码性能敏感的内部通信链路(binary/compact 二进制协议)。
- 已有 C++/Java 等存量服务需要被 Go、Python、Rust、.NET 等新栈调用的混合技术栈企业环境。
限制:
- 浏览器端支持有限:JavaScript 实现偏向受限场景,没有 HTTP/2 双向流等面向公网的前端生态。
- 相较 gRPC,缺少围绕 HTTP/2 的负载均衡、链路追踪、重试策略等成熟周边生态,服务治理能力需自建或借助外部组件。
- IDL 先行的工作流要求先定义接口并编译生成代码,动态 schema 场景不如 Avro 灵活。
- 各语言实现成熟度不一,官方 Languages 页面按语言分别标注测试状态,选型时需核对自己所用语言的具体支持项。
七、同类选型对比
以下对比中,Thrift 数据为官网与 ASF 发行目录实查(2026-10-18);对比项的 stars 数为 2026-10-18 通过各自 GitHub 仓库页面实查,版本与日期取自各项目官方 releases.atom 或官网发布页。
| 维度 | Apache Thrift 0.25.0 | gRPC v1.84.0 | Protocol Buffers v36.2 | Apache Avro 1.12.2 |
|---|---|---|---|---|
| 开源许可 | Apache-2.0 | Apache-2.0 | BSD-3-Clause(仓库 LICENSE 文件) | Apache-2.0 |
| GitHub stars(2026-10-18 实查) | 10,960 | 45,387 | 72,114 | 3,307 |
| 最近发版 | 0.25.0(2026-09-30) | v1.84.0(2026-09-16;v1.85.0-pre1 于 2026-10-09) | v36.2(2026-09-17;v37.0-rc1 于 2026-10-15) | 1.12.2(2026-08-23) |
| 版本节奏 | 约每季度一版(2026 年 4/7/9 月连发 0.23/0.24/0.25) | 月度级滚动(正式版与 pre 版交替) | 稳定线约 1-2 月一版,RC 预览紧随 | 数月一版 |
| 兼容/能力矩阵 | 25 种官方语言;IDL 编译器生成 RPC 客户端/服务端;binary/compact/JSON/multiplexed 协议;Simple/Threaded/ThreadPool/Nonblocking/Forking 服务器 | 10 余种官方语言;HTTP/2 传输 + Protobuf 编码;四种通信模式(一元/服务端流/客户端流/双向流);生态工具最全 | 仅序列化与 IDL,不内置 RPC 框架,通常与 gRPC 或自研传输搭配 | 序列化框架 + 动态 schema 解析,Kafka/Hadoop 生态常用,配套 schema registry 使用广泛 |
选型建议:若团队需要一份 IDL 同时覆盖 C++、Java、Python、Go、Rust、.NET、PHP 等大量语言并以二进制紧凑格式做内部 RPC,Thrift 0.25.0 仍是稳健之选;若以云原生生态、流式通信与可观测性周边为重,优先 gRPC;若只需高性能序列化本身,可选 Protocol Buffers;若主战场是 Kafka/Hadoop 数据管道且需要动态 schema,选 Avro。
八、参考链接
- 官网:https://thrift.apache.org/
- 下载页:https://thrift.apache.org/download
- ASF 发行目录:https://downloads.apache.org/thrift/
- 核心概念文档:https://thrift.apache.org/docs/concepts
- 语言支持矩阵:https://thrift.apache.org/docs/Languages
- 官方教程:https://thrift.apache.org/tutorial
- GitHub 仓库:https://github.com/apache/thrift
- 发布记录:https://github.com/apache/thrift/releases.atom
- Maven Central 构件:https://repo1.maven.org/maven2/org/apache/thrift/libthrift/
- Apache 项目主页:https://projects.apache.org/project.html?thrift