| 作者 |
| 周爽(美)Brian O''Neill Peter Taylor Goetz |
| 丛书名 |
| 架构师书库 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782002289470 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------实时流计算系统设计与实现--------------------------- 全书分为11章。第1章介绍了实时流计算技术的产生背景、使用场景和通用架构。第2章通过实时流计算数据的采集,详细分析了Java高性能编程的理论基础。第3-6章通过从头构造一个分布式实时流计算框架,详细剖析了实时流计算中的几个核心概念和技术重点,并通过多个开源流计算平台的实现来验证这些核心概念和技术重点。第7章谈论了当实在做不到“实时”时,我们应该作出的备选方案。第8-10章阐述了构建一个完整实时流计算系统时,必要的周边辅助系统。第11章给出实时流计算应用案例。 ---------------------------Storm分布式实时计算模式--------------------------- 本书由Apache Storm项目核心贡献者亲笔撰写,融合了作者丰富的Storm实战经验,通过大量示例,全面而系统地讲解使用Storm进行分布式实时计算的核心概念及应用,并针对不同的应用场景,给出多种基于Storm的设计模式,为读者快速掌握Storm分布式实时计算提供系统实践指南。 全书分为10章:第1章介绍使用Storm建立一个分布式流式计算应用所涉及的核心概念,包括Storm的数据结构、开发环境的搭建,以及Storm程序的开发和调试技术等;第2章详细讲解Storm集群环境的安装和搭建,以及如何将topology部署到分布式环境中;第3章通过传感器数据实例详细介绍Trident topology;第4章讲解如何使用Storm和Trident进行实时趋势分析;第5章介绍如何使用storm进行图形分析,将数据持久化存储在图形数据库中,通过查询数据来发现其中潜在的联系;第6章讲解如何在Storm上使用递归实现一个典型的人工智能算法;第7章演示集成Storm和非事务型系统的复杂性,通过集成Storm和开源探索性分析架构 Druid实现一个可配置的实时系统来分析金融事件。第8章探讨Lambda体系结构的实现方法,讲解如何将批处理机制和实时处理引擎结合起来构建一个可纠错的分析系统;第9章讲解如何将Pig脚本转化为topology,并且使用Storm-YARN部署topology,从而将批处理系统转化为实时系统;第lo章介绍如何在云服务提供商提供的主机环境下部署和运行Storm。 |
| 目录 |
---------------------------实时流计算系统设计与实现--------------------------- 前言 第1章 实时流计算 …… 1 1.1 大数据时代的新挑战:实时流计算 …… 1 1.2 实时流计算使用场景 …… 2 1.3 实时流数据的特点 …… 4 1.4 实时流计算系统架构 …… 6 1.4.1 数据采集 …… 6 1.4.2 数据传输 …… 7 1.4.3 数据处理 …… 8 1.4.4 数据存储 …… 8 1.4.5 数据展示 …… 9 1.5 本章小结 …… 10 第2章 数据采集 …… 11 2.1 设计数据采集的接口 …… 11 2.2 使用Spring Boot实现数据采集服务器 …… 12 2.3 BIO与NIO …… 14 2.3.1 BIO连接器 …… 14 2.3.2 NIO连接器 …… 17 2.4 NIO和异步 …… 19 2.4.1 CPU密集型任务 …… 19 2.4.2 I/O密集型任务 …… 20 2.4.3 I/O和CPU都密集型任务 …… 21 2.4.4 纤程 …… 22 2.4.5 Actor …… 24 2.4.6 NIO配合异步编程 …… 25 2.5 使用Netty实现数据采集服务器 …… 26 2.5.1 使用Netty实现数据采集API …… 27 2.5.2 异步编程 …… 29 2.5.3 流量控制和反向压力 …… 31 2.5.4 实现反向压力 …… 32 2.5.5 异步的不足之处 …… 36 2.6 本章小结 …… 36 第3章 实现单节点流计算应用 …… 38 3.1 自己动手写实时流计算框架 …… 38 3.1.1 用DAG描述流计算过程 …… 38 3.1.2 造一个流计算框架的轮子 …… 39 3.1.3 实现特征提取DAG节点 …… 42 3.1.4 实现特征提取DAG拓扑 …… 45 3.2 CompletableFuture方法与原理 …… 46 3.2.1 常用的CompletableFuture类方法 …… 47 3.2.2 CompletableFuture的工作原理 …… 49 3.3 采用CompletableFuture实现单节点流处理 …… 51 3.3.1 基于CompletableFuture实现流计算应用 …… 51 3.3.2 反向压力 …… 53 3.3.3 死锁 …… 54 3.3.4 再论流与异步的关系 …… 55 3.4 流计算应用的性能调优 …… 56 3.4.1 优化机制 …… 56 3.4.2 优化工具 …… 56 3.4.3 线程状态 …… 62 3.4.4 优化方向 …… 66 3.5 本章小结 …… 67 第4章 数据处理 …… 68 4.1 流计算到底在计算什么 …… 68 4.2 流数据操作 …… 70 4.2.1 过滤 …… 70 4.2.2 映射 …… 70 4.2.3 展开映射 …… 71 4.2.4 聚合 …… 72 4.2.5 关联 …… 73 4.2.6 分组 …… 75 4.2.7 遍历 …… 75 4.3 时间维度聚合特征计算 …… 76 4.4 关联图谱特征计算 …… 78 4.4.1 一度关联 …… 79 4.4.2 二度关联 …… 81 4.5 事件序列分析 …… 85 4.5.1 CEP编程模式 …… 86 4.5.2 Flink CEP实例 …… 87 4.6 模型学习和预测 …… 89 4.6.1 统计学习模型 …… 90 4.6.2 P-value检验 …… 90 4.6.3 机器学习模型 …… 91 4.7 本章小结 …… 93 第5章 实时流计算的状态管理 …… 94 5.1 流的状态 …… 94 5.1.1 流数据状态 …… 96 5.1.2 流信息状态 …… 97 5.2 采用Redis实现流信息状态管理 …… 98 5.2.1 时间维度聚合特征计算 …… 98 5.2.2 一度关联特征计算 …… 99 5.3 采用Apache Ignite实现流信息状态管理 …… 100 5.3.1 时间维度聚合分析 …… 101 5.3.2 一度关联特征计算 …… 103 5.4 扩展为集群 …… 105 5.4.1 基于Redis的状态集群 …… 106 5.4.2 局部性原理 …… 106 5.4.3 批次请求处理 …… 108 5.4.4 基于Apache Ignite的状态集群 …… 109 5.4.5 基于分布式文件系统的状态管理集群 …… 109 5.5 本章小结 …… 110 第6章 开源流计算框架 …… 111 6.1 Apache Storm …… 112 6.1.1 系统架构 …… 112 6.1.2 流的描述 …… 113 6.1.3 流的执行 …… 113 6.1.4 流的状态 …… 116 6.1.5 消息传达可靠性保证 …… 116 6.2 Spark Streaming …… 117 6.2.1 系统架构 …… 117 6.2.2 流的描述 …… 117 6.2.3 流的执行 …… 118 6.2.4 流的状态 …… 119 6.2.5 消息传达可靠性保证 …… 120 6.3 Apache Samza …… 120 6.3.1 系统架构 …… 120 6.3.2 流的描述 …… 121 6.3.3 流的执行 …… 123 6.3.4 流的状态 …… 126 6.3.5 消息传达可靠性保证 …… 126 6.4 Apache Flink …… 127 6.4.1 系统架构 …… 127 6.4.2 流的描述 …… 128 6.4.3 流的执行 …… 128 6.4.4 流的状态 …… 130 6.4.5 消息传达可靠性 …… 131 6.5 本章小结 …… 132 第7章 当做不到实时 …… 133 7.1 做不到实时的原因 …… 133 7.2 Lambda架构 …… 134 7.2.1 数据系统和Lambda架构思想 …… 135 7.2.2 Lambda架构 …… 135 7.2.3 Lambda架构在实时流计算中的运用 …… 137 7.3 Kappa架构与架构实例 …… 138 7.3.1 Kappa架构 …… 138 7.3.2 Kappa架构实例 …… 140 7.4 本章小结 …… 143 第8章 数据传输 …… 144 8.1 消息中间件 …… 144 8.1.1 为什么使用消息中间件 …… 145 8.1.2 消息中间件的工作模式 …… 146 8.1.3 消息模式 …… 147 8.1.4 使用消息中间件的注意事项 …… 149 8.2 Apache Kafka …… 150 8.2.1 Kafka架构 …… 150 8.2.2 Kafka生产者 …… 152 8.2.3 Kafka消费者 …… 154 8.2.4 将Kafka用于数据总线 …… 156 8.3 RabbitMQ …… 157 8.3.1 RabbitMQ架构 …… 157 8.3.2 RabbitMQ的使用 …… 158 8.3.3 将RabbitMQ用于配置总线 …… 160 8.4 Apache Camel …… 161 8.4.1 使用Apache Camel集成系统 …… 162 8.4.2 使用Apache Camel管理流数据路由 …… 163 8.5 本章小结 …… 166 第9章 数据存储 …… 167 9.1 存储的设计原则 …… 167 9.2 点查询 …… 169 9.2.1 数据灵活性 …… 170 9.2.2 MongoDB数据库 …… 171 9.2.3 数据过期和按时间分表 …… 172 9.3 Ad-Hoc查询 …… 174 9.3.1 倒排索引 …… 175 9.3.2 ElasticSearch …… 176 9.3.3 分索引存储 …… 177 9.4 离线分析 …… 178 9.4.1 存储 …… 179 9.4.2 处理和分析 …… 182 9.4.3 调度 …… 183 9.5 关系型数据库查询 …… 185 9.6 本章小结 …… 186 第10章 服务治理和配置管理 …… 188 10.1 服务治理 …… 188 10.1.1 流服务和微服务 …… 188 10.1.2 微服务框架Spring Cloud …… 190 10.2 面向配置编程 …… 195 10.2.1 面向配置编程思想 …… 195 10.2.2 更高级的配置:领域特定语言 …… 196 10.3 动态配置 …… 196 10.4 将前端配置与后端服务配置隔离开 …… 201 10.5 本章小结 …… 202 第11章 实时流计算应用案例 …… 204 11.1 实时流数据特征提取引擎 …… 204 11.1.1 流数据特征提取引擎DSL定义 …… 204 11.1.2 实现原理 …… 208 11.1.3 具体实现 …… 210 11.2 使用Flink实现风控引擎 …… 216 11.2.1 实现原理 …… 217 11.2.2 具体实现 …… 218 11.3 本章小结 …… 225 ---------------------------Storm分布式实时计算模式--------------------------- 《Storm分布式实时计算模式》 译者序 前言 作者简介 第1章 分布式单词计数 1 1.1 Storm topology的组成部分——stream、spout和bolt 1 1.1.1 stream 2 1.1.2 spout 2 1.1.3 bolt 2 1.2 单词计数topology的数据流 3 1.2.1 语句生成spout 3 1.2.2 语句分割bolt 3 1.2.3 单词计数bolt 4 1.2.4 上报bolt 4 1.3 实现单词计数topology 4 1.3.1 配置开发环境 4 1.3.2 实现SentenceSpout 5 1.3.3 实现语句分割bolt 6 1.3.4 实现单词计数bolt 7 1.3.5 实现上报bolt 8 1.3.6 实现单词计数topology 10 1.4 Storm的并发机制 12 1.4.1 WordCountTopology的并发机制 13 1.4.2 给topology增加worker 14 1.4.3 配置executor和task 14 1.5 理解数据流分组 17 1.6 有保障机制的数据处理 20 1.6.1 spout的可靠性 20 1.6.2 bolt的可靠性 21 1.6.3 可靠的单词计数 22 总结 23 第2章 配置Storm集群 24 2.1 Storm集群的框架 24 2.1.1 理解nimbus守护进程 25 2.1.2 supervisor守护进程的工作方式 26 2.1.3 Apache ZooKeeper简介 26 2.1.4 Storm的DRPC服务工作机制 27 2.1.5 Storm UI 27 2.2 Storm技术栈简介 28 2.2.1 Java和Clojure 28 2.2.2 Python 29 2.3 在Linux上安装Storm 29 2.3.1 安装基础操作系统 30 2.3.2 安装Java 30 2.3.3 安装ZooKeeper 30 2.3.4 安装Storm 30 2.3.5 运行Storm守护进程 31 2.3.6 配置Storm 33 2.3.7 必需的配置项 34 2.3.8 可选配置项 35 2.3.9 Storm可执行程序 36 2.3.10 在工作站上安装Storm可执行程序 36 2.3.11 守护进程命令 37 2.3.12 管理命令 37 2.3.13 本地调试/开发命令 39 2.4 把toplogy提交到集群中 40 2.5 自动化集群配置 42 2.6 Puppet的快速入门 43 2.6.1 Puppet manifest文件 43 2.6.2 Puppet类和模块 44 2.6.3 Puppet模板 45 2.6.4 使用Puppet Hiera来管理环境 46 2.6.5 介绍Hiera 46 总结 48 第3章 Trident和传感器数据 49 3.1 使用场景 50 3.2 Trident topology 50 3.3 Trident spout 52 3.4 Trident运算 57 3.4.1 Trident filter 58 3.4.2 Trident function 59 3.5 Trident聚合器 63 3.5.1 CombinerAggregator 63 3.5.2 ReducerAggregator 63 3.5.3 Aggregator 64 3.6 Trident状态 65 3.6.1 重复事务型状态 69 3.6.2 不透明型状态 70 3.7 执行topology 72 总结 73 第4章 实时趋势分析 74 4.1 应用场景 75 4.2 体系结构 75 4.2.1 数据源应用程序 75 4.2.2 logback Kafka appender 76 4.2.3 Apache Kafka 76 4.2.4 Kafka spout 76 4.2.5 XMPP服务器 76 4.3 安装需要的软件 77 4.3.1 安装Kafka 77 4.3.2 安装OpenFire 78 4.4 示例程序 78 4.5 日志分析topology 84 4.5.1 Kafka spout 84 4.5.2 JSON project function 85 4.5.3 计算移动平均值 86 4.5.4 添加一个滑动窗口 87 4.5.5 实现滑动平均function 91 4.5.6 按照阈值进行过滤 92 4.5.7 通过XMPP发送通知 94 4.6 最终的topology 96 4.7 运行日志分析topology 98 总结 99 第5章 实时图形分析 100 5.1 使用场景 101 5.2 体系结构 102 5.2.1 Twitter客户端 102 5.2.2 Kafka spout 102 5.2.3 Titan分布式图形数据库 103 5.3 图形数据库简介 103 5.3.1 访问图——TinkerPop栈 104 5.3.2 使用Blueprints API操作图形 105 5.3.3 通过Gremlin shell操作图形 106 5.4 软件安装 107 5.5 使用Cassandra存储后端设置Titan 109 5.5.1 安装Cassandra 109 5.5.2 使用Cassandra后端启动Titan 109 5.6 图数据模型 110 5.7 连接Twitter数据流 111 5.7.1 安装Twitter4J客户端 112 5.7.2 OAuth配置 112 5.7.3 TwitterStreamConsumer类 112 5.7.4 TwitterStatusListener类 113 5.8 Twitter graph topology 115 5.9 实现GraphState 116 5.9.1 GraphFactory 117 5.9.2 GraphTupleProcessor 117 5.9.3 GraphStateFactory 117 5.9.4 GraphState 118 5.9.5 GraphUpdater 119 5.10 实现GraphFactory 119 5.11 实现GraphTupleProcessor 120 5.12 组合成TwitterGraphTopology类 121 5.13 使用Gremlin查询图 122 总结 123 第6章 人工智能 124 6.1 为应用场景进行设计 125 6.2 确立体系结构 128 6.2.1 审视设计中的挑战 128 6.2.2 实现递归 128 6.2.3 解决这些挑战 132 6.3 实现体系结构 133 6.3.1 数据模型 133 6.3.2 检视Recursive Topology 136 6.3.3 队列交互 138 6.3.4 function和filter 140 6.3.5 研究Scoring Topology 141 6.3.6 分布式远程命令调用(DRPC) 146 总结 152 第7章 整合Druid进行金融分析 153 7.1 使用场景 154 7.2 集成一个非事务系统 155 7.3 topology 158 7.3.1 spout 159 7.3.2 filter 161 7.3.3 状态设计 162 7.4 实现体系结构 165 7.4.1 DruidState 166 7.4.2 实现StormFirehose对象 169 7.4.3 在ZooKeeper中实现分片状态 174 7.5 执行实现的程序 175 7.6 检视分析过程 176 总结 179 第8章 自然语言处理 180 8.1 Motivating Lambda结构 181 8.2 研究使用场景 183 8.3 实现Lambda architecture 184 8.4 为应用场景设计topology 185 8.5 设计的实现 186 8.5.1 TwitterSpout/TweetEmitter 187 8.5.2 function 188 8.6 检视分析逻辑 191 8.7 Hadoop 196 8.7.1 MapReduce概览 196 8.7.2 Druid安装 197 总结 204 第9章 在Hadoop上部署Storm进行广告分析 205 9.1 应用场景 205 9.2 确定体系结构 206 9.2.1 HDFS简介 208 9.2.2 YARN简介 208 9.3 配置基础设施 211 9.3.1 Hadoop基础设施 211 9.3.2 配置HDFS 212 9.4 部署分析程序 217 9.4.1 以Pig为基础执行批处理分析 217 9.4.2 在Storm-YARN基础上执行实时分析 218 9.5 执行分析 223 9.5.1 执行批处理分析 223 9.5.2 执行实时分析 224 9.6 部署topology 229 9.7 执行toplogy 229 总结 230 第10章 云环境下的Storm 231 10.1 Amazon Elastic Compute Cloud简介 232 10.1.1 建立AWS帐号 232 10.1.2 AWS管理终端 232 10.1.3 手工启动一个EC2实例 234 10.2 Apache Whirr简介 236 10.3 使用Whirr配置Storm集群 237 10.4 Whirr Storm简介 239 10.5 Vagrant简介 243 10.5.1 安装Vagrant 243 10.5.2 创建第一个虚拟机 244 10.6 生成Storm安装准备脚本 247 10.6.1 ZooKeeper 247 10.6.2 Storm 248 10.6.3 Supervisord 249 总结 252 |