apache-druid在大数据行业应用中的查询性能优化

介绍一下Druild,并从Twitter大数据团队分析如何应用 Druid 分析 ZB 级实时数据? 或许很多同学都还没有用过Druid,那么我们先简单介绍一下Druid,然后由浅入深的进行分析! Druild Druid 是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析。尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid 仍能够保持 100% 正常运行。 官网地址:https://druid.apache.o... 阅读详情

1.Coordinator瓶颈

•  实时索引任务经常被阻塞

Druid的Handoff总结如下,索引节点将Segment持久化到HDFS,然后Coordinator制定调度策略,将计划发布到ZooKeeper。历史节点从ZooKeeper获取计划后异步地加载Segment。当历史节点加载完Segment索引节点的Handoff过程才结束。这个过程中,由于Coordinator制定计划是单线程串行的,如果一次触发了大量Segment加载,执行计划制定就会很慢,从而会阻塞Handoff过程,进而索引节点所有的Slot均会被用满。

而以下过程均会触发大量Segment加载,在解决Coordinator调度性能瓶颈前, 很容易引发故障:

• 历史节点因硬件故障、GC、主动运维退出

• 调整Segment副本数、保留规则

通过火焰图对Coordinator进行Profiling最终定位了问题,如下图所示,将最耗时部分放大出来,是负载均衡策略对每个Segment要选择一个最佳的服务器。阅读源码可知其过程为,加载Segment X,需要计算它和服务器的每个Segment Y的代价Cost(X, Y),其和为服务器和Segment X的代价。假设集群有N个Segment,M个Historical节点,则一个节点宕机,有N/M个Segment需要加载,每个Segment都和剩余的N个节点计算一次代价,调度耗时和N成平方关系。

一个节点宕机调度耗时 = (N/M)个Segment * 每个Segment调度耗时 = (N/M) * N = O(N^2)

分析清楚原因后,很容易了解到Druid新版本提供了新的负载均衡策略(druid.coordinator.balancer.strategy = CachingCostBalancerStrategy),应用后调度性能提升了10000倍,原先一个历史节点宕机会阻塞Coordinator1小时到2小时,现在30秒内即可完成。

2.Overlord瓶颈

Overlord性能慢,我们发现升级到0.14后Overlord API性能较差,导致的后果是索引任务概率性因调用API超时而失败。通过Jstack分析,看到大部分的HTTP线程均为阻塞态,结合代码分析,定位到API慢的原因,如左图所示,Tranquility会定期调用Overlord API,获取所有RunningTasks,Overlord内部维护了和MySQL的连接池,该连接池默认值为8,该默认值值过小,阻塞了API处理。解决方法是增大dbcp连接池大小。druid.metadata.storage.connector.dbcp.maxTotal = 64

调整后,Overlord性能得到了大幅提升,Overlord页面打开从几十秒降低到了几秒。但意料之外的事情发生了,API处理能力增加带来了CPU的飙升,如右图所示,并且随着Tranquility任务增加CPU逐渐打满,Overlord页面性能又逐步降低。通过火焰图Profile可知,CPU主要花费在getRunningTasks的处理过程,进一步分析Tranquility源码后得知,Tranquility有一个配置项(druidBeam.overlordPollPeriod)可以控制Tranquility轮询该API的间隔,增大该间隔后问题得到了暂时缓解,但根本的解决方案还是将任务切换为KIS模式。 

3.索引成本

Druid索引成本过高。基于Druid官方文档,一个Druid索引任务需要3个核,一个核用于索引消息,一个核用于处理查询,一个核用于Handoff过程。我们采用该建议配置索引任务,压测结果是3核配置下能够支撑百万/分钟的摄入。

在最初,集群所有的索引任务都是统一配置,但实际使用过程中,大部分的索引任务根本达不到百万/分钟的消息量,造成了资源大量浪费。如下图所示,我们按照索引任务的内存使用量从高到低排序,9 GB为默认配置,80%的任务利用率低于1/3,即3 GB。我们以3 GB绘制一条横线,以内存使用最接近的任务绘制一条竖线,定义A为实际使用的内存,B为第二象限空白部分,C为第四象限空白部分,D为第一象限空白部分,则浪费的资源 = (B+C+D)的面积。

