【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语言中文社区

相关推荐
kaikaile19952 小时前
微电网两阶段鲁棒优化经济调度MATLAB实现
开发语言·matlab
liuyao_xianhui2 小时前
优选算法_栈_删除字符中的所有相邻重复项_C++
开发语言·数据结构·c++·python·算法·leetcode·链表
逝水如流年轻往返染尘2 小时前
JAVA中的内部类
java·开发语言
always_TT2 小时前
C语言中的布尔值:_Bool与stdbool.h
c语言·开发语言
寂静or沉默2 小时前
Java程序员技术面试:如何清晰描述项目难点?逻辑模板!Java的原因与解决方案最新发布!
java·开发语言·面试
Z.风止2 小时前
Large Model-learning(1)
开发语言·笔记·git·python·学习
Sgf2273 小时前
第15章 网络编程
开发语言·网络·php
菜鸟程序员专写BUG3 小时前
SpringBoot 接口返回异常全集|JSON解析失败/响应乱码/状态码错误完美解决
spring boot·后端·json
Ares-Wang3 小时前
Python》》FastAPI 异步框架 接口 pymysql【同步】 aiomysql【异步】
开发语言·python·fastapi