OpenTSDB 数据存储详解

2022-02-10 00:00:00 数据 数据库 时序 时间 表里
本文于 vivo互联网技术 微信公众号
链接: mp.weixin.qq.com/s/qayK
作者:DuZhimin

随着互联网、尤其是物联网的发展,我们需要把各种类型的终端实时监测、检查与分析设备所采集、产生的数据记录下来,在有时间的坐标中将这些数据连点成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。

这些数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应的时间)、测点多信息量大(实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。

基于时间序列数据的特点,关系型数据库无法满足对时间序列数据的有效存储与处理,因此迫切需要一种专门针对时间序列数据来做优化处理的数据库系统。

一、简介

1、时序数据

时序数据是基于时间的一系列的数据。

2、时序数据库

时序数据库就是存放时序数据的数据库,并且需要支持时序数据的快速写入、持久化、多纬度的聚合查询等基本功能。

对比传统数据库仅仅记录了数据的当前值,时序数据库则记录了所有的历史数据。同时时序数据的查询也总是会带上时间作为过滤条件。

3、OpenTSDB

毫无遗漏的接收并存储大量的时间序列数据。

3.1、存储

  1. 无需转换,写的是什么数据存的就是什么数据
  2. 时序数据以毫秒的精度保存
  3. 保留原始数据

3.2、扩展性

  1. 运行在Hadoop 和 HBase之上
  2. 可扩展到每秒数百万次写入
  3. 可以通过添加节点扩容

3.3、读能力

  1. 直接通过内置的GUI来生成图表
  2. 还可以通过HTTP API查询数据
  3. 另外还可以使用开源的前端与其交互

4、OpenTSDB核心概念

我们来看一下这样一段信息:2019-12-5 22:31:21版本号为‘3.2.1’的某产品客户端的首页PV是1000W

  1. Metric:指标,即平时我们所说的监控项。譬如上面的PV
  2. Tags:维度,也即标签,在OpenTSDB里面,Tags由tagk和tagv组成的键值对,即tagk=takv。标签是用来描述Metric的,比如上面的某产品客户端的版本号 version=‘3.2.1’
  3. Value:一个Value表示一个metric的实际数值,比如:1000W
  4. Timestamp:即时间戳,用来描述Value是什么时候发生的:比如:2019-12-5 22:31:21
  5. Data Point:即某个Metric在某个时间点的数值,Data Point包括以下部分:Metric、Tags、Value、Timestamp
  6. 保存到OpenTSDB的数据就是无数个DataPoint

上面描述2019-12-5 22:31:21版本号为‘3.2.1’的某产品客户端的首页PV是1000W,就是1个DataPoint。

二、OpenTSDB的部署架构

1、架构图

2、说明

  1. OpenTSDB底层是使用HBase来存储数据的,也就是说搭建OpenTSDB之前,必须先搭建好HBase环境。
  2. OpenTSDB是由一系列的TSD和实用的命令行工具组成。
  3. 应用通过运行一个或多个tsd(Time Series Daemon, OpenTSDB的节点)来与OpenTSDB的交互。
  4. 每个TSD是独立的,没有master,没有共享状态,所以你可以运行尽可能多的 TSD 来处理工作负载。

三、HBase简介

从OpenTSDB的部署架构中我们看到OpenTSDB是建立在HBase之上的,那么HBase又是啥呢?为了更好的剖析OpenTSDB,这里我们简要介绍一下HBase。

1、HBase是一个高可靠性、强一致性、高性能、面向列、可伸缩、实时读写的分布式开源NoSQL数据库。

2、HBase是无模式数据库,只需要提前定义列簇,并不需要指定列限定符。同时它也是无类型数据库,所有数据都是按二进制字节方式存储的。

3、它把数据存储在表中,表按“行键,列簇,列限定符和时间版本”的四维坐标系来组织,也就是说如果要定位一个值,需要四个都才行。下面参考Excel来说明一下:

4、对 HBase 的操作和访问有 5 个基本方式,即 Get、Put、Delete 和 Scan 以及 Increment,HBase 基于非行键值查询的途径是通过带过滤器的扫描。

5、数据在HBase中的存储(物理上):


6、数据在HBase中的存储(逻辑上):

四、 支撑OpenTSDB运行的HBase表

如果你次用你的HBase实例运行OpenTSDB,需要创建必要的HBase表,OpenTSDB 运行仅仅需要四张表:tsdb, tsdb-uid, tsdb-tree 和 tsdb-meta,所有的DataPoint 数据都保存在这四张表中,建表语句如下:

1、tsdb-uid

create 'tsdb-uid',
{NAME => 'id', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'PREFIX_TREE'},
{NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'PREFIX_TREE'}

相关文章