我们思考能否采取索引任务分级的策略,定义一种新的类型索引节点 – Tiny节点。Tiny节点配置改为1 core\3GB,能够满足80%小任务的资源需求,而default节点继续使用 3 core9 GB的配置,满足20%大任务的需求,在这种新的配置下,浪费的资源 = (B + C)的面积,D这一大块被省下来。简单地计算可知,在不增加机器的情况下,总Slots能够增加1倍。

默认slot资源需求为1,Tiny为1/3,调整后单位任务需要的资源 = 0.2 * 1 + 0.8 * 1/3 = 0.5

在实际操作层面,还需解决一个问题,即如何把Datasource指定给合适的Worker节点。在Druid低版本中,需要通过配置文件将每一个Datasource和Worker节点进行关联,假设有N个Datasource,M个Worker节点,这种配置的复杂度为 N * M,且无法较好地处理Worker节点负载均衡,Worker宕机等场景。在Druid 0.17中,引入了节点Category概念,只需将Datasource关联特定的Category,再将Category和Worker绑定,新的配置方法有2个Category,复杂度 =  2 * N + 2 * M。

Spark与Druid集成:实时OLAP分析系统构建实战 在当今数据驱动决策的时代,企业对实时数据分析的需求日益迫切。Apache Spark作为强大的分布式计算框架,与Druid这一高性能实时分析数据库的集成,为构建实时OLAP系统提供了理想解决方案。本文将深入探讨Spark与Druid的集成原理,提供完整的系统构建指南,从环境搭建到项目实战,再到性能优化,全方位解析如何构建一个高效、可扩展的实时OLAP分析系统。无论您是数据工程师、架构师还是数据分析人员,本文都将为您提供宝贵的实践经验和技术洞见。 阅读详情

相关推荐

大数据领域的Druid实时分析

本文旨在全面介绍Apache Druid这一专为实时分析设计的分布式数据存储系统。我们将深入探讨Druid的架构设计、核心功能、性能特点以及实际应用场景,帮助读者理解Druid如何在大数据实时分析领域发挥独特价值。文章首先介绍Druid的基本概念和架构,然后深入其核心技术原理,包括数据摄取、存储和查询机制。接着通过实际案例展示Druid的应用,最后讨论其未来发展趋势。Druid:一个开源的分布式实时分析数据存储系统Segment:Druid中的数据存储单元,包含特定时间范围内的数据。

架构师的AI之路,分享AI应用开发架构的学习与实践。 443

记一次 Apache Druid 查询速度优化

最近产品中有一个Druid的查询大概5s左右的响应,需要优化一下,这篇博文主要记录的就是这次优化的思路和具体方案 背景 表的格式为parquet,数据行数1400w+(由于我们的数据都是离线抽取的,已经做好聚合了),timestamp(所有数据都一样) segmentGranularity.period:P1D 分析步骤 其实就以我们本身的数据条数,应该不会造成这样的慢查询的,而且其他组的数据量也...

Levin的技术工厂 5081

Apache Druid:高性能实时分析数据库-开源

Druid 专为快速临时分析、即时数据可见性或支持高并发性很重要的工作流而设计。 因此,Druid 通常用于为需要交互式、一致用户体验的 UI 提供动力。 Druid 从 Kafka 和 Amazon Kinesis 等消息总线流式传输数据,并从 HDFS 和 Amazon S3 等数据湖批量加载文件。 Druid 支持最流行的结构化和半结构化数据文件格式。 Druid 已经过基准测试,其性能大大优于传统解决方案。 Druid 结合了新颖的存储思想、索引结构以及精确和近似查询,可在一秒内返回大多数结果。 Druid 为点击流、APM、供应链、网络遥测、数字营销、风险/欺诈和许多其他类型的数据解锁了新型查询和工作流程。 Druid 专为对实时和历史数据进行快速、即席查询而构建。

