OpenTSDB 生产应用与思考

OpenTSDB源码分析之TSDB-UID表操作(删除) 为了方便研究将tsdb-uid表的删除操作抽取出来,代码如下: package net.opentsdb.tools; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.ConcurrentHashMap; im 阅读详情

 

pursue5956 发布时间:2018-08-07 19:50:08 浏览1614 评论0

摘要: 在生产应用中采用 OpenTSDB ,实践与思考。

作者:陈杰,欢聚时代YY 基础架构部,数据库技术组,专注于HBase、Kafka,MySQL 等技术。

 

OpenTSDB 官方介绍

http://opentsdb.net/overview.html

这里就不翻译了。

 

 

cfece6ff577279dd271954b79d6482754088ffed

 

 

OpenTSDB 应用场景与数据量级

 

现在的时间序列数据库不仅仅可以提供原始数据的查询,而且要支持对原始数据的聚合能力,支持过滤、过滤之后的聚合计算,这些功能OpenTSDB 都有。架构设计也好,中间件也好,还是数据库,在实际生产场景中,都绕不开数据量级的考虑。OpenTSDB 在数据量小时是可用的,在千万级、亿级中提取几万条数据,比如某个指标半年内的5分钟级别的数据,还是很快响应的。但如果再提取多点数据,几十万,百万这样的量级,又或者提取后再做个聚合运算,OpenTSDB 就勉为其难啦,原因有几点:

 

【1】OpenTSDB 目前还是单点做聚合运算,我所知道的大的云商如阿里云HiTSDB、数据库在这点做了改造,解决了这个瓶颈。

 

【2】这样的量级数据从HBase 中提取到单节点内存中进行聚合运算,在资源消耗方面不可忽视。

 

【3】一个查询一旦提取的量级大,OpenTSDB 向HBase 发起RPC 请求(OpenTSDB 一次请求默认128行)次数也必然增加,十几秒、几十秒的响应时间,这就限制了它的应用场景。

 

架构中应用OpenTSDB 需要事先考虑

 

【1】OpenTSDB 只有4 张HBase 表,其中一张是存放数据。所有的数据都存放在一张表,这就意味应用在OpenTSDB 这个层级上是无法更小的粒度来区别对待不同业务(比如想把WebApp 性能指标放在一张表上,OS 性能指标放在一张表上),很难根据业务类别自身特点进行差异化对待后续的运维(比如不同类别设置不同的TTL,数据删除,迁移操作等等)。除非再部署多套OpenTSDB 来对待,这是另外一个话题。

 

【2】OpenTSDB 不支持二级索引,只有一个基于HBase的RowKey。结合业务场景的查询维度,设计好RowKey 是应用好OpenTSDB 的关键!提前评估好metric + tag 背后扫描的数据量。比如将high-cardinality tag 调整到metric 中,减少扫描的数据量。

 

【3】OpenTSDB 能实时聚合计算功能,但基于单点运算能力有限,建议这种聚合在入库阶段完成的。比如将1 分钟粒度聚合、5分钟粒度聚合提前通过KafkaStream,Spark 等运算,将聚会结果存入OpenTSDB 供查询。

 

【4】Tcollector采集数据上报给OpenTSDB,建议在中间加一层Kafka 。一来解偶两者之间的强依赖性,同时保存一段时间采集数据,在OpenTSDB、HBase 不可用(计划性运维、集群故障)时不至于丢失数据,对运维来说也增强了操作上的灵活性。二来可以对采集的原始数据进行二次加工再入OpenTSDB,如粒度聚合运算。

 

【5】关于salt 启用

时间序列数据的写入,写热点是一个不可规避的问题,当某一个metric 下数据点很多时,则该metric 很容易造成写入热点。从2.2 开始,OpenTSDB 采取了允许将metric 预分桶,预分桶后的变化就是在rowkey 前会拼上一个桶编号(bucket index)。预分桶后,可将某个热点metric 的写压力分散到多个桶中,避免了写热点的产生。而客户端查询OpenTSDB 一条数据,OpenTSDB 将这个请求拆成分桶数个查询到HBase,然后返回桶数个结果集到OpenTSDB 层做合并。对HBase 并发请求相应的也会桶数倍的扩大。

 

设计时需要结合查询场景,在查询性能和后期热点运维方面,做一个权衡考虑。比如说有个场景,在前端页面上要查询一个业务相关的性能指标(以业务为查询单元),查询的结果以多个图形方式展现出来,要求响应时间快。如果这是一个用户点击查询比较频繁的场景(并发量大),启动了salt,无形加大OpenTSDB和HBase的压力。如果完全关闭salt 的话,写热点问题就加大HBase 的运维难度,极端的话造成整个集群整体性能下降。如果写入吞吐量大的话,建议开启salt,但桶的个数不易太多,2-4个即可,默认是20 个桶。

 

