Stellflow 是一个基于 JDK 25 实现的分布式消息队列项目,整体领域模型、运行角色和核心工程思想以 Apache Kafka 最新主线架构为参考,但并不是对 Kafka 原始实现路径的逐项复刻。
它的目标是:
- 保持 Kafka 风格的 Topic / Partition / Replica / ISR / Offset / Controller Quorum 体系
- 保持 Kafka 风格的高吞吐日志存储与分区复制思想
- 使用纯 Java 重新构建实现
- 在基础设施层面采用与 Kafka 不同、但更符合当前项目目标的技术路线
当前仓库与 Apache Kafka 的关键差异如下:
| 维度 | Kafka 原生路线 | Stellflow 当前路线 |
|---|---|---|
| Broker / Client 通信 | 自定义二进制协议,Java 原生网络栈风格 | 自定义二进制协议,Java 客户端底层 Netty,Golang 客户端底层自研 |
| Broker 间数据复制 | 复用核心二进制协议 | 复用同一套二进制协议,底层统一 Netty |
| Controller / Broker 控制面通信 | Kafka 自身协议体系 | 使用 gRPC |
| Controller Quorum 一致性 | KRaft | 使用 Apache 的 Raft |
| 消息存储核心 | 自研日志段 | 自研日志段,不走 gRPC,不走 KV |
| 可观测性 | JMX-first | OpenTelemetry-first,不再支持 JMX |
如果只看一句话,可以这样理解:
Stellflow 保留 Kafka 的核心语义和分布式日志思想,但在通信、控制面一致性实现和可观测性标准上,明确走与 Kafka 不同的现代化路线。
- Broker / Client 通信:自定义二进制协议,Java 客户端底层 Netty,Golang 客户端底层自研。
- Broker 间数据复制:复用同一套二进制协议,底层使用 Netty。
- Controller / Broker 控制面通信:使用 gRPC。
- Controller Quorum 一致性:使用 Apache 的 Raft。
- 消息存储核心:自研日志段,不走 gRPC,不走 KV。
- 可观测性:使用 OpenTelemetry 标准,不再支持 JMX。
- 配置与文档层正式使用
stellflow://表达数据面 endpoint,但线上 TCP 二进制协议本身不携带文本前缀。
当前仓库已经沉淀的设计文档如下:
- 概要设计
- 存储层详细设计
- Broker 请求处理链路设计
- Controller 与 Replica 详细设计
- 通信与基础设施选型调研
- 高性能协议选型与吞吐设计对照
- 数据面高吞吐性能设计
- 压测计划
- Netty 数据面实现指南
- 协议规范文档
- ApiVersions / Metadata 消息格式规范
- Produce / Fetch 消息格式规范
- ListOffsets 接口说明
- FetchRequestBody 消息格式规范
- ProduceResponseBody 消息格式规范
- 消息格式样例报文
- 协议兼容性测试计划
- Replica Fetch 运行设计
- OTel 指标字典
- ADR 索引
Stellflow 面向以下典型场景:
- 异步解耦
- 事件分发
- 流式传输
- 高吞吐日志聚合
- 削峰填谷与任务缓冲
当前仓库仍处于设计与骨架规划阶段,重点工作在于:
- 固化总体架构与模块边界
- 明确通信、存储、控制面和可观测性技术路线
- 为后续代码骨架实现提供统一设计基线