apache druid(时序数据库)集群搭建

apache druid(时序数据库)集群搭建,第1张

配置完成后,由druid的query节点的8888端口提供可视化页面,可以通过nginx来反向代理103210240:8888和103210241:8888

注意:启动完成后要通过exit退出服务器连接,不能直接关闭窗口或断开连接,不然druid的后台进程也会被关闭

现在常用的开源数据连接池主要有c3p0、dbcp、proxool三种,其中:

Spring 推荐使用dbcp;

Hibernate 推荐使用c3p0和proxool;

1、 DBCP:apache

DBCP(DataBase connection pool)数据库连接池。是apache上的一个 java连接池项目,也是 tomcat使用的连接池组件。单独使用dbcp需要3个包:common-dbcpjar,common-pooljar,common-collectionsjar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲连接的功能。

2、 C3P0:

C3P0是一个开源的jdbc连接池,它实现了数据源和jndi绑定,支持jdbc3规范和jdbc2的标准扩展。c3p0是异步 *** 作的,缓慢的jdbc *** 作通过帮助进程完成。扩展这些 *** 作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。

3、 Proxool:Sourceforge

Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。

对比:

1> 相同时间内同等量的线程数和循环次数下:通过对三个连接池的三个标志性性能测试参数(Average,median,90%Line)进行比较发现:性能dbcp<=c3p0<proxool;

2> 不同情况下的同一数据库连接池测试:通过观察 Average,median,90%Line三个参数发

现三个连接池的稳定性(三种连接池的三个测试参数的变化情况)依次:稳定性dbcp>=c3p0>proxool。

结论:

通过对三种数据库连接池的性能测试发现,proxool和 c3p0能够更好的支持高并发,但是在稳定性方面略逊于 dpcp;

苏宁八大产业,每个产业有自己的数据集市,每个数据集市有自己的维度表,没有统一的维度管理(包括管理规范和系统支撑)。业务痛点包含以下几个方面:

建立统一的维度管理系统,实现对维度信息的统一管控,并为集团的数据产品提供统一的维度数据服务,包含维度开发管理,维度信息管理及维度数据服务三个方面。

维度数据

如上图所示,ETL将采集的数据,进行数据清洗之后存储到维度数据仓库(磐石)中,维度系统再将维度数据仓库中的数据同步达到维度库系统。

维度数据存储方式:维度数据一般以一百万的数据量作为分割点,一百万以上数据量的维度采用的存储是HBASE,一百万以下的数据采用的存储是MYSQL。

维度数据同步方式:存储到HBASE的维度数据采用的是BULKLOAD导入,存储到MYSQL的维度数据采用的是SPARKSQL+RDD写入。针对数据同步都已经实现通过页面配置任务的方式一键同步,节省人工。

为什么采用这种存储方式?

1, 针对数据量的大小采用不同的存储引擎,节约存储资源,提高维度服务的稳定性。

2, 实时指标的计算:OALP需要关联维度表和事实表做指标数据加速(实时计算指标数据)。这种需要实时的查询维度表的所有维度属性,调用量非常庞大,所以采用了直接查询HBASE的方式。

3, 维度需要提供基于维度值ID查询维度值名称的服务(包括批量精确查询和模糊查询),HBASE在精确查询上性能较高。MYSQL由于数据量不大,可以再加一层分布式缓存,提高精确查询维度值的性能。

维度建模

1, 选择业务过程

根据业务场景以及可用数据源

2, 声明粒度

根据事实表及应用场景,确定汇总粒度,一般尽可能的用最细粒度

3, 确定维度

根据确定的粒度,定义对应的维度,最细粒度,也是最低层次的维度

4, 确定事实

确认将哪些事实放到事实表中,维度表只是做关联,不做维度数据的查询服务。

维度定义

1 当增加新的维度时,编码号将在已用号码的基础上递增,四位十进制编码号不能满足需求时,可增加编码号长度为五位十进制数,以此类推。

2 当删除已有的维度时,其编码号将不再利用。

3 当修改已有的维度时,其编码号不变。

4 当拆分已有的维度或合并两个及两个以上的维度时(数据应用场景需要),其编码号的使用原则按照删除原维度,并新增拆分/合并后的维度执行。

维度管理

维度:目前维度平台支持快速定义维度,通过设置维度的基本信息,选择维度映射的维度表,做好维度与维度表的映射,设定维度的一些特性(布尔维度,时间维度,杂项维度等),检测维度的定义结果。达到了让业务人员能够只是通过页面 *** 作就可以制定需要的维度。

维度表:数据开发人员可以通过维度库平台定义维度表,定义好之后可以集成数据仓库的同步任务一键将仓库的数据同步到维度表中,将维度表与维度做映射关系。

维度层级:维度库平台支持定义维度层级,只要是维度库平台上有的维度表并且做好维度与维度的映射关系之后,就可以定义需要的维度层级,根据维度层级提供维度值的上卷下钻查询服务。

维度血缘:提供了维度,指标,报表的血缘关系,以及还准备做的维度数据的血缘,维度,指标,报表调用次数的血缘等等。

维度服务