比如查询一个业务AAA的数据库性能指标,如下图:

b4a99e85df0ef874d4bbafae1bccd93c604a9ea8

 

【6】OpenTSDB 提供三种途径写数据,分别是Telnet API, HTTP API, 批量导入。Telnet 读写是异步操作,但是返回的响应混乱的。HTTP API 是同步读写操作,成功与否能及时反馈,同时多个数据点能在单个端口发送,节省带宽。理论上Telnet 速度好于HTTP,但牺牲了数据是否成功写入的可靠性。在实际生产使用中,建议使用HTTP API,而Telnet API 用于运维。

 

【7】关于Cache


OpenTSDB 并没有内建的Cache 来存放数据,截止到2.3 还是只能依赖HBase 的Cache。

 

 OpenTSDB 部署与运维方面

 

【1】OpenTSDB 是Java 实现的,JVM 方面的参数设置、GC、运维管理同样是OpenTSDB 需要考虑的。

 

【2】生产部署时,往往是多台机器部署,每台机器部署多个实例,读写分离。比如查询实例端口一律使用4242,写数据实例端口一律使用4243,然后读写请求通过nginx + Consul 均衡到各个实例端口上。

 

【3】设置tsd.storage.hbase.prefetch_meta = true(默认是false),否则极端情况下会打爆hbase:meta 表请求。

 

【4】2.2 版本开始,tsd 写数据到HBase有两种方式,一种是每来一条数据append 到hbase。另一种是先缓存大量数据到TSD 的内存里,然后进行compaction,一次性写入。官方推荐Append 方式。相关参数tsd.storage.enable_appends = true 。

 

【5】TSDB 在每小时整点的时候将上个小时的数据读出来(get),然后compact 成一个row,写入(put)到HBase,然后删除(delete)原始数据,目的是减少存储消耗,增大了HBase 压力,性能平稳上出现一定的波动。

 

【6】若metric, tag含有中文,编译时指定字符集为UTF8。

 

【7】其他一些注意的参数:

tsd.storage.hbase.scanner.maxNumRow

tsd.query.timeout

 

 

OpenTSDB接口使用简介 一、简介 OpenTSDB提供基于HTTP的接口,以实现与外部系统的集成。 几乎所有OpenTSDB功能都可通过API访问,例如查询时间序列数据,管理元数据和存储数据点。 在使用各个接口之前,需要阅读相关API文档。 目前OpenTSDB已经与很多开源的监控系统集成,这种情况下,对OpenTSDB的接口就相对简单些,只需要掌握一些相对固定的查询接口就可以实现来巡检、自定制可视化界面的功能。 但如果是自行开发可视化界面和监控报警功能,就需要深入掌握OpenTSDB接口的请求方法和... 阅读详情

相关推荐

OpenTSDB删除数据

OpenTSDB删除数据

一杯咖啡半杯糖的博客 1209

OpenTSDB之HTTP请求接口、Java开发

HTTP API 由于OpenTSDB没有支持Java的SDK进行调用,所以基于Java开发OpenTSDB的调用将要依靠HTTP请求的方式进行。下面就先介绍下部分HTTP API的特性: 数据写入 /api/put 根据 url 参数的不同,可以选择是否获取详细的信息。 /api/put?summary // 返回失败和成功的个数 { "failed": 0, ...

zx711166的博客 8604

SillyTavern角色卡制作全攻略:如何用AI还原你喜欢的虚构角色(附三叶完整角色卡JSON)

本文详细介绍了如何使用SillyTavern制作高质量AI角色卡,以《你的名字》中的宫水三叶为例,从角色特征提取、对话风格捕捉到JSON结构优化,全面解析AI角色扮演的创作技巧。通过具体的写作示例和完整角色卡JSON,帮助二次元爱好者和同人创作者实现虚构角色的精准还原与生动互动。

pandas7gardener的博客 2130

OpenTSDB时序数据库部署

OpenTSDB时序数据库部署

u011250186的博客 662

Python实战:逐笔高频因子构建与回测全流程解析

本文详细解析了使用Python构建与回测逐笔高频因子的全流程。从逐笔数据的价值与清洗入手,通过实战代码演示了‘大买成交金额占比’因子的计算逻辑,并重点阐述了因子正交化处理的重要性以剔除风格影响。最后,提供了一个经典的分位数回测框架来验证因子有效性,并分享了数据质量、计算效率与过拟合等核心避坑指南。

grass的博客 391

postgresql 数据库 timescaledb 函数time_bucket_gapfill()报错解决及更换 license

最近在工作中使用postgresql 和 timescaledb 的time_bucket_gapfill()函数 报错,让更换license,在网上找了一大圈,没有找到,最后解决了这个问题,这篇文章记录我的解决办法查看timescaledb.license参数命令:show timescaledb.license;修改命令: 结果不行,报错如下:lter system set timescaledb.license=‘timescale’;那只能换包了如果出现上面那种情况,那我们只能先从官网上下载带 '

