Apache Ratis 3.3.1 介绍与选型指南
Apache Ratis 3.3.1 选型指南:Raft 共识 Java 库的分层架构、可插拔特性、快速上手、适用限制及与 etcd、hashicorp/raft、Atomix 的量化对比
Apache Ratis 3.3.1 介绍与选型指南
一、信息基准
- 查询日期:2026-10-18(本文全部版本与数据均以该日期实查为准)
- 版本依据:官方最新稳定版为 3.3.1。三方交叉验证一致:
- 官方下载页 downloads 列表标注 3.3.1 发布日期为 2026-09-22(上一版 3.2.2 为 2026-04-03);
- Maven Central
org/apache/ratis/ratis-server的 maven-metadata.xml 最新<release>为 3.3.1,lastUpdated 20260920; downloads.apache.org/ratis/发行目录现有 3.0.1、3.1.3、3.2.2、3.3.0、3.3.1 五个版本目录。
- 项目形态:多模块 Java 库,同一版本号(3.3.1)下统一发布全部分构件,无需拆分组件版本口径;Maven Central
org/apache/ratis/下共 30 个构件目录(2026-10-18 实查)。
官方来源清单:
| 来源 | 地址 | 用途 |
|---|---|---|
| 项目官网 | https://ratis.apache.org/ | 项目定位、特性、快速上手 |
| 官方下载页 | https://ratis.apache.org/downloads.html | 版本列表与发布日期 |
| Apache 发行目录 | https://downloads.apache.org/ratis/ | 源码发行物、签名与校验 |
| Maven Central | https://repo1.maven.org/maven2/org/apache/ratis/ | 二进制构件与版本元数据 |
| GitHub 仓库 | https://github.com/apache/ratis | 源码、BUILDING.md、发布 tag |
| Raft 协议官网 | https://raft.github.io/ | Raft 协议背景 |
二、软件概述
2.1 项目定位
本次介绍的版本号为 Apache Ratis 3.3.1(发布日期 2026-09-22)。官网对项目的定义是:开源的 Raft 共识协议 Java 实现;并明确说明它是 Java 里的 Raft 协议库,"It's not a standalone server application like Zookeeper or Consul"——即 Ratis 不是类似 ZooKeeper、Consul 那样的独立服务进程,而是嵌入使用者应用进程内的一套复制状态机组件库。任何需要在多个实例之间复制状态的 Java 应用都可以使用它。
2.2 版本演进与分支
- 1.0.0 是官方标注的 GA(General Availability)基线版本;
- 当前主线为 3.3.x(3.3.1 为最新),同时 3.1.x、3.2.x 稳定分支在发行目录中并存(3.1.3、3.2.2 均有发行物),适合不同下游按节奏跟进;
- 版本节奏:官网下载页可见 3.2.2(2026-04-03)→ 3.3.1(2026-09-22),整体保持一年多次发版、多分支并行维护。
2.3 核心构件一览(组件-版本基准表)
以下构件均属于 org.apache.ratis 组,版本统一为 3.3.1(来源:Maven Central 目录与官方下载页):
| 构件 | 角色 |
|---|---|
| ratis-bom | 物料清单,统一各构件版本 |
| ratis-client | 客户端 API |
| ratis-server / ratis-server-api | Raft 服务端实现与接口 |
| ratis-common / ratis-proto | 公共基础与协议消息定义 |
| ratis-grpc / ratis-netty / ratis-hadoop | 三种可插拔传输实现 |
| ratis-logservice | 分布式日志服务配方 |
| ratis-metrics-api / ratis-metrics-default / ratis-metrics-dropwizard3 | 可插拔指标体系 |
| ratis-trace-otel | OpenTelemetry 链路追踪 |
| ratis-shell / ratis-tools | 命令行与运维工具 |
| ratis-thirdparty(含 hadoop/misc) | 依赖 shade 处理(含 Dropwizard 4) |
| ratis-examples | 官方示例(Arithmetic、FileStore) |
2.4 治理与许可
Apache 软件基金会项目,源码许可 Apache-2.0(GitHub 仓库页许可证标注,2026-10-18 实查)。
三、核心架构与核心概念
3.1 Raft 协议要素
Raft 是一种以易于理解为设计目标的共识算法,通过 leader 选举、日志复制、安全性约束与成员变更等机制管理复制状态(背景参考:raft.github.io)。Ratis 把这套机制实现为可嵌入的 Java 组件。
3.2 Ratis 分层结构
自上而下依次为:客户端 API(ratis-client)→ 可插拔传输层 → RaftServer(含 Raft 日志)→ 使用者自己的状态机(StateMachine)。状态机中存放的正是使用者希望高可用的数据,Ratis 负责把对状态的写入以一致顺序复制到组内多数副本。
3.3 四个可插拔点(官网特性)
| 可插拔点 | 官方默认 | 备选/自定义 |
|---|---|---|
| 传输(transport) | gRPC | Netty+Protobuf、Apache Hadoop RPC |
| 状态机(state machine) | — | 使用者实现自己的状态机 |
| Raft 日志(raft log) | 本地文件存储 | 使用者自定义写入策略与存储位置 |
| 指标(metrics) | ratis-metrics-default(ratis-thirdparty 提供的 shaded Dropwizard 4) | ratis-metrics-dropwizard3 或自定义实现 |
3.4 RaftGroup 与多组部署
Ratis 以 RaftGroup 为组织单元:一个组由若干 RaftPeer(副本节点)组成,组内运行独立的 Raft 日志与状态机;同一物理进程可以承载多个组,适合元数据分片等场景(官方示例与 API 组织方式)。
3.5 Log Service 配方
ratis-logservice 提供一组状态机与面向客户端的精简 API,用于在 Ratis 之上实现分布式日志服务(官网特性区与 logservice 文档页)。
四、功能特性
4.1 可插拔传输
默认 gRPC,另有 Netty+Protobuf 与 Hadoop RPC 两种实现;官方特别说明 Hadoop 相关依赖已经 shade,因此使用 hadoop 传输不会与使用方自身依赖的 Hadoop 版本产生冲突(官网下载页与首页原文)。
4.2 可插拔状态机与 Raft 日志
状态机接口让业务数据(KV、文件、元数据等)以复制状态机方式获得强一致;Raft 日志默认落本地文件,也允许使用者自定义日志实现与写入策略。
4.3 可观测性
- 指标:默认实现基于 shaded Dropwizard 4,另有 Dropwizard 3 实现,均可在 ratis-metrics 系列构件中选择;
- 链路追踪:ratis-trace-otel 提供 OpenTelemetry 集成(构件名与版本 2.31.0 的 opentelemetry-javaagent 依赖见 3.3.1 根 pom,2026-10-18 实查)。
4.4 运维与工具链
ratis-shell 提供命令行操作 Raft 组的能力;ratis-tools 聚合辅助工具;ratis-bom 方便使用方统一版本;ratis-examples 提供可运行的官方示例。
五、快速上手(引自官方文档,本地未做运行实测)
5.1 引入 Maven 依赖
官方 Getting started 的最小用法:引入 ratis-server,再任选一种传输实现(来源:https://ratis.apache.org/ 首页 Getting started 区块):
<dependency>
<artifactId>ratis-server</artifactId>
<groupId>org.apache.ratis</groupId>
</dependency>
并按需选择其一:
<dependency>
<artifactId>ratis-grpc</artifactId>
<groupId>org.apache.ratis</groupId>
</dependency>
(ratis-netty、ratis-hadoop 同理;Hadoop 依赖已 shade,可与不同版本 Hadoop 共存。)
5.2 官方示例
官方建议通过 ratis-examples 子项目学习用法(来源:官网首页 Examples 区块):
- Arithmetic 示例:一个简单的分布式计算器,复制若干数值并对其执行算术运算(源码:https://github.com/apache/ratis/tree/master/ratis-examples/src/main/java/org/apache/ratis/examples/arithmetic );
- FileStore 示例:基于 Ratis 的文件读写(源码:https://github.com/apache/ratis/tree/master/ratis-examples/src/main/java/org/apache/ratis/examples/filestore )。
5.3 构建与运行基线
官方 BUILDING.md(ratis-3.3.1 tag)写明:Apache Ratis 使用 Java 8 编写,因此要求 Java 8 或更高版本(来源:https://github.com/apache/ratis/blob/ratis-3.3.1/BUILDING.md )。
六、适用场景与限制
6.1 适用场景
- Java 技术栈中需要内嵌复制状态机的系统:元数据服务、复制 KV、分布式日志(ratis-logservice)等;
- 希望把共识层与业务状态机、传输、日志存储解耦,并按需替换实现的场景;
- 多副本强一致写入、组内 leader 复制语义即可满足的业务。
6.2 限制
- 它是库而非独立服务器:进程管理、初始配置、监控接入、故障演练等都由集成方自行承担;
- 仅面向 Java 使用方,无其他语言官方绑定;
- Raft 属于崩溃容错(CFT)共识,需要多数副本存活才能工作,生产部署通常至少 3 个副本(协议要求参考 raft.github.io),不抵御拜占庭行为;
- 跨大版本升级需关注官方发布公告的兼容性说明(官网下载页附各版本 Announcement)。
七、同类选型对比
对比对象选取三类同类实现:内含 Raft 的独立共识存储(etcd)、Go 内嵌 Raft 库(hashicorp/raft)、跨语言的分布式系统框架(Atomix,其原 Java 实现已归档)。数据来源:各项目 GitHub 仓库页(stars,2026-10-18 实查)与各仓库 releases.atom(最近发版,2026-10-18 实查)。
| 维度 | Apache Ratis 3.3.1 | etcd v3.7.2 | hashicorp/raft v1.8.0 | Atomix |
|---|---|---|---|---|
| 开源许可 | Apache-2.0 | Apache-2.0 | MPL-2.0 | Apache-2.0 |
| GitHub stars 与最近发版 | 1,488 stars;3.3.1(2026-09-22 发布) | 52,389 stars;v3.7.2(2026-09-22) | 9,147 stars;v1.8.0(2026-09-16) | 2,357 stars;runtime/v1.1.2(2023-05-18,此后无新发版) |
| 版本节奏 | 一年多次发版,3.1.x/3.2.x/3.3.x 多分支并行 | 持续活跃,3.5/3.6/3.7 多线维护 | 稳定小步演进 | 2023-05 之后无发版,原 Java 实现归档于 atomix/atomix-archive |
| 兼容矩阵 | Java 8+;Maven Central 分发;Hadoop 依赖已 shade;传输/日志/指标/状态机四层可插拔 | Go 实现,以独立服务运行,提供 gRPC 接口与 JSON 网关 | Go 内嵌库 | 当前仓库为 Go runtime,原 Java 实现已归档 |
选型建议一句话:JVM 应用内嵌复制状态机首选 Ratis;需要开箱即用的跨语言共识 KV 服务选 etcd;Go 进程内嵌 Raft 选 hashicorp/raft;Atomix 长期无发版且 Java 实现已归档,不建议新项目采用。
八、参考链接
- 项目官网:https://ratis.apache.org/
- 官方下载页(版本与发布公告):https://ratis.apache.org/downloads.html
- Apache 发行目录:https://downloads.apache.org/ratis/
- Maven Central 构件目录:https://repo1.maven.org/maven2/org/apache/ratis/
- GitHub 仓库(含 BUILDING.md):https://github.com/apache/ratis
- 官方示例目录:https://github.com/apache/ratis/tree/master/ratis-examples
- LogService 文档:https://ratis.apache.org/logservice
- Raft 协议背景:https://raft.github.io/