具体描述
Druid 作为一款开源的实时大数据分析软件,最近几年快速风靡全球互联网公司,特别是对于海量数据和实时性要求高的场景,包括广告数据分析、用户行为分析、数据统计分析、运维监控分析等,在腾讯、阿里、优酷、小米等公司都有大量成功应用的案例。《Druid实时大数据分析原理与实践》的目的就是帮助技术人员更好地深入理解Druid 技术、大数据分析技术选型、Druid 的安装和使用、高级特性的使用,也包括一些源代码的解析,以及一些常见问题的快速回答。
Druid 的生态系统正在不断扩大和成熟,Druid 也正在解决越来越多的业务场景。希望本书能帮助技术人员做出更好的技术选型,深度了解Druid 的功能和原理,更好地解决大数据分析问题。《Druid实时大数据分析原理与实践》适合大数据分析的从业人员、IT 人员、互联网从业者阅读。
作者简介
欧阳辰,小米商业产品部研发总监,负责广告架构和数据分析平台,擅长数据挖掘,大数据分析和广告搜索架构。之前,在微软工作10年,任微软公司高级开发经理,负责Contextual Ads产品研发,开发Bing Index Serve的核心模块。持有多项关于互联网广告及搜索的美国专利。创办“互联居”公众号,致力于互联网广告技术的繁荣。毕业于北京大学计算机系,获硕士学历。
刘麒赟,现任Testin云测公司技术总监,全面负责领导团队完成数据分析产品的研发。作为资深数据技术专家,曾为多个著名开源项目(Hadoop/Sqoop/Oozie/Druid)贡献源代码,在互联网大数据分析、机器学习和统计学应用等方面拥有丰富的实战经验和相关专利。在企业级产品研发和客户支持方面也有着丰富的经验,并曾为中国多地(包括香港和台湾地区)的龙头企业成功进行实地支持,为美国与新加坡等地客户进行远程支持。之前,曾任OneAPM公司大数据架构师,以及在IBM公司工作七年并任IBM全球大数据平台产品BigInsights的Advisory Software Engineer。
张海雷,资深工程师。目前在优酷土豆广告技术团队负责Druid集群的维护。活跃在Druid中国用户组,Druid、Redis和Storm的开源项目代码贡献者。
高振源,热爱技术,爱智求真的后台开发和数据工程师。先后负责过广告DSP产品、QQ公众号精准投放平台、数据分析产品等研发工作。目前在腾讯SNG企业产品部,负责企点产品的数据平台工作。
许哲,腾讯后台开发高级工程师,先后参与了公司企业产品消息服务后台、QQ公众号后台、QQ公众号精准投放平台等研发,目前在腾讯SNG企业产品部,负责腾讯企点的后台和数据平台开发工作。
目录信息
1.1 Druid 是什么1
1.2 大数据分析和Druid 1
1.3 Druid 的产生3
1.3.1 MetaMarkets 简介3
1.3.2 失败总结4
1.4 Druid 的三个设计原则4
1.4.1 快速查询(Fast Query) 5
1.4.2 水平扩展能力(Horizontal Scalability) 5
1.4.3 实时分析(Realtime Analytics) 6
1.5 Druid 的技术特点6
1.5.1 数据吞吐量大6
1.5.2 支持流式数据摄入6
1.5.3 查询灵活且快6
1.5.4 社区支持力度大7
1.6 Druid 的Hello World 7
1.6.1 Druid 的部署环境7
1.6.2 Druid 的基本概念7
1.7 系统的扩展性9
1.8 性能指标10
1.9 Druid 的应用场景10
1.9.1 国内公司11
1.9.2 国外公司12
1.10 小结13
参考资料13
第2 章数据分析及相关软件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1 数据分析及相关概念15
2.2 数据分析软件的发展16
2.3 数据分析软件的分类17
2.3.1 商业软件17
2.3.2 时序数据库22
2.3.3 开源分布式计算平台23
2.3.4 开源分析数据库25
2.3.5 SQL on Hadoop/Spark 31
2.3.6 数据分析云服务33
2.4 小结34
参考资料34
第3 章架构详解. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1 Druid 架构概览35
3.2 Druid 架构设计思想36
3.2.1 索引对树结构的选择37
3.2.2 Druid 总体架构41
3.2.3 基于DataSource 与Segment 的数据结构43
3.3 扩展系统45
3.3.1 主要的扩展45
3.3.2 下载与加载扩展46
3.4 实时节点47
3.4.1 Segment 数据文件的制造与传播47
3.4.2 高可用性与可扩展性48
3.5 历史节点49
3.5.1 内存为王的查询之道49
3.5.2 层的分组功能50
3.5.3 高可用性与可扩展性51
3.6 查询节点51
3.6.1 查询中枢点51
3.6.2 缓存的使用52
3.6.3 高可用性52
3.7 协调节点53
3.7.1 集群数据负载均衡的主宰53
3.7.2 利用规则管理数据生命周期53
3.7.3 副本实现Segment 的高可用性54
3.7.4 高可用性54
3.8 索引服务54
3.8.1 主从结构的架构54
3.8.2 统治节点55
3.8.3 中间管理者与苦工56
3.8.4 任务56
3.9 小结57
第4 章安装与配置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1 安装准备58
4.1.1 安装包简介58
4.1.2 安装环境59
4.1.3 Druid 外部依赖60
4.2 简单示例61
4.2.1 服务运行61
4.2.2 数据导入与查询62
4.3 规划与部署65
4.4 基本配置68
4.4.1 基础依赖配置68
4.4.2 数据节点配置调优69
4.4.3 查询节点配置调优69
4.5 集群节点配置示例70
4.5.1 节点规划70
4.5.2 Master 机器配置72
4.5.3 Data 机器配置76
4.6 小结79
第5 章数据摄入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.1 数据摄入的两种方式80
5.1.1 流式数据源80
5.1.2 静态数据源81
5.2 流式数据摄取81
5.2.1 以Pull 方式摄取82
5.2.2 用户行为数据摄取案例86
5.2.3 以Push 方式摄取89
5.2.4 索引服务任务相关管理接口91
5.3 静态数据批量摄取94
5.3.1 以索引服务方式摄取94
5.3.2 以Hadoop 方式摄取96
5.4 流式与批量数据摄取的结合99
5.4.1 Lambda 架构99
5.4.2 解决时间窗口问题100
5.5 数据摄取的其他重要知识101
5.5.1 数据分片101
5.5.2 数据复制106
5.5.3 索引服务之Tranquility 107
5.5.4 高基数维度优化111
5.6 小结116
第6 章数据查询. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1 查询过程117
6.2 组件118
6.2.1 Filter 118
6.2.2 Aggregator 121
6.2.3 Post-Aggregator 125
6.2.4 Search Query 129
6.2.5 Interval 129
6.2.6 Context 130
6.3 案例介绍131
6.4 Timeseries 134
6.5 TopN 138
6.6 GroupBy 144
6.7 Select 149
6.8 Search 151
6.9 元数据查询153
6.10 小结156
第7 章高级功能和特性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.1 近似直方图(Approximate Histogram) 158
7.1.1 分位数和直方图158
7.1.2 实现原理158
7.1.3 如何使用161
7.1.4 近似直方图小结163
7.2 数据Sketch 163
7.2.1 DataSketch Aggregator 163
7.2.2 DataSketch Post-Aggregator 167
7.3 地理查询(Geographic Query) 170
7.3.1 基本原理170
7.3.2 空间索引(Spatial Indexing) 171
7.3.3 空间过滤(Spatial Filter) 171
7.3.4 边界条件(Boundary Condition) 172
7.3.5 地理查询小结172
7.4 Router 172
7.4.1 Router 概览172
7.4.2 路由规则174
7.4.3 配置175
7.4.4 路由策略175
7.5 Kaa 索引服务177
7.5.1 设计背景177
7.5.2 实现178
7.5.3 如何使用182
7.6 Supervisor API 186
7.6.1 创建Supervisor 186
7.6.2 关闭Supervisor 186
7.6.3 获取当前执行的Supervisor 186
7.6.4 获取Supervisor 规范186
7.6.5 获取Supervisor 的状态报告186
7.6.6 获取所有Supervisor 的历史187
7.6.7 获取Supervisor 的历史187
7.7 最佳实践187
7.7.1 容量规划187
7.7.2 Supervisor 的持久化187
7.7.3 Schema 的配置与变更188
7.8 小结188
第8 章核心源代码探析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.1 如何编译Druid 代码189
8.2 Druid 项目介绍190
8.3 索引结构模块和层次关系192
8.4 Column 结构192
8.5 Segment 195
8.6 Query 模块203
8.6.1 基础组件203
8.6.2 内存池管理206
8.6.3 查询流程概览207
8.6.4 查询引擎225
8.7 Coordinator 模块229
8.8 小结237
第9 章监控和安全. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
9.1 Druid 监控238
9.1.1 Druid 监控指标238
9.1.2 常用的监控方法245
9.2 Druid 告警250
9.2.1 Druid 告警信息250
9.2.2 Druid 与告警系统的集成250
9.3 Druid 安全251
9.3.1 Druid 与利用Kerberos 加强安全认证的系统集成251
9.3.2 集成外部权限模块完成用户授权255
9.4 小结256
第10 章实践和应用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
10.1 小米257
10.1.1 场景一:小米统计服务258
10.1.2 场景二:广告平台实时数据分析260
10.2 优酷土豆262
10.2.1 需求分析262
10.2.2 技术选型及工程实践263
10.2.3 优化策略266
10.3 腾讯267
10.3.1 工程实践267
10.3.2 业务实践270
10.4 蓝海讯通279
10.5 小结284
第11 章Druid 生态与展望. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
11.1 Druid 生态系统285
11.2 Druid 生态系统资源288
11.2.1 IAP 288
11.2.2 Plywood 289
11.2.3 PlyQL 294
11.2.4 Pivot 297
11.2.5 Druid-Metrics-Kaa 300
11.2.6 Caravel(Airbnb) 301
11.3 Druid 的社区讨论组302
11.4 Druid 展望302
参考资料303
附录A 常见问题(FAQ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
附录B 常用参数表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
· · · · · · (收起)
读后感
用户评价
阅读这本书的过程,更像是一次深入的架构研讨会。作者的写作态度非常严谨,对技术细节的把握精确到了位,没有丝毫的含糊不清。我印象最深的是其中关于时间序列数据处理部分的论述,Druid作为时间序列分析的利器,其时间维度处理的精妙之处往往是其他工具难以企及的。这本书对此做了极为详尽的拆解,从时间戳的存储格式到区间查询的优化策略,都给予了充分的讲解。这种对领域内核心难点的深度挖掘,体现了作者对该技术栈的深刻理解。读完后,我感觉自己不再是被动地接受结果,而是能够主动去设计更优的数据模型和查询逻辑。它提升了我的问题解决能力,让我能够从容应对日益增长的实时分析需求带来的挑战。这是一本真正有思想深度的技术著作。
这本书的叙事风格非常独特,它不像许多技术书籍那样枯燥乏味,反而带有一种探索未知的兴奋感。作者擅长用清晰的比喻和生动的图示来描绘复杂的内部结构,比如将数据索引比作图书馆的编目系统,一下子就抓住了核心要点。我特别喜欢它在高级主题部分的处理方式,没有刻意去炫耀深奥的知识点,而是循序渐进地引导读者去理解每一个设计选择背后的权衡。举个例子,关于预聚合和Rollup策略的讨论,作者不仅展示了如何配置,更深入分析了不同粒度预聚合对查询性能和存储成本的影响曲线,这种细致入微的分析能力,让我受益匪浅。对于一个初学者来说,这本书提供了坚实的基石;对于一个有经验的开发者来说,它提供了突破现有瓶颈的钥匙。总而言之,这是一本可以伴随职业生涯成长的参考书。
这本书简直是为我量身定做的!我一直对Druid这个名字很感兴趣,但苦于找不到一本能深入浅出讲解其底层机制的实战书籍。这本书的结构设计非常巧妙,从基础概念的梳理到复杂查询的实现,每一步都讲解得丝丝入扣。特别是作者在讲解实时数据摄入和聚合方面的章节,简直是把我过去几个月里遇到的各种性能瓶颈问题都给打通了。我尤其欣赏它在代码示例上的投入,那些贴近实际生产环境的代码片段,让我能立刻将理论知识转化为可操作的实践。读完这本书,我对如何构建一个高性能、高可用的实时分析平台有了全新的认识,不再是停留在API调用的层面,而是真正理解了数据流转的每一个环节。对于那些希望在数仓领域深耕,特别是关注OLAP实时分析的工程师来说,这本书绝对是案头必备的武林秘籍。它不仅仅是告诉我们“怎么做”,更重要的是解释了“为什么这么做”,这种深度思考的引导,才是它最大的价值所在。
我必须承认,这本书的实战性超出了我的预期。通常,讲解“原理”的书籍在“实践”部分往往浅尝辄止,但这本书在每一个关键模块后,都紧跟着一整套可以复现的实操指南。特别是关于数据导入的章节,从最基础的本地导入到复杂的Kafka实时流处理,每一种场景的配置参数和常见错误处理都被整理得井井有条。我尝试按照书中的步骤搭建了一个小型PoC环境,结果发现所有的步骤都完美运行,这极大地节省了我自己摸索的时间。在我看来,这本书最宝贵的地方在于,它不仅仅是知识的堆砌,更像是一份经过实战检验的“操作手册”。它让你少走弯路,直击核心痛点。对于那些急需快速上手并解决实际问题的团队而言,这本书的价值无可估量。它提供的不仅仅是知识,更是生产力。
说实话,市面上关于大数据分析工具的书籍不少,但真正能兼顾“原理”和“实践”的却凤毛麟角。这本书的作者显然在这两个领域都有着深厚的积累。我最喜欢的是它对Druid设计哲学的剖析,比如它如何平衡查询速度与存储效率之间的矛盾,以及它在分布式架构下如何保证数据一致性的挑战与解决方案。这些宏观层面的思考,对于架构师级别的读者来说,提供了极具价值的参考框架。书中关于Segment加载和淘汰策略的描述,非常详尽,让我对Druid集群的运维和优化有了底气。我过去总觉得实时分析的延迟优化是个黑箱操作,但这本书把黑箱变成了透明的橱窗,让我看清了每一个影响延迟的关键因子。对于想要从“使用工具”迈向“驾驭工具”的读者,这本书无疑是搭建认知体系的绝佳起点。我毫不夸张地说,这本书让我对实时数据处理的热情又重新点燃了。
粗略扫了一下
挺不错的,原理,源码都有介绍 但对 segment 和 index 的细节不够详细
2个小时快速浏览了一遍,还是有不少官方文档看不到的内容,但是深度一般。
覆盖面比较全,Druid很多功能都介绍到了
配合英文版官方文档一起读很适合新手入门Druid,还是要多实践,结合项目组任务学习效率会高一点。【给四星不是因为我加了两个作者的微信啊。