druid.io index_realtime任务的hand off:仍然是源码+log说清楚

目录前言源码 + log 说明流程总结 前言 之前的博文:Druid.io index_realtime实时任务源码分析 介绍了整个index_realtime任务运行的流程,但是对于某些细节还是没有从源码上分析的很透彻,本文将主要对hand off这个阶段进行主要分析,说清楚什么是hand off阶段,以及这个阶段做了什么工作 可以先看下官网文档介绍:https://druid.apache.org/docs/0.20.0/design/architecture.html#indexing-and-han

master-dragon的专栏 1117

Druid源码(apache-druid-0.22.1-src.tar.gz)

Druid源码(apache-druid-0.22.1-src.tar.gz)

BurpSuit在不同浏览器中配置代理

文章通过分享各大浏览器如何设置代理的知识,帮助初学者快速掌握代理配置相关技能。

北冥同学的成长记录笔记 1万+

Apache Druid查询引擎与性能优化策略

Apache Druid查询引擎与性能优化策略 【免费下载链接】druid Apache Druid: a high performance real-time analytics database. 项目地址: https://...

gitblog_00516的博客 505

树莓派5外接RTX显卡:从PCIe到驱动的完整踩坑指南

在ARM架构与GPU加速的交汇点,树莓派5凭借其PCIe接口为DIY爱好者打开了外接独立显卡的大门。然而,PCIe x1的带宽限制、供电差异以及NVIDIA驱动在ARM Linux上的兼容性,使得这一组合成为一场高强度的系统底层排错训练。从理解PCIe总线原理、驱动加载机制到CUDA环境配置,每一步都充满挑战。本文以工程实践视角,梳理外接RTX显卡的完整流程、常见故障与性能瓶颈,并探讨其在边缘计算、AI推理等场景下的真实价值,帮助你理性评估这一实验性方案的可行性与替代路径。

chubaisheng8627的博客 351

Apache Druid查询计划深度解析:高性能实时数据库的查询执行机制

Apache Druid是一个专为高性能实时分析设计的高性能实时数据库,其独特的查询计划机制是其能够在海量数据上实现亚秒级查询响应的关键。本文将深入解析Druid的查询执行机制,帮助您理解这个强大数据库的核心工作原理。 ## 🔍 Druid查询计划的核心架构 Apache Druid的查询处理采用分布式架构,由多个组件协同工作。当查询请求到达时,系统会经过以下关键步骤: 1. **查询接收

gitblog_00218的博客 741

AutoDock Vina 对接计算(大批量)

AutoDock Vina是一种用于计算生物分子之间相互作用的计算工具,主要用于蛋白质和小分子(通常是潜在药物分子)之间的对接研究。它可以用于虚拟筛选、药物设计和生物分子结合位点的预测等多个应用领域。

MurphyStar的博客 1万+

Lora无线温湿度传感器方案

综上所述,Lora无线温湿度传感器以其长距离传输、低功耗、高稳定性、精准测量、无线传输以及广泛的应用场景等特点,在环境监测领域展现出了强大的竞争力和广泛的应用前景。Lora无线温湿度传感器广泛应用于各种需要远程监控和数据采集的场景,如仓储、农业、机房、楼宇、交通、工业、矿产、电力等领域。Lora无线温湿度传感器是一种采用Lora无线通信技术进行数据传输的温湿度监测设备。四、产品参数(以某款工业级Lora温湿度传感器为例)

weixin_46632654的博客 758

Apache Druid JDBC 连接实战:Java 11 + Avatica 1.13.0 查询性能与连接池配置

本文详细介绍了如何在Java 11环境中通过Avatica 1.13.0实现Apache Druid的JDBC连接,并优化查询性能与连接池配置。文章涵盖了环境准备、高性能连接池实现、查询性能优化实战以及生产环境问题排查,为企业级实时分析应用提供了专业级解决方案。