1 维度服务调用申请:

调用维度服务,需要在维度库管理系统中申请调用权限。等维度管理系统授权之后,生成维度服务调用授权码,在调用维度服务的时候带上维度服务调用授权码,维度服务会根据授权码判定是否有访问权限。

2 维度系统提供的服务:

1,对存储在HBASE的维度表,我们又加了一层存储到ELASTICSEARCH(提供维度值的模糊查询服务)

2,针对负载较高的HBASE表,加了一层本地缓存,解决热点问题。

3,对存储在MYSQL的维度表,我们又加了一层存储到分布式缓存ZEDIS(提供维度值精确查询服务)。提供了定时或者手动刷新缓存数据的功能,以及缓存数据的监控机制。

监控分析

由于维度服务的调用量是亿万级别的,系统的监控统计,采用的是Log4j+kafka+druid的架构,如下图所示,应用将调用日志采用log4j- KafkaLog4jAppender写入kafka中,再将kafka与druid集成,准实时的输入druid中,业务基于druid做统计分析,查看维度服务调用成功或失败的情况。

除了维度服务的调用监控,平台还有针对维度值的数据量监控(主要监控暴增或者突然没有维度数据的情况),维度值数据质量的监控(根据维度表和事实表做数据比对,分析维度值数据的差异情况)。维度数据同步任务的监控(每个维度表的数据同步情况监控,异常告警到具体的任务负责人)。通过各种有效的监控手段,来提升维度服务的稳定性和准确性。

1 未来平台会更加的完善,会有越来越多的维度在平台上建设,提供更加稳定和高效的维度查询服务。

2 能够支持更多个性化的维度,能够支持维度的数据版本(例如过去一段时间的维度值),支撑全集团所有数据产品的维度调用服务,将平台打造成苏宁主数据服务的航空母舰。

3 通过维度数据资产体系的建立,实现集团一切业务数据化,连接打通数据孤岛,驱动一切数据业务化,助力企业数字化转型,让数据做到真正意义上的产生价值。

4 通过提供各种维度数据支持数据产品及各类应用产品,帮助各岗位用户在日常经营决策中做出正确决策。

目前平台的现状及以后的规划

1, 完善系统监控功能点:缓存任务较多,没有有效的监控,告警机制。

2, 完善业务监控功能点:数据量监控,数据异常监控,告警功能

3, 落地维度新增、变更、下线全流程审核管理功能

4, 完善应用层的维度、指标、报表数据链路的血缘分析图谱,全方位透析资产,

5, 打通全链路维度变更通知的消息机制,降低数据链路变更带来的风险,

6, 多系统用户资源隔离、限流,保障多个部门在使用和体验上的一致性,

7, 支持用户自定义维度、完善个人工作台,基于通用维度进行维度的衍生,

8, 维度门户的建设,将业务端和管理端进行隔离,提升用户体验

画外音:目前Druid在开源中国举办的2019年度最受欢迎中国开源软件中排名第7名,支持Druid的朋友可以去投票哇。 2019年度最受欢迎中国开源软件

maxWait :从连接池中获取连接的最大等待时间,单位ms,默认-1,即会一直等待下去

笔者在使用Druid时都会设置这个参数,这样如果是获取连接超时,更容易从日志中获取调用失败的原因。

如果超时,Druid会抛出以下异常

在DruidDataSource中的getConnectionInternal方法使用到了maxWait

maxWait默认是不超时,即如果连接池没有空闲连接,则会一直等待下去,但是一般的接口都是有超时时间的,如果接口超时,不方便定位出来是获取不到连接导致的,最好设置maxWait,并且小于接口的超时时间。

Druid连接池及监控在Spring配置如下:

[html] view plaincopy

<bean id="dataSource" class="comalibabadruidpoolDruidDataSource" init-method="init" destroy-method="close">

<!-- 基本属性 url、user、password -->

<property name="url" value="${jdbc_url}" />

<property name="username" value="${jdbc_user}" />

<property name="password" value="${jdbc_password}" />

<!-- 配置初始化大小、最小、最大 -->

<property name="initialSize" value="1" />

<property name="minIdle" value="1" />

<property name="maxActive" value="20" />

<!-- 配置获取连接等待超时的时间 -->

<property name="maxWait" value="60000" />

<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->

<property name="timeBetweenEvictionRunsMillis" value="60000" />

<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->

<property name="minEvictableIdleTimeMillis" value="300000" />

<property name="validationQuery" value="SELECT 'x'" />

<property name="testWhileIdle" value="true" />

<property name="testOnBorrow" value="false" />

<property name="testOnReturn" value="false" />

<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->

<property name="poolPreparedStatements" value="true" />

<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->

<property name="filters" value="stat" />

</bean>

2 只要配置initialSize,maxActive就可以,目前这样的配置已经能够使用连接池,加入其实配置性能不好,官方文档里也不没加其它属性,连接池jar包免费下载。

以上就是关于apache druid(时序数据库)集群搭建全部的内容,包括:apache druid(时序数据库)集群搭建、怎么用druid连接池连接mysql、大数据治理平台——维度管理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10165249.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存