Apache 系列: Apache Iggy 介绍
Iggy 是用 Rust 编写的持久化消息流平台,支持 QUIC、TCP(自定义二进制规范)和 HTTP(常规 REST API)传输协议。目前以单服务器形式运行,它允许创建流(streams)、主题(topics)、分区(partitions)和段(segments),并支持向其中发送/从中接收消息。消息以仅追加日志的形式存储在磁盘上,并且在重启后能够持久化保存。
该项目的目标是打造一个分布式流平台(以集群形式运行),它能够实现水平扩展,并每秒处理数百万条消息(实际上,它已经非常快了,请看下面的基准测试结果)。
Iggy 在利用最少计算资源的同时,提供了极高的吞吐量和性能。
它并非是在现有基础设施(如 Kafka 或 SQL 数据库)之上运行的又一个扩展。
Iggy 是从头开始构建的持久化消息流日志,采用底层 I/O 技术以实现速度和效率的最大化。
这个名字是意大利灵缇犬(Italian Greyhound)的缩写 —— 这种犬体型虽小,但速度极快,在同类中堪称佼佼者。就像我心爱的法比奥(Fabio)和库奇(Cookie)一样
特性
- 高性能持久化仅追加日志:为消息流提供高性能的持久化仅追加日志功能。
- 读写高吞吐量:无论是写入还是读取操作,都具有非常高的吞吐量。
- 低延迟与可预测的资源使用:得益于 Rust 编译型语言(无垃圾回收机制),具备低延迟和可预测的资源使用特性。
- 用户认证与授权:支持用户认证和授权,拥有细粒度权限管理以及个人访问令牌(PAT)功能。
- 多流、多主题与多分区支持:支持多个流、主题和分区。
- 多传输协议支持:支持多种传输协议,包括 QUIC、TCP 和 HTTP。
- RESTful API:提供功能完备的 RESTful API,可按需启用。
- 多语言客户端 SDK:提供多种语言的客户端软件开发工具包。
- 直接处理二进制数据:可直接处理二进制数据,无需强制使用模式(schema),也无需进行序列化和反序列化操作。
- 服务器功能可配置:服务器功能可配置,例如缓存、段大小、数据刷新间隔、传输协议等。
- 消费者偏移量存储:可以将消费者偏移量存储在服务器上。
- 多种消息轮询方式:按偏移量轮询:使用索引按偏移量轮询消息。按时间戳轮询:使用时间索引按时间戳轮询消息。获取首/尾 N 条消息:可以获取第一条或最后一条的 N 条消息。获取特定消费者的下一批 N 条消息:针对特定消费者获取接下来的 N 条消息。自动提交偏移量:可以自动提交偏移量(例如,实现最多一次交付)。
- 消费者组:提供消费者组功能,可实现消息排序以及在连接的客户端之间进行水平扩展。
- 消息过期与自动删除:支持消息过期功能,并可根据可配置的保留策略自动删除过期消息。
- 其他特性:还包括服务器端消息去重等附加功能。
- 多租户支持:通过对主题进行分组抽象来实现多租户支持。
- TLS 支持:所有传输协议(TCP、QUIC、HTTPS)均支持 TLS。
- 数据加密:支持可选的服务器端和客户端数据加密,采用 AES-256-GCM 算法。
- 元数据支持:支持以消息头的形式添加可选的元数据。
- 数据备份与归档:支持在磁盘和/或与 S3 兼容的云存储(如 AWS S3)上进行可选的数据备份和归档。
- 监控支持:支持 OpenTelemetry 日志和跟踪,以及 Prometheus 指标。
- 内置命令行界面(CLI):提供内置的命令行界面,可通过 cargo install iggy-cli 进行安装,用于管理流服务器。
- 内置基准测试应用程序:提供内置的基准测试应用程序,用于测试性能。
- 单二进制部署:采用单二进制部署方式,无外部依赖项。
- 当前限制:以单节点形式运行(目前尚不支持集群模式)
路线图
- 底层优化:例如使用 rkyv 实现零拷贝反序列化(进行中)
- 高级 Web 界面:开发高级 Web 界面(进行中)
- 无共享设计与 io_uring 支持:在实验分支上实现无共享设计和 io_uring 支持
- 集群与数据复制:在沙盒项目上进行集群和数据复制功能的开发
- 多语言友好型 SDK:开发支持多种语言的开发人员友好型软件开发工具包
- 插件与扩展支持:支持插件和扩展
- 支持的语言 SDK(进行中):RustC#GoNodePythonJavaC++Elixir
Docker
你可以在仓库的根目录下找到 Dockerfile 和 docker-compose 文件。要构建并启动服务器,请运行:docker compose up。
此外,你还可以通过在正在运行的容器中执行以下命令来运行命令行界面(CLI):docker exec -it iggy-server /iggy。
请注意,如果 Docker 是在虚拟机中运行,而在非 Linux 操作系统上运行该容器,可能会导致显著的性能下降。
官方镜像可以通过以下命令拉取,只需输入:docker pull iggyrs/iggy。
Web 用户界面
目前正在努力为服务器构建管理用的 Web 用户界面,通过该界面可以对流(streams)、主题(topics)、分区(partitions)、消息(messages)等进行管理。请查看 Web UI 仓库。