Apache Ratis 3.3.1 介绍与选型指南

Apache Ratis 3.3.1 选型指南:Raft 共识 Java 库的分层架构、可插拔特性、快速上手、适用限制及与 etcd、hashicorp/raft、Atomix 的量化对比

Apache RatisApache Ratis2026/10/18

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 Centralhttps://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-apiRaft 服务端实现与接口
ratis-common / ratis-proto公共基础与协议消息定义
ratis-grpc / ratis-netty / ratis-hadoop三种可插拔传输实现
ratis-logservice分布式日志服务配方
ratis-metrics-api / ratis-metrics-default / ratis-metrics-dropwizard3可插拔指标体系
ratis-trace-otelOpenTelemetry 链路追踪
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)gRPCNetty+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 区块):

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.1etcd v3.7.2hashicorp/raft v1.8.0Atomix
开源许可Apache-2.0Apache-2.0MPL-2.0Apache-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 实现已归档,不建议新项目采用。

八、参考链接