【Rust日报】 Danube Messaging - 云原生消息平台

Rusqlite 使用示例

这是一个 Rust 语言中使用 SQLite 数据库的基础教程示例。

主要知识点

1. 基本设置

  • 使用 rusqlite crate 提供的 ConnectionparamsResult 类型

  • 定义了一个 Person 结构体,包含 id、name 和可选的 data 字段

2. 数据库连接

  • 使用 Connection::open_in_memory() 创建内存数据库连接

3. 创建表

  • 通过 conn.execute() 执行 SQL 语句创建 person 表

  • 表结构包含:id (主键)、name (非空文本)、data (二进制数据)

4. 插入数据

  • 使用参数化查询 (?1, ?2) 插入数据

  • 通过元组传递参数值,避免 SQL 注入

5. 查询数据

  • 使用 prepare() 准备 SQL 查询语句

  • 使用 query_map() 将查询结果映射为 Person 对象

  • 通过闭包 |row| 从每行数据中提取字段值

6. 遍历结果

  • 使用 for 循环遍历查询结果

  • 打印每个找到的 Person 对象

关键特性

  • 类型安全的数据库操作

  • 使用 Rust 的 Result 类型进行错误处理

  • 参数化查询防止 SQL 注入

https://docs.rs/rusqlite/latest/rusqlite

Danube Messaging - 云原生消息平台

Danube 是一个用 Rust 构建的开源分布式消息代理平台,具有轻量级、云原生和成本效益的特点。

核心特性

  • 嵌入式 Raft 共识:基于 openraft 实现元数据复制,无需依赖 ETCD 或 ZooKeeper

  • 可靠消息传递:结合本地预写日志(WAL)、持久化段存储和元数据驱动恢复

  • 低延迟分发:支持本地磁盘、共享文件系统和对象存储

  • 基于 Tokio 构建:异步高性能运行时

快速开始方式

1. Docker Compose 集群部署

go 复制代码
mkdir danube-docker && cd danube-docker
curl -O [docker-compose.yml]
curl -O [danube_broker.yml]
docker-compose up -d

包含:3个高可用 Broker、Prometheus 监控、danube-cli 工具

2. 单节点本地运行

go 复制代码
./danube-broker --single-node --data-dir ~/danube-data
  • 无需 Docker 和配置文件

  • Broker 运行在 127.0.0.1:6650

  • 管理端口 127.0.0.1:50051

  • 数据持久化到本地目录

集群特性

  • 水平扩展:零停机时间快速添加 Broker

  • 智能负载均衡:自动主题分配和重新平衡

  • 高可用性:自动领导者选举、故障转移和主题协调

  • 无外部依赖:元数据存储完全嵌入式

项目结构

包含多个模块:broker、client、admin、CLI、core、持久化存储、Raft 实现等,最新版本 v0.9.0 进行了持久化和单节点 broker 的重大改进。

https://github.com/danube-messaging/danube

Danube 消息系统的持久化与存储

核心概念

Danube 可靠主题(reliable topics)通过持久化消息,使消费者能够回放历史记录,并确保主题在代理服务器之间移动时不会丢失数据。存储系统基于三个核心思想:

  • 最近的写入存储在快速的本地预写日志(WAL)中

  • 历史数据通过持久化导出的段(segments)保存

  • 恢复和主题迁移依赖于嵌入式 Raft 元数据存储

三种存储模式

1. local(本地模式)
  • 所有数据保存在代理服务器的本地磁盘

  • 无后台导出,无远程存储

  • 适用场景:单节点部署、开发环境、简单部署

2. shared_fs(共享文件系统模式)
  • 热写入数据存储在本地 WAL

  • 后台导出将封闭段复制到所有代理服务器可见的共享文件系统

  • 适用场景:使用 NFS 或共享 POSIX 卷的本地多代理集群

3. object_store(对象存储模式)
  • 热写入数据存储在本地 WAL

  • 后台导出将封闭段推送到云对象存储(S3、GCS、Azure Blob)

  • 适用场景:云原生多代理部署

关键配置项

WAL(预写日志)设置
  • 缓存容量、文件同步间隔

  • 批处理字节数上限

  • 文件轮转阈值(大小和时间)

本地保留策略
  • 控制本地 WAL 文件的清理时机

  • 基于时间(默认 48 小时)和大小(默认 20GB)的清理策略

  • 仅删除本地 WAL 文件,不删除持久化段对象

持久化后端配置
  • shared_fs:配置共享段目录

  • object_store:配置云存储后端、存储桶、区域等参数

选择建议

需求 推荐模式
最简单的单代理部署 local
多代理 + 共享磁盘 shared_fs
多代理 + 云原生 object_store

https://danube-docs.dev-state.com/concepts/persistence/

--

From 日报小组 Mike

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

相关推荐
Penge6661 小时前
Go 接口编译期断言
后端
我是一颗柠檬1 小时前
【MySQL全面教学】MySQL面试高频考点汇总Day15(2026年)
数据库·后端·mysql·面试
星空椰2 小时前
Python 面向对象高级:继承与类定义详解
开发语言·python
拽着尾巴的鱼儿2 小时前
springboot openfeign 自定义feign 接口重试机制
java·spring boot·后端
白露与泡影2 小时前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
Ceelog2 小时前
久坐党自救指南:屏幕前 8 小时,身体到底在经历什么
前端·后端
凯瑟琳.奥古斯特2 小时前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
雪度娃娃3 小时前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
XS0301063 小时前
并发编程 六
java·后端
雪宫街道3 小时前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试