或许很多同学都还没有用过Druid,那么我们先简单介绍一下Druid,然后由浅入深的进行分析!

Druild

Druid 是一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析。尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid 仍能够保持 100% 正常运行。
官网地址:https://druid.apache.org/

基本特点

Apache Druid 具有以下特点:

1.亚秒级 OLAP 查询,包括多维过滤、Ad-hoc 的属性分组、快速聚合数据等等。
2.实时的数据消费,真正做到数据摄入实时、查询结果实时。
3.高效的多租户能力,最高可以做到几千用户同时在线查询。
4.扩展性强,支持 PB 级数据、千亿级事件快速处理,支持每秒数千查询并发。
5.极高的高可用保障,支持滚动升级。

应用场景

实时数据分析是 Apache Druid 最典型的使用场景。该场景涵盖的面很广,例如:

1.实时指标监控
2.推荐模型
3.广告平台
4.搜索模型

这些场景的特点都是拥有大量的数据,且对数据查询的时延要求非常高。在实时指标监控中,系统问题需要在出现的一刻被检测到并被及时给出报警。在推荐模型中,用户行为数据需要实时采集,并及时反馈到推荐系统中。用户几次点击之后系统就能够识别其搜索意图,并在之后的搜索中推荐更合理的结果。

Apache Druid 架构

Apache Druid 拥有优秀的架构设计,多个组件协同工作,共同完成数据从摄取到索引、存储、查询等一系列流程。

下图是 Druid 工作层(数据索引以及查询)包含的组件。

Druid工作层

Realtime 组件负责数据的实时摄入。

Broker 阶段负责查询任务的分发以及查询结果的汇总,并将结果返回给用户。

Historical 节点负责索引后的历史数据的存储,数据存储在 deep storage。Deep storage 可以是本地,也可以是HDFS 等分布式文件系统。

Indexing service 包含两个组件(图中未画出)。

Overlord 组件负责索引任务的管理、分发。

MiddleManager 负责索引任务的具体执行。

下图是 Druid segments(Druid 索引文件)管理层所涉及的组件。

Zookeeper 负责存储集群的状态以及作为服务发现组件,例如集群的拓扑信息、overlord leader 的选举、indexing task 的管理等等。
Coordinator 负责 segments 的管理,如 segments 下载、删除以及如何在 historical 之间做均衡等等。
Metadata storage 负责存储 segments 的元信息,以及管理集群各种各样的持久化或临时性数据,例如配置信息、审计信息等等。


在Twitter的团队中,为了提高大数据系统的性能,部署规模,和信息安全,Twitter 大数据团队对 Presto 和 Druid 进行了大量的改进与优化,包括 Presto Druid Connector、Aggregation and Predicate Pushdown、LDAP 为基础的数据授权和安全保护、Druid Native Indexing 以及利用缓存对 Druid 性能的提升。

Twitter大数据团队罗震霄老师表示:

Twitter 用 Druid 已经有一年多了,从 0.15 到 0.17,这几个版本都比较稳定,

Twitter 用 Druid的主要的变化

设计并实现了 Native Ingestion,彻底摆脱了对 MapReduce 的依赖,可以直接 Ingest Parquet,ORC
文件。 Data Ingestion 设计了 Indexer Process。 SQL 功能持续加强。 方便易用的用户界面。 更全面的
Security and Privacy Support,例如 LDAP Authentication and Authorization。

Druid 的主要特点是性能快,规模大,易用性好。

性能可以达到 1 秒以下,真正实现了大数据的实时性计算; Druid 单群可以扩展至 2000
台节点以上,很好的满足了企业对大数据规模的要求; Druid 的用户界面非常友好,用户常常可以通过拖拖拽拽进行查询,方便非技术类人员的应用。

Twitter 业务有很多实时的大数据需求,我们当时对比了市场上现有的开源方案,在稳定性、扩展性、性能和易用性方面 Druid 都有一定优势,最后选择 Druid。目前来看公司上下对 Druid 还比较满意。

Twitter 所有的 user events 都通过内部 Message Queue 导入 Druid,用户可以实时对 Druid 进行查询,也可以在 Druid 基础上设置各类的监控和提醒。实时监控很好的利用了 Druid 性能快和方便查询的特性。

Twitter 内部 Druid

Twitter 内部用 Druid 很多,有三大类:其一,将用户行为数据导入 Druid,进行实时用户行为分析;其二,通过 Druid 为广告商提供实时的广告效果分析;其三,利用 Druid 的实时特性,做实时监控和实时报表。