yang_z_1的博客 3249

OpenTSDB 生产应用与思考(转)

转自:https://yq.aliyun.com/articles/623275 OpenTSDB官方介绍 http://opentsdb.net/overview.html 这里就不翻译了。 OpenTSDB应用场景与数据量级 现在的时间序列数据库不仅仅可以提供原始数据的查询,而且要支持对原始数据的聚合能力,支持过滤、过滤之后的聚合计算,...

weixin_30917213的博客 99

西电计组实验一 存储器实验

计组实验报告 实验一 存储器实验——FPGA中LPM_ROM定制与读出实验 一.实验目的   1.掌握FPGA中lpm_ROM的设置,作为只读存储器ROM的工作特性和配置方法;   2.用文本编辑器编辑mif文件配置ROM,学习将程序代码以mif格式文件加载于lpm_ROM中;   3.在初始化存储器编辑窗口编辑mif文件配置ROM;   4.验证FPGA中mega_lpm_ROM的功能。 二.实验原理   ALTERA的FPGA中有许多可调用的LPM (Library Parameterized Modu

Polaris的博客 1万+

OpenTSDB简介

摘自opentsdb.net官方介绍:        OpenTSDB is a distributed, scalable TimeSeries Database (TSDB) written on top of HBase. OpenTSDB was written to address a commonneed: store, index and serve metrics collec

bingjie1217的专栏 4102

基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测

在量化投资领域,多因子选股模型通过挖掘市场数据中的有效信号来预测股票收益。其核心原理在于利用统计学与机器学习算法,从海量因子中识别出与未来收益具有稳定相关性的特征。这一技术的核心价值在于将主观投资决策转化为系统化、可重复的客观过程,从而在控制风险的前提下追求超额收益。其典型应用场景包括股票阿尔法策略构建、Smart Beta产品设计以及资产配置中的股票筛选环节。本文聚焦于如何通过信息系数(IC)这一关键指标,动态融合Ridge回归、MLP神经网络和随机森林等多个预测模型,构建一个能够自适应市场风格轮动的选股

weixin_34216614的博客 451

2025.06.18【转录组】|Ribo-seq/small RNA数据分析:rRNA和smRNA比对率统计全流程

本文介绍了一种自动化统计rRNA/smRNA比对率的方法,用于评估Ribo-seq或small RNA测序数据的质量。主要内容包括:分析原理(比对率定义、参考序列来源)、实践流程(构建索引、比对统计)以及结果可视化方法。通过Python和R脚本实现自动化处理,可生成汇总表格和柱状图。比对率结果能反映样品污染程度,建议控制在20%以下。该流程有助于快速评估测序质量,为后续分析提供可靠依据。文中还提供了常见问题解决方案和脚本示例,适用于生物信息学标准化质控环节。

1616

OpenTSDB 概述

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34275734的博客 246

SPICE仿真软件:HSPICE_(22).HSPICE仿真案例分析

通过上述案例分析,我们可以看到HSPICE仿真软件在不同电路类型和仿真场景中的应用。无论是简单的直流分析、交流分析还是复杂的暂态分析,HSPICE都能提供详细的仿真结果,帮助我们更好地理解和优化电路设计。希望这些案例能够为读者提供实用的参考和指导,进一步提升使用HSPICE进行电路仿真的能力。输入文件的编写:确保输入文件格式正确,使用注释来解释每一部分的内容。分析类型的选择:根据电路的特点选择合适的分析类型,如.DC.AC和.TRAN。输出结果的设置:使用.print命令来指定需要输出的节点电压和支路电流。

kkchenjj的博客 1309

过实例学习HBase:OpenTSDB

OpenTSDB概述 OpenTSDB是一种基于HBase编写的分布式、可扩展的时间序列数据库。OpenTSDB可以用来处理一种通用需求:存储、索引和服务从大规模计算机系统(网络设备、操作系统、应用系统)采集来的参数数据,并且使这些数据易于访问和可视化。 因为OpenTSDB解决了基础架构监控的普遍性问题,对于我们这本注重实战的书而言它是一个了不起的项目。如果你开发过生产系统,你会知道

codepython的专栏 2206

波浪补偿控制(AHC)之波浪发生器(CODESYS完整源代码)

波浪发生器平台详细算法和结构介绍请参看下面博客文章:CODESYS平台如何建立FC和FB,请参看下面博客文章:

RXXW_Dor的博客 401

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

通过实例学习HBase:OpenTSDB

 OpenTSDB概述 OpenTSDB是一种基于HBase编写的分布式、可扩展的时间序列数据库。OpenTSDB可以用来处理一种通用需求:存储、索引和服务从大规模计算机系统(网络设备、操作系统、应用系统)采集来的参数数据,并且使这些数据易于访问和可视化。 因为OpenTSDB解决了基础架构监控的普遍性问题,对于我们这本注重实战的书而言它是一个了不起的项目。如果你开发过生产系统,你会知道

cxzhq2002的杂记 905

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java工程师进阶:从CRUD到数据架构,掌握MySQL与Redis深度应用

最近和几位做后端的朋友聊天,发现一个挺有意思的现象:大家聚在一起,话题从技术栈聊到职业发展,最后总会绕回一个共同的焦虑——“Java是不是不行了?” 这种声音,在技术社区、社交媒体上似乎也越来越多。有人觉得是市场饱和,有人归咎于新技术冲击,还有不少人开始怀疑自己是不是技术不行了。 但如果你仔细观察,会发现一个更值得玩味的细节:那些喊着“Java已死”的人,和那些拿着高薪Offer、在核心业务线里稳扎稳打的Java工程师,他们之间的差距,往往不是体现在对某个框架的熟练度,或者能背出多少道八股文。真正的分水岭,

weixin_30562507的博客 314

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大数据与AI毕业设计选题指南:从场景到技术的创新实践

在计算机科学领域,数据处理与智能分析是两大核心支柱。数据处理技术经历了从离线批处理到实时流计算的演进,其核心原理在于通过分布式架构高效管理海量数据,技术价值在于将原始数据转化为可用的信息资产。人工智能技术,特别是机器学习和深度学习,其原理是通过算法模型从数据中学习规律,技术价值在于实现预测、分类和决策自动化。这些技术广泛应用于金融风控、智能推荐、工业物联网等场景。本文聚焦于毕业设计场景,探讨如何将大数据处理框架(如Flink、Spark)与人工智能模型(如LLM、CV模型)进行有机结合,通过具体、独特的选题

weixin_30617737的博客 434

大数据入门基础学习线路规划图

大数据需要学习什么?很多人问过我这个问题。每一次回答完都觉得自己讲得太片面了,总是没有一个合适的契机去好好总结这些内容,直到开始写这篇东西。大数据是近五年兴起的行业,发展迅速,很多技术经过这些年的迭代也变得比较成熟了,同时新的东西也不断涌现,想要保持自己竞争力的唯一办法就是不断学习。 思维导图 下面的是我整理的一张思维导图,内容分成几大块,包括了分布式计算与查询,分布式调度与管理,持久化存储,...

大数据工程师 535

SentinelBench:构建长期监控代理的可靠性基准测试框架

在可观测性领域,监控代理是负责采集指标、日志和追踪数据的核心组件。其工作原理通常包括数据采集、处理、缓冲和传输。对于需要7x24小时不间断运行的生产系统而言,监控代理的长期可靠性、资源消耗的稳定性与故障恢复能力,直接关系到整个监控链条的数据保真度和运维效率。传统的性能基准测试往往聚焦短期峰值,难以评估内存泄漏、性能衰减等“慢性”问题。SentinelBench 框架正是为了解决这一痛点而设计,它通过模拟周期性负载、注入基础设施扰动(如网络中断),并长期追踪内存增长趋势、数据完整性等关键指标,为监控代理在真实

weixin_30740295的博客 404

opentsdb遇到的坑和优化建议

opentsdb是基于hbase的时间序列数据库,数据库能力依赖于hbase集群,是一个比较重型的监控解决方案。网上介绍比较多,但大多只是粗浅的介绍,在实际使用了一段时间后也遇到了一些坑和一些使用方法,跟大家分享下。   1.opentsdb能做什么    一个完善的监控系统应该大致包括收集,存储,展示,报警这四大块。    opentsdb主要功能还是一个时间数据库,存储收集到的监控数据,

wyfk2013的博客 8632

OpenTSDB 使用时 推荐配置

OpenTSDB所有的配置都在 link. 这里列出来的配置基本都有默认值,但是有些需要根据环境和性能做出改变,具体如下表: 配置项 默认值 描述 修改值 tsd.core.preload_uid_cache false 是否在TSD启动的时候,预热UID缓存数据,为了提升性能,需要开启 true tsd.core.auto_create_metrics fal

MT——黑板报 6720

Opentsdb 开发和使用笔记

参见有道笔记分享:http://note.youdao.com/share/?id=585289eb96601312539a1bf94fbb6be2&type=note Opentsdb 命令行 查询:     scan 1427817599 1456675199000 avg easypec.order.ordercostweek type=week 删除:     scan

comenglish的专栏 8804
上一篇: Java调用Restful API接口几种方式
下一篇: 通过例子剖析 OpenTSDB 的 Rowkey 及列名设计
王树民
博客等级 码龄10年 912粉丝 560原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值