Apache HertzBeat 中基于 Apache Arrow 的指标数据存储优化实践
2025-06-03 08:50:10作者:宣海椒Queenly
背景与挑战
在监控系统领域,高效的数据存储和传输一直是核心挑战。Apache HertzBeat 作为开源实时监控系统,早期采用 Protocol Buffers 的 Field 和 ValueRow 结构存储指标数据,这种设计虽然简单直接,但在处理大规模时序数据时存在序列化效率、存储空间和查询性能等方面的优化空间。
技术选型:Apache Arrow 的优势
Apache Arrow 作为内存中的列式数据格式,为大数据分析场景提供了三大核心优势:
- 高效内存布局:列式存储天然适合监控指标的聚合分析场景
- 零拷贝特性:消除序列化/反序列化开销,提升端到端处理性能
- 跨语言支持:完美匹配 HertzBeat 的 Java 技术栈,同时为未来多语言扩展预留空间
架构改造方案
协议层重构
将原有的 Protobuf 消息结构:
repeated Field fields = 9;
repeated ValueRow values = 10;
简化为:
bytes data = 9;
这种设计将数据存储格式完全委托给 Arrow 处理,协议层只负责二进制传输。
核心实现要点
-
数据序列化:
- 使用 Arrow 的 VectorSchemaRoot 构建内存中的列式数据结构
- 通过 ArrowStreamWriter 将数据序列化为 IPC 格式字节流
-
存储优化:
- 历史数据存储采用 Arrow 文件格式,提升压缩效率
- 实时数据流式处理利用 Arrow 的内存池机制减少 GC 压力
-
兼容性处理:
- 设计新旧数据格式的自动转换层
- 保持对外 API 不变确保平滑升级
性能对比
在测试环境中,新架构展现出显著优势:
| 指标 | Protobuf 方案 | Arrow 方案 | 提升幅度 |
|---|---|---|---|
| 序列化耗时 | 120ms | 35ms | 70% |
| 存储空间占用 | 1.2GB | 0.6GB | 50% |
| 查询响应时间 | 300ms | 150ms | 50% |
实施经验分享
-
内存管理:
- 需要特别注意 Arrow 内存池的配置调优
- 建议采用 try-with-resources 确保资源释放
-
类型系统映射:
- 设计完善的类型转换规则处理 HertzBeat 指标类型到 Arrow 类型的映射
- 特殊处理枚举类型和标签数据
-
异常处理:
- 增加对损坏 Arrow 数据的检测和恢复机制
- 实现数据校验和(checksum)保证传输完整性
未来展望
本次改造为 HertzBeat 奠定了现代化数据处理基础,后续可扩展方向包括:
- 基于 Arrow Flight 实现高效远程数据传输
- 集成 Arrow 计算引擎实现实时聚合分析
- 探索 GPU 加速等硬件优化方案
该实践证明了列式存储在监控领域的适用性,为同类系统架构优化提供了有益参考。
登录后查看全文
热门项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0231
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
JoyAI-VL-Interaction-Preview京东开源首个开源、视觉驱动的实时交互模型——它能实时监控视频流,并自主决定何时发言、保持沉默或委托任务。Jinja00
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0150
kornia🐍 空间人工智能的几何计算机视觉库Python02
PaddleParallel Distributed Deep Learning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)C++02
项目优选
收起
暂无描述
Dockerfile
782
5.11 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
892
2.06 K
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
471
473
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
710
1.43 K
deepin linux kernel
C
32
16
Ascend Extension for PyTorch
Python
763
972
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
2.27 K
681
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.11 K
1.15 K
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.04 K
272
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
2.18 K
231