Druid 需要自己的存储,可以将 Message Queue 同时导入离线系统和实时系统(Druid)。
如果对一些数据经过滤后有实时的计算需求,也可以通过 Hadoop Distributed File System 将数据导入 Druid。

一般来说,企业的 Message Queue 可以共享,Hadoop Distributed File System 也可以作为 Druid 的数据源进行共享。

Twitter 现在正在开发 Presto Druid Connector,通过 Presto 实时查询 Druid 数据,这样企业内部的查询语言,查询系统也可以共享。

因为 Twitter 数据分析大多数是通过 SQL 进行的。公司上下对 SQL on Druid 的需求很高。
现有的 DruidSQL 功能不太完善,SubQuery、Join 都不支持。如果将 Druid 数据再导入其他存储系统,不仅费时费力,而且很难保证数据的一致性。基于这些考虑,我们决定开发 Presto Druid Connector,用 Presto 对 Druid 数据提供完整的 SQL 分析,避免了数据重复,节省了存储空间,而且还可以利用 Presto Connector 的优势,跨平台进行 Join 操作,比如,Join Hadoop Data with Druid Data。

现在有一些用户在使用 Presto Druid Connector,大家还是比较满意的。下一步,我们会进一步提升性能,pushdown 各类子运算到 Druid。最终的愿景是争取将所有的 SQL 操作统一到 Presto 上来。

为了性能的提升,Druid 需要自己的存储。对 Twitter 而言,查询速度,和系统的易用性,较之存储空间,更为重要。

Druid 需要做自己的存储的原因是

Druid 一个重要的设计目标是实时查询,也就是查询延迟一定要在 1 秒以下。
现有硬件的基本性能决定,从内存中顺序读取 4GB 数据的延时在 1 秒左右,实际应用场景中,我们处理的数据远远大于 4GB,所以,没有索引,仅仅靠扫描文件,是不可能达到实时查询要求的。
基于这些考虑,Druid 设计并实现了自己的存储格式,主要是列式存储,并应用字典、RLE 等方式进行优化。
Druid 还设计了 bitmap 索引。在实际应用中,bitmap 索引会以 mmap 方式放在内存中。绝大多数查询可以通过 bitmap 索引直接找到结果,少数查询会通过列式存储进行有选择性的文件查询。
我们也在开发一些项目,尽量减少不必要的数据重复。比如 Presto Druid Connector,通过 Presto 实时查询 Druid 数据,这样当用户需要对 Druid 数据进行 SQL 分析时,用 Presto 就可以了,不必要拷贝数据。

Druid 相对OLAP平台有何优势

现有的 OLAP 平台比较多,开源方面,有 Hive、 Impala、Spark、Presto、Drill、Druid、Pinot 等等。Twitter 现在的技术布局:对实时计算,统一于 Druid,对秒级到几十分钟级的数据分析,统一于 Presto,对小时级别的 ETL,统一于 Spark。Druid 主要的优势在性能,稳定性,扩展性,和易用性。能够达到 1 秒以下的实时引擎,只有 Druid 和 Pinot,如果考虑到扩展性和稳定性,Druid 的优势比较明显。

在 Twitter 里,关于 Druid 的开发功能

主要是四个方面: 对 Thrift 文件格式的支持,Twitter 内部有大量的 Thrift 文件。
Presto Druid Connector,通过 Presto 对 Druid 数据进行 SQL 分析。
Multi-tenancy Druid,Druid支持不同的用户类型,包括数据安全,隐私保护,和数据隔离。
Native Ingestion,摆脱对 MapReduce 的依赖,直接导入Parquet 文件。

未来,Twitter 还计划对 Druid 开发或加强哪些功能

主要有以下计划:

Unified Indexing Service,为用户提供方便的一键式导入。 Secure Druid,完整的 Druid 信息安全,包括
LDAP Authentication and Authorization。 Pushdown for Presto Druid
Connector,用 Presto 为 Druid 提供完整的 SQL 分析,并充分发挥 Druid 的性能优势,包括 Predicate
Pushdown, Aggregation Pushdown,Limit Pushdown。

补充前沿知识,充实职业生涯!

参考资料:阿里云,info

