商品详情
书名:精通Kafka Streams与ksqlDB
书号:978-7-5239-1197-6
定价:128元
作者:[美]米奇·西摩(Mitch Seymour) 著 字立生 王乔阳 李佳兴 译
出版时间:2026-05-26
出版社:中国电力出版社
页码: 444 字数(千字):434
开本:特16开 版次:B1 印次:Y1
品牌介绍
中国电力出版社成立于 1951 年,作为中国成立最早的中央科技出版社之一,曾隶属于水利电力部、能源部、电力工业部、国家电力公司,现为国家电网公司所属的科技出版社,在电气技术专业出版领域享有极高的声誉。该社作为以图书出版为主体,音像、电子出版物、期刊、网络出版共同发展的大型出版企业,以强大的出版资源和高素质的专业队伍,致力于向读者提供包括电力工程、电气工程、建筑工程、电子技术、信息技术、外语、大中专教材、家教等学科门类齐全的权威出版物,也竭力为广大师生提供精品教材,是教育部和北京市教委规划教材的出版基地之一。
编辑推荐
编辑推荐 处理无边界、快速移动的数据流在过去一直很困难,但自从有了Kafka Streams和ksqlDB,构建流处理应用变得轻松有趣。这本实用的指南将向数据工程师展示如何使用这些工具来构建高度可扩展的流处理应用程序,从而实时地移动、丰富和转换大量数据。 Mailchimp的数据服务工程师Mitch Seymour将结合几个有趣的业务问题背景,讲解重要的流处理概念。你将学习Kafka Streams和ksqlDB各自的优势,从而帮助你为每个独一无二的流处理项目选择最佳工具。对于非Java开发者来说,ksqlDB的学习路径将是流处理领域一个特别平缓的入门方式。 专家推荐 “流处理已成为一个前所未有的重要编程范式。这本书无疑照亮了通往成功的道路。” ——Jay Kreps Apache Kafka联合创始人, Confluent联合创始人兼CEO
产品特色
Apache Kafka联合创始人作推荐序。
作者介绍
Mitch Seymour是Mailchimp的一名高级工程师和技术主管。他使用Kafka Streams和ksqlDB构建的流处理应用程序,每天能以亚秒级的延迟处理数十亿个事件。他曾在公司技术讲座、本地交流会和国际会议上分享这些技术,并为ksqlDB的代码库和各种在线出版物做出过贡献。
内容介绍
本书的主要内容有:学习Kafka基础知识和发布/订阅通信模式。使用Kafka Streams和ksqlDB构建无状态和有状态的流处理应用程序。执行高级有状态操作,包括窗口化、关联和聚合。深入理解有状态处理的底层工作原理。了解由Kafka Connect支持的ksqlDB数据集成功能。使用ksqlDB中的不同类型的集合,并执行推送查询和拉取查询。将你的Kafka Streams和ksqlDB应用部署到生产环境。
本书适用于数据工程师。
前言
前言
对于数据工程师和数据科学家来说,从未缺乏过吸引眼球的技术。无论我们是在浏览喜爱的Reddit 子板块、扫视Hacker News、阅读技术博客,还是在技术会议上穿梭于数百个展台之间,有太多东西值得一看,以至于会让人开始感到不知所措。
但如果我们能找到一个安静的角落,静心思考片刻,将所有的喧嚣都抛诸脑后,我们就能从纷乱中分辨出其中的“道”。你看,我们生活在一个数据爆炸性增长的时代,许多技术被创造出来,就是为了帮助我们大规模地存储和处理数据。我们被告知,这些是解决现代问题的现代方案,我们围坐在一起讨论“大数据”,仿佛这个想法是多么前卫,而实际上,对数据量的关注仅仅是故事的一半。
那些只解决数据量问题的技术,倾向于使用面向批处理的技术来处理数据。这涉及对一段时间内积累的一堆数据运行一个作业。在某些方面,这就像试图一次性喝光整个海洋。借助现代计算能力和范式,一些技术确实成功地做到了这一点,尽管通常是以高延迟为代价。
相反,本书关注的是现代数据的另一个属性:数据在网络上以稳定且永不停止的流形式移动。我们在本书中涵盖的技术(Kafka Streams 和ksqlDB)是专门为实时处理这些连续数据流而设计的,与那种“喝光海洋”的方式相比,它们提供了巨大的竞争优势。毕竟,许多业务问题都具有实时性,如果你需要在数据一进入时就对其进行丰富、转换或做出反应,那么Kafka Streams 和ksqlDB 将帮助你轻松高效地实现这一目标。
学习Kafka Streams 和ksqlDB 也是一个熟悉流处理所涉及的更宏大概念的好方法。这包括以不同方式(流和表)对数据建模、应用数据的无状态转换、使用本地状态进行更高级的操作(关联、聚合)、理解不同的时间语义, 以及将数据分组到时间桶/ 窗口化的方法等。换句话说,你对Kafka Streams 和ksqlDB 的了解,将帮助你辨别和评估当前存在以及未来可能出现的不同流处理解决方案。
我很高兴能与你分享这些技术,因为它们不仅对我的职业生涯产生了影响,还帮助我完成了我曾认为超出自己能力范围的技术壮举。事实上,当你读完这句话时,我的一个Kafka Streams 应用程序已经快处理了九百万个事件。通过提供真实的业务价值而无需在解决方案上投入过高的时间成本,这种感觉将让你在未来几年里持续使用这些技术,其简洁且富有表现力的语言结构,使得整个过程更像是一种艺术创作,而非辛苦劳作。就像其他艺术形式一样,无论是一首改变人生的歌曲还是一幅美丽的画作,分享它是人类的天性。所以,请把这本书看作是我送给你的一盘音乐合集,里面收录了我最喜欢的流处理领域合集供你欣赏:第一卷Kafka Streams 和ksqlDB。
本书读者对象
本书面向希望学习如何构建高度可扩展的流处理应用程序,以实时传输、丰富和转换大量数据的数据工程师。这些技能通常用于支持商业智能计划、分析管道、威胁检测、事件处理等。希望通过分析实时数据流来提升技能的数据科学家和分析师也会在本书中发现价值,这是一个令人兴奋的转变,脱离以往主导这些领域的批处理生态。本书不要求读者有Apache Kafka 的相关经验,但对Java 编程语言有一些了解将使Kafka Streams 的教程更容易理解。
本书导览
本书的组织结构大致如下:
• 第1 章介绍了Kafka,并提供了一个运行单节点Kafka 集群的教程。
• 第2 章介绍了Kafka Streams,从背景和架构概述开始,最后以一个运行简单Kafka Streams 应用程序的教程结束。
• 第3 章和第4 章讨论了Kafka Streams 高层级DSL(领域特定语言)中的无状态和有状态操作符。每章都包含一个教程,演示如何使用这些操作符来解决一个有趣的业务问题。
• 第5 章讨论了时间在我们的流处理应用程序中扮演的角色,并演示了如何使用窗口化来执行更高级的有状态操作,包括窗口化关联和聚合。一个受预测性医疗保健启发的教程将演示关键概念。
• 第6 章描述了有状态处理的底层工作原理,并为有状态的Kafka Streams应用程序提供了一些运维技巧。
• 第7 章深入探讨了Kafka Streams 的低层级处理器API,该API 可用于调度周期性函数,并提供了对应用程序状态和记录元数据更精细的访问。本章的教程受到了物联网(Internet of Things)用例的启发。
• 第8 章介绍了ksqlDB,并讨论了这项技术的历史和架构。本章的教程将向你展示如何安装和运行一个ksqlDB 服务器实例,并使用ksqlDB CLI。
• 第9 章讨论了ksqlDB 的数据集成功能,这些功能由Kafka Connect 提供支持。
• 第10 章和第11 章详细讨论了ksqlDB SQL 方言,演示了如何使用不同的集合类型、执行推送查询和拉取查询等。这些概念将通过一个基于Netflix 用例的教程来介绍:跟踪各种节目/ 电影的变更,并使这些变更对其他应用程序可用。
• 第12 章提供了将Kafka Streams 和ksqlDB 应用程序部署到生产环境所需的信息。这包括相关监控、测试和容器化应用程序的信息。
源代码
本书的源代码可以在GitHub 上找到:。
每个教程的构建和运行说明将包含在代码仓库中。
Kafka Streams 版本
在撰写本书时,Kafka Streams 的最新版本是2.7.0。这是我们在本书中使用的版本,在很多情况下,代码也适用于Kafka Streams 库的旧版本或新版本。当新版本引入破坏性变更时,我们会努力更新源代码,并将这些更新分阶段提交到一个专门的分支中(例如,kafka-streams-2.8)。
ksqlDB 版本
在撰写本书时,ksqlDB 的最新版本是0.14.0。由于这项技术正在持续快速发展,并且在本书出版时尚未发布主要版本(例如1.0),因此与ksqlDB 的旧版本和新版本的兼容性保证较低。当新版本引入破坏性变更时,我们会努力更新源代码,并将这些更新分阶段提交到一个专门的分支中(例如,ksqldb-0.15)。然而,在运行本书中的示例时,建议不要使用低于0.14.0 的版本。
排版约定
本书使用以下排版约定:
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及在段落中引用程序元素,如变量或函数名、数据库、数据类型、环境变量、语句和关键字。
等宽加粗字体(Constant width bold)
显示应由用户直接输入的命令或其他文本。
等宽斜体(Constant width italic)
显示应替换为用户提供的值或由上下文确定的值的文本。
使用代码示例
补充材料(代码示例、练习等)可以在本书的GitHub 页面上找到,
。
如果您有技术问题或在使用代码示例时遇到问题, 请发送电子邮件至bookquestions@oreilly.com。
本书旨在帮助你完成工作。通常情况下,如果本书提供了示例代码,你可以在你的程序和文档中使用它。除非你要复制代码的很大一部分,否则无需联系我们获取许可。例如,编写一个使用本书中几段代码的程序不需要许可。销售或分发O’Reilly 图书中的示例需要许可。通过引用本书和引用示例代码来回答问题不需要许可。将本书中大量的示例代码整合到产品的文档中则需要许可。
我们赞赏但不强制要求署名。署名通常包括书名、作者、出版商和ISBN。例如:
“Mastering Kafka Streams and ksqlDB by Mitch Seymour(O’Reilly). Copyright 2021 Mitch Seymour, 978-1-492-06249-3”。
如果您认为对代码示例的使用超出了合理使用或上述许可的范围,请随时通过permissions@oreilly.com 与我们联系。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:
。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
O’Reilly Media, Inc.
141 Stony Circle, Suite 195
Santa Rosa, CA 95401
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书设有一个网页,其中列出了勘误、示例和任何附加信息。您可以在https://oreil.ly/mastering-kafka-streams 访问该页面。
对本书发表评论或提出技术问题请发送电子邮件至bookquestions@oreilly.com。
对本书中文版有任何建议可以发电子邮件到errata@oreilly.com.cn。
有关我们的书籍和课程的新闻和信息,请访问http://oreilly.com。
我们的Facebook:
。
我们的Twitter:
。
我们的YouTube:
。
致谢
首先,我要感谢我的妻子Elyse 和我的女儿Isabelle。写书是一项时间投入巨大的工作,你们在整个过程中的耐心和支持给了我极大的帮助。尽管我很享受写这本书,但我非常想念你们俩,并期待着能有更多的二人约会之夜和父女共处时光。
我还要感谢我的父母Angie 和Guy,感谢你们教会我努力工作的价值,并成为我源源不断的鼓励之源。多年来,你们的支持帮助我克服了许多挑战,我永远感激你们。
没有以下这些人,这本书就不可能完成,他们投入了大量时间审阅书稿内容,并在此过程中提供了宝贵的反馈和建议:Matthias J. Sax、Robert Yokota、Nitin Sharma、Rohan Desai、Jeff Bleiel 和Danny Elfanbaum。感谢你们所有人帮助我创作了这本书,它既是我的,也是你们的。
书中的许多教程都源于真实的业务用例,我非常感谢社区中每一位通过会议、播客、博客甚至面对面访谈等方式公开分享他们使用Kafka Streams 和ksqlDB经验的人。你们的经验帮助塑造了这本书,使其特别强调了实用的流处理应用。Nitin Sharma 还为受Netflix 启发的ksqlDB 教程提供了想法,Ramesh Sringeri分享了他在亚特兰大儿童医疗中心的流处理经验,这启发了预测性医疗保健教程。感谢两位。
特别感谢Michael Drogalis,他从这本书还只是一个大纲时起就给予了巨大的支持。同时,感谢让我联系上了本书的许多审稿人,还有慷慨撰写序的Jay Kreps。Yeva Byzek 和Bill Bejeck 的技术文章也为这本书应该达到的标准树立了很高的标杆。感谢你们两位在这一领域的贡献。
在我的职业生涯中,有很多人帮助我走到了今天。Mark Conde 和Tom Stanley,感谢你们为我打开了软件工程师的职业大门。Barry Bowden,感谢你帮助我成为一名更好的工程师,并成为一位出色的导师。Erin Fusaro,感谢你在我感到不知所措时总是知道该说什么,并且一直是我坚实的后盾。Justin Isasi,感谢你的不断鼓励,并确保我的努力不被忽视。Sean Sawyer,感谢你几年前的一个建议,让我尝试一个名为“Kafka Streams”的新事物,从此便一发不可收拾。Thomas Holmes 和Matt Farmer,感谢你们多次与我分享你们的技术专长,帮助我成为一名更好的工程师。还有Mailchimp 的数据服务团队,感谢你们帮助我解决了一些非常酷的问题,并用你们的工作激励了我。
最后,感谢我的朋友和家人,即使在我为了一个新项目消失数月之久时,你们一如既往地支持我。谢谢你们的守候,这一次真的很漫长。
目录
目录
序 1
前言 3
第一部分 Kafka
第1 章 初识Kafka 13
11 通信模型14
12 流是如何存储的 18
13 主题与分区 21
14 事件 23
15 Kafka 集群和代理服务器 24
16 消费组 26
17 安装Kafka 28
18 你好,Kafka 30
19 总结 33
第二部分 Kafka Streams
第2 章 初识Kafka Streams 37
21 Kafka 生态 37
211 Kafka Streams 之前 38
212 初识Kafka Streams 40
22 特性一览41
23 运维特性42
231 伸缩性 42
232 可靠性 43
233 可维护性 44
24 与其他系统的对比 44
241 部署模型 45
242 处理模型 45
243 Kappa 架构 46
25 应用场景48
26 处理器拓扑 49
261 子拓扑 52
262 深度优先处理 53
263 数据流编程的优点 54
264 任务和流线程 56
27 高层级DSL 与低层级处理器API 59
28 教程介绍:Hello, Streams 60
281 项目搭建 60
282 创建新项目 61
283 添加Kafka Streams 依赖 62
284 DSL 63
285 处理器API 66
29 流和表 68
291 流/ 表的二元性 72
292 KStream, KTable, GlobalKTable 73
210 总结 74
第3 章 无状态处理 75
31 无状态处理与有状态处理 76
32 教程介绍:处理一个推特流 77
33 项目初始化 78
34 添加一个KStream 源处理器 79
35 序列化/ 反序列化 83
351 构建自定义Serdes 85
352 定义数据类 86
353 实现自定义反序列化器 87
354 实现自定义序列化器88
355 构建Tweet Serdes 88
36 过滤数据90
37 分支数据92
38 翻译推文94
39 合并流 96
310 补全推文信息 97
3101 Avro 数据类 98
3102 情绪分析 100
311 序列化Avro 数据 103
3111 无注册表Avro Serdes 104
3112 Schema Registry– 感知型Avro Serdes 104
312 添加接收器处理器 106
313 运行代码 107
314 实证验证 107
315 总结 110
第4 章 Kafka 有状态处理 111
41 有状态处理的优点 112
42 有状态操作符预览 113
43 状态存储 114
431 共同特性 115
432 持久化存储与内存存储 117
44 教程介绍:电子游戏排行榜 118
45 项目搭建120
46 数据模型120
47 添加源处理器 122
471 KStream 123
472 KTable 123
473 GlobalKTable 125
48 注册流和表 126
49 关联 127
491 关联操作符 128
492 关联类型 129
493 协同分区 130
494 值关联器 133
495 KStream 关联KTable(关联players) 135
496 KStream 关联GlobalKTable(关联products)137
410 记录分组 138
4101 流分组 138
4102 表分组 139
411 聚合 140
4111 聚合流 140
4112 聚合表 143
412 整合所有步骤 144
413 交互式查询 147
4131 物化存储 147
4132 访问只读状态存储 148
4133 查询非窗口化的键值存储 149
4134 本地查询 152
4135 远程查询 152
414 总结 161
第5 章 窗口与时间 163
51 教程介绍:患者监测应用程序 164
52 项目设置166
53 数据模型167
54 时间语义167
55 时间戳提取器 170
551 包含的时间戳提取器170
552 自定义时间戳提取器172
553 注册带有时间戳提取器的流 173
56 窗口化流174
561 窗口类型 175
562 选择一个窗口 179
563 窗口聚合 180
57 发出窗口结果 182
571 宽限期 184
572 抑制(Suppression) 185
58 窗口化KTables 过滤和重新更改键 187
59 窗口化关联 188
510 时间驱动的Dataflow 189
5101 接收器告警191
5102 查询窗口化键值存储 192
511 总结 194
第6 章 高级状态管理 197
61 持久化态存储的磁盘布局 198
62 容错性 200
621 更改日志主题 200
622 备用副本 202
63 再均衡:状态(存储)的敌人 203
64 防止状态迁移 204
641 黏性分配 204
642 静态成员机制 207
65 降低再均衡的影响 208
651 增量协作再均衡 209
652 控制状态大小 210
66 利用记录缓存进行去重写入 217
67 状态存储监控 219
671 添加状态监听器 219
672 添加状态恢复监听器220
68 内置指标222
69 交互式查询 222
610 自定义状态存储 224
611 总结 224
第7 章 处理器API 227
71 何时使用处理器API 228
72 教程介绍:IoT 数字孪生服务 229
73 项目设置232
74 数据模型233
75 添加源处理器 235
76 添加无状态流处理器 237
77 创建无状态处理器 238
78 创建有状态处理器 241
79 使用Punctuate 的周期性函数 245
710 访问记录元数据 248
711 添加接收器处理器 249
712 交互式查询 250
713 整合所有组件 251
714 结合处理器API 与DSL 255
715 处理器和转换器 256
716 整合所有组件:重构 260
717 总结 262
第三部分 ksqlDB
第8 章 ksqlDB 入门 265
81 ksqlDB 是什么 266
82 何时使用ksqlDB 267
83 新型数据库的演进之路 269
831 Kafka Streams 集成 269
832 Connect 集成 272
833 ksqlDB 与传统SQL 数据库的比较 274
834 相似之处 274
835 不同之处 276
84 架构 278
841 ksqlDB 服务器 278
842 ksqlDB 客户端 280
85 部署模式282
851 交互模式 282
852 无头模式 283
86 教程 284
861 安装ksqlDB 284
862 运行ksqlDB 服务器 285
863 预处理主题 286
864 使用ksqlDB CLI 286
87 总结 289
第9 章 ksqlDB 的数据集成 291
91 Kafka Connect 概述 292
92 外部模式与嵌入模式的Connect 294
921 外部模式 294
922 嵌入模式 295
93 配置Connect 工作节点 296
94 教程 300
95 安装连接器 300
951 使用ksqlDB 创建连接器 302
952 展示连接器 304
953 描述连接器 305
954 删除连接器 306
96 验证源连接器 306
97 与Kafka Connect 集群直接交互 307
98 内省托管Schema 308
99 总结 308
第10 章 ksqlDB 基础流处理 309
101 教程:监控Netflix 的变更 310
102 项目配置 312
103 源主题 313
104 数据类型 314
105 集合 317
1051 创建源集合318
1052 WITH 子句 320
106 处理流和表 321
1061 展示流和表321
1062 描述流和表323
1063 修改流和表323
1064 删除流和表324
107 基础查询 325
1071 插入值 325
1072 简单的选择查询(瞬时推送查询) 327
1073 投影 328
1074 过滤 329
1075 扁平化/ 解嵌套复杂结构 331
108 条件表达式 332
1081 COALESCE 表达式 333
1082 IFNULL 表达式 333
1083 CASE 表达式 333
109 将结果写回Kafka(持久化查询)334
1010 整合所有组件 339
1011 总结 340
第11 章 使用ksqlDB 进行中级和高级流处理 341
111 项目设置 342
112 从SQL 文件启动环境 342
113 数据丰富化 344
1131 关联 344
1132 窗口化关联 350
114 聚合 353
1141 聚合基础 353
1142 窗口化聚合 356
115 物化视图 362
116 客户端 364
117 拉取查询 364
118 推送查询 368
119 函数和运算符 369
1191 运算符 369
1192 显示函数 370
1193 描述函数 371
1194 创建自定义函数 372
1195 自定义ksqlDB 函数的其他资源379
1110 总结 379
第四部分 通往产品之路
第12 章 测试、监控和部署 383
121 测试 384
1211 测试ksqlDB 的查询 384
1212 测试Kafka Streams 387
1213 行为测试 394
1214 基准测试 398
1215 Kafka 集群基准测试 400
1216 测试的最终思考 402
122 监控 403
1221 监控检查清单 403
1222 提取JMX 指标 404
123 部署 407
1231 ksqlDB 容器 407
1232 Kafka Streams 容器 409
1233 容器编排 410
124 操作 411
1241 重置Kafka Streams 应用程序 411
1242 限制应用程序输出速率 413
1243 升级Kafka Streams 415
125 升级ksqlDB 415
126 总结 416
附录A Kafka Streams 配置 417
附录B ksqlDB 配置 423
- 有电书房
- 扫描二维码,访问我们的微信店铺