weixin_30520015的博客 465

PCB压合原理与工艺全流程深度解析

PCB压合是多层印制电路板制造中的核心工序,其本质并非简单物理叠加,而是高分子树脂流动、玻璃布应力释放、铜箔热膨胀及界面能调控的协同过程。理解压合原理,需掌握温度-压力-时间三维曲线动态关系;优化工艺流程,须兼顾叠板精度、热压参数匹配与冷却策略;关键影响因素如半固化片(PP)选型、铜箔表面处理、设备温场均匀性、结构对称性、环境湿度及操作手法,共同决定层间结合力、翘曲度与孔壁质量。本文围绕PCB压合原理、工艺流程、关键影响因素三大维度展开,融合IPC标准、实测数据与产线案例,为工艺工程师、NPI人员及设备维护

weixin_29191081的博客 256

从实时分析到数据归档:Apache Druid Parquet/CSV格式导出全指南

你是否还在为Apache Druid(德鲁伊)的数据导出发愁?报表系统需要CSV格式的历史数据?数据湖要求Parquet格式的批量导入?本文将带你通过3个实用场景,掌握从Druid导出Parquet/CSV文件的完整流程,解决实时分析数据落地的最后一公里问题。读完本文,你将获得:Parquet/CSV两种格式的导出方案、嵌套数据处理技巧、性能优化参数配置,以及完整的操作示例。 ## 导出方案概览...

gitblog_00377的博客 794

Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(10) C++ 前置后置增减运算符重载形式与比较

C语言的++、–运算符在此不讨论。 文章目录1、前置后置增减运算符重载的形式2、前置和后置运算符的性能比较 1、前置后置增减运算符重载的形式 自增运算符“++”和自减运算符“–”分别包含两个版本。即运算符前置形式(如 ++x)和运算符后置形式(如 x++),这两者进行的操作是不一样的。因此,当我们在对这两个运算符进行重载时,就必须区分前置和后置形式。C++根据参数的个数来区分前置和后置形式。如果按照通常的方法来重载 ++ 运算符(即作为成员函数重载时不带参数,或者作为非成员函数重载时带有一个参数),那么重载

二进制君 5831

FPGA实现CAN接口(SJA1000)

学无止境,善于积累,每天积累一点点,成功就在眼前,加油! 1 CAN总线简介 CAN(Controller Area Network,控制器局域网 )总线是一个多主机异步串行总线,也是国际上应用最广泛的现场总线之一。在现场总线中,它是惟一被ISO国际标准化组织批准的现场总线。由于其成本低、容错能力强、支持分布式控制、通信速率高等优点在汽车、工业控制、航天等领域得到广泛应用。特别是由于CAN总线具有...

m0_46498597的博客 1万+

解密Apache Doris JDBC:3大性能优化策略让查询速度提升300%

Apache Doris作为一款高性能的统一分析型数据库,其JDBC连接能力为开发者提供了无缝集成企业应用的桥梁。你是否曾遇到过传统数据库在PB级数据分析时的性能瓶颈?本文将带你深入探索Doris JDBC的核心优化技巧,从连接管理到查询调优,全面提升你的数据分析应用性能。 ## 为什么选择Apache Doris JDBC连接方案? 传统MySQL协议兼容性让Doris能够无缝对接现有生态,

gitblog_00820的博客 1165

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Apache Druid教程:使用Theta Sketch进行近似计数分析

在实时数据分析领域,精确计算唯一值(如独立访客数)一直是个挑战。传统方法需要扫描全部原始数据,这在数据量巨大时会严重影响查询性能。Apache Druid通过Theta Sketch技术提供了一种高效的近似解决方案,本文将深入解析其原理和应用。 ## 核心问题:大数据场景下的基数统计 假设我们需要分析电视剧观看情况: - 第一集有1000名独立观众 - 第二集有800名独立观众 传统方法无法