介绍一下Druild,并从Twitter大数据团队分析如何应用 Druid 分析 ZB 级实时数据?相关推荐

  1. Flink + Iceberg,腾讯百亿级实时数据入湖实战

    简介:上海站 Flink Meetup 分享内容,腾讯数据湖的百亿级数据场景落地的案例分享. 本文整理自腾讯数据湖研发高级工程师陈俊杰在 4 月 17 日 上海站 Flink Meetup 分享的&l ...

  2. 【数据架构】Netflix 万亿级实时数据基础架构的四个创新阶段

    我叫徐振中.我于 2015 年加入 Netflix,担任实时数据基础架构团队的创始工程师,后来领导了流处理引擎团队.我在 2010 年代初对实时数据产生了兴趣,从那时起我就相信还有很多价值有待发掘. ...

  3. 运营商精准大数据——主动出击 精准获客_客户_实时数据

    运营商大数据获客,可以做到主动出击,精准获客!常见的获客的方式大致分为两种:"被动获客"和"主动获客". "被动获客"的方法: 1. 城市广 ...

  4. 基于数据库数据增量同步_基于 Flink SQL CDC 的实时数据同步方案

    简介:Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的 ...

  5. 纳米数据世界杯数据接口,中超数据,体育数据比分,世界杯赛程api,足球比赛实时数据接口

    体育科技是体育产业发展的强力助推器,而在诸多体育新科技中,大数据和人工智能无疑担当着重要的角色之一.互联网时代,数据是最珍贵的资源,大数据正引领传统行业并与之结合,催生出新的活力.几乎各行各业都在拥抱 ...

  6. 纳米数据,足球篮球实时数据比分,体育赛事比分接口代码,实时数据推送演示

    纳米数据采集了近 20 年内全世界的比赛实况,运用大数据人工智能技术,建立了一个囊括全世界超过三万支球队.三十五万多场比赛及百亿条数据的数据库,在此基础上建立了超过 100 个满足各个场景需求的深度数 ...

  7. echars显示折点数据_Echarts 折线图一个点显示多个实时数据tooltip

    在项目开发需要中.有个需求就是在折线图的每一个折点上悬浮窗要显示几条不同的数据而且是跟x轴一样每个点不一样..研究了一下..有点坑.其实很简单,正常的思路来想 要想在悬浮窗显示数据 一般都会有线 才会 ...

  8. 转载文章:Microsoft 将僵尸网络威胁智能分析程序引入云中以提供近实时数据

    Microsoft 数字犯罪部门打击网络犯罪的首要任务是保护用户.我们深知,清理世界各地感染恶意软件的用户计算机与打破威胁同等重要,因此我们在 2010 年推出了Project MARS (Micro ...

  9. 听过TB、PB级大数据,ZB级的大数据探索与应用实践是怎么样的?【附PPT】

    据报告显示到2025年,全球将产生180ZB的数据.这些海量的数据正是企业进行数字化转型的核心生产因素,然而真正被有效存储.使用和分析的数据不到百分之十.如何从ZB级的数据中寻找分析有价值的信息并回馈 ...

最新文章

  1. xwpftemplate的时间设置_java poi设置生成的word的图片为上下型环绕以及其位置
  2. android 6.0 重启 丢失 壁纸,android6.0 壁纸设置流程讲解
  3. 关于微信支付冲突的问题
  4. 中只有负下标里才能有零_门诊营销第一人武威名:诊所如何提升成交率之零风险承诺的运用?...
  5. Spotlight监控工具使用
  6. 视窗宽高offset、client、scroll
  7. 大话设计模式—模板方法模式
  8. Hook的两个小插曲
  9. istio回归「单体应用」对我们的启发
  10. java foreach 跳过本次循环_【Java】对foreach循环的思考
  11. string类有可以调换方向的函数吗_深度剖析C++中的inline函数
  12. 【转】静态类与非静态类
  13. 雅思阅读真经总纲_你们要的刘洪波《雅思阅读真经总纲》高清PDF扫描版来了!!...
  14. SpringMVC 搭建遇到的坑
  15. 光伏并网发电及低电压穿越技术
  16. 绘制曲线 matlab,matlab绘制曲线图文
  17. 自学移动端(APP)自动化测试
  18. Redis设计与实现-集群
  19. jsp九大内置对象的使用详解
  20. 移植linux内核串口配置,uClinux内核的移植 - bootloader对uClinux的S3C44B0移植

热门文章

  1. router3 BGP1 基础部分
  2. [分享]Host文件的原理解释及应用说明
  3. 2021牛客多校6 - Gambling Monster(分治FWT优化期望dp)
  4. POJ - 1381 Secret Code(dfs+高斯整数)
  5. TensorFlow2-循环神经网络
  6. 机器学习-降维之主成分分析PCA算法原理及实战
  7. PostgreSQL学习笔记5之函数和操作符一
  8. 【白话科普】聊聊 DNS 的那些小知识
  9. Linux glibc内存管理:用户态内存分配器——ptmalloc实现原理
  10. Flink 容错机制:Checkpoints、Savepoints