Apache 系列: Apache Iggy 介绍

Apache 系列: Apache Iggy 介绍

编码文章call10242025-05-12 11:16:163A+A-

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

你可以在仓库的根目录下找到 Dockerfiledocker-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 仓库。


点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4