gitblog_00667的博客 377

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Apache Calcite 终极指南:如何快速掌握大数据SQL优化核心利器

Apache Calcite 是一个强大的开源框架,专注于数据管理、SQL解析和查询优化。作为大数据生态系统中的关键组件,Calcite 提供了灵活的SQL处理能力,让开发者能够轻松构建自定义的数据查询引擎。无论你是数据分析师、后端工程师还是架构师,掌握Calcite都将为你的数据处理工作带来革命性的提升。🚀 ## 📊 什么是 Apache Calcite? Apache Calcite

gitblog_00992的博客 865

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何用 Czkawka 快速做磁盘清理:免费找出重复文件、相似图片与空文件夹

Czkawka 是一款用 Rust 编写的免费磁盘清理工具,支持 Windows、Linux 与 macOS,全程离线运行。它负责找出重复文件、相似图片、空文件夹、大文件这类冗余内容,无广告、不收集任何使用数据。 ## 它适合谁 🎯 如果你的电脑长期没做过大扫除——下载目录越堆越多、照片库里同一张图存了好几个版本、各种软件退场后留下一堆空壳目录——它就是干这个的。装完点开就能用,不需要账号,

gitblog_00360的博客 985

亿级数据秒级去重:Apache Druid DataSketches扩展实战指南

在大数据分析场景中,精准去重计数(Distinct Count)往往意味着高昂的计算成本。当数据量达到亿级规模时,传统精确去重方案需要扫描全量数据,查询延迟常达分钟级,严重影响业务实时决策。Apache Druid通过集成[Apache DataSketches](https://datasketches.apache.org/)(概率数据结构库),提供了近似去重能力,在保证误差率低于1%的前提下...

gitblog_00120的博客 1031

使用Apache Superset连接Druid进行实时数据可视化

主题:使用Apache Superset连接Druid进行实时数据可视化文章概要:Apache Druid 是一个高性能的实时分析数据库,特别适用于实时大数据的摄取和查询。Druid 能够在低延迟的情况下处理大量流式数据,并提供强大的查询能力。Apache Superset 是一个开源的、强大的数据可视化平台,将 Drui...

weixin_34069265的博客 474

如何快速上手Turnilo:从零开始的Druid数据探索指南 [特殊字符]

想要快速掌握**Turnilo**这个强大的**Druid数据可视化工具**吗?本文将为你提供完整的入门指南,让你在短时间内学会使用这个开源**商业智能平台**进行高效的数据探索和分析。无论你是数据分析师还是业务人员,都能通过Turnilo的直观界面轻松驾驭海量数据。 ## 什么是Turnilo?🤔 **Turnilo**是一个专为Apache Druid设计的**商业智能、数据探索和可视化

gitblog_00156的博客 740

Turnilo与Druid集成实战:完整配置与优化指南

在当今数据驱动的时代,企业需要强大的商业智能工具来探索和可视化海量数据。Turnilo作为一款专为Apache Druid设计的开源数据探索和可视化Web应用程序,提供了直观的拖放式界面,让非技术用户也能轻松进行数据分析。本文将为您提供Turnilo与Druid集成的完整实战指南,涵盖从基础配置到高级优化的全方位内容。 ## 🚀 Turnilo与Druid集成快速入门 ### 什么是Turn

gitblog_01174的博客 478

Turnilo性能优化:提升大数据集探索效率的8个方法

Turnilo是一款面向Druid的商业智能、数据探索与可视化Web应用,能帮助用户高效分析和展示大规模数据集。然而,当处理海量数据时,系统性能可能会受到影响。本文将分享8个实用方法,帮助你优化Turnilo性能,提升大数据集探索效率。 ## 1. 优化数据查询策略 数据查询是影响Turnilo性能的关键环节。合理设计查询语句可以显著减少数据传输量和处理时间。在Turnilo中,你可以通过限制

gitblog_01063的博客 364
上一篇: IDEA快捷键集合
LazyTojava
博客等级 码龄10年 1粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值