O'REILLY® 基于 Apache Flink 的流处理 Fabian Hueske & Vasiliki Kalavri 著 崔星灿译 1rf:l 咆并负 l低必 基于Apache Flinl<的流处理 本资料仅为为个人学习 、 研究或者欣赏周法十 严禁网络传播、 嘀l用~~~斗SI惊l 川rf 违反者所引起的版权纠纷,造成的法律费辛苦辑被 请于24小时内删除本资料! E姐亘~ Beijing • Boston • Farnham • Sebastopol • Tokyo O'Reilly Media, Inc.授权中国电力出版社出版 中国电力出版社 Copyright© 2019 Fabian Hueske, Vasiliki Kalavri. All rights reserved Simplified Chinese Edition, jointly published by O'Reilly Media, Inc. and China Electric Power Press, 2019. Authorized translation of the English edition, 2019 O'Reilly Media, Inc., the owner of all rights to publish and sell the same. All rights reserved including the rights of reproduction in whole or in part in any form 英丈原版由 0’ReillyMedia, Inc. 出版20190 简体中丈版由中国电力出版社出版2019。 英文原版的翻译得到 O'Reilly Media, Inc. 的投权。 此简体中丈 版的出版和销售得到出版斗又和销售权的所有者 O'Reilly Media, Inc. 的许可。 版权所有,未得书面许可,本书的任何部分和全部不得以任何形式主制。 图书在版编目 (CIP)数据 基于ApacheFlink的流处理/(美)比安·霍斯克(Fabian Hueske) , (美)瓦西里基 · 卡拉 夫里(Vasiliki Kalavri)著:崔星灿译 一北京:中国电力出版社, 2020.l 书名原文: StreamProcessing with Apache Flink ISBN 978-7-5198-4011-2 I ①基… II. ①比…②瓦…③崔… Ill. ①数据处理软件 IV. ①TP274 提器5日军嚣罩苍冻三去?到二40蜡究或者欣赏用途 尺来|明;如专馆、同用牛资料 违虚辑矿蹦自干制份邮政持l翩法律责任自负 :a~;!: 据;t~ic范曾:即删除本资料! 责任校对: 黄蓓,闺秀英 装帧设计: Karen Montgomery,张健 责任印制: 杨晓东 印 刷:北京天字星印刷厂 版 次: 2020年1月第一版 印 次: 2020年1月北京第一次印刷 开 本: 750毫米×980毫米 l6开本 fn 张: 21.5 子,...._ 数: 407千字 fn 数: 0001-3000册 k 价: 88.00元 版权专有侵权必究 本书如有印装质量问题,我社营销中心负责退换 0 ’ Reilly Media, Inc.介绍 0’Reilly以“分享创新知识、改变世界”为己任。 40多年来我们一直向企业、个人提供成功 所必需之技能及思想,激励他们创新并做得更好。 0’Reilly业务的核心是独特的专家及创新者网络, 众多专家及创新者通过我们分享知识。我 们的在线学习(Online Learning)平台提供独家的直播培训||、 图书及视频,使客户更容易获 取业务成功所需的专业知识。几十年来0’R巳illy图书一直被视为学习开创未来之技术的权威 资料。我们每年举办的诸多会议是活跃的技术聚会场所,来自各领域的专业人士在此建立联 系,讨论最佳实践并发现可能影响技术行业未来的新趋势。 我们的客户渴望做出推动世界前进的创新之举,我们希望能助他们一臂之力。 1 、资料仅为为个人学习、研究或者欣赏用途 l 陀 严禁网络传播、商用本资料, ...J.L.-; 违反著讲自茵茵政较纠纷,造成的法律责任自负 "O'Reilly凭时圳 ~1~删除巫了制L百…业务。,, 一一一-Business 2_0 “0’Reilly Conference是聚集关键思想领袖的绝对典范。 ” 一-CRN “一本0’R巳illy的书就代表一个有用、有前途、需妥学习的主题。 ,, 一一一-IrishTimes “Ti m是位特立独行的商人,他不尤放眼于最长远、最广阔的领域,并且切实地按 照Yogi Berra的建议去做了: ‘如采你在路上遇到岔路口,那就走小F喜。 ’回顾过 去, Tim似乎每一次都选择了 小路, 而且有几次都是一闪即逝的机会,尽管大路也 不错。 ” 一一-LinuxJournal 译者序 Flink 源自 2010 年前后德国的三所高校合作研究的 Stratosph巳re 项目,后于 2014 年加入 Apache 基全会。 近些年,该项目凭借其灵活的事件时间处理机制、可靠的 状态存储支持以及贴合流处理的异步检查,点策咯,一跃成为流处理领域的 “新”秀, 其诸多优良特性也被很多其他同类系统所借鉴。 本书从分布式流处理的基本概念、 Flink 构成纽件、 Datastream API、状态管理、 外部连接器和部署运维等多个角度, 全面地辰示了使用 Apache Flink (1.7 版本)开发和管理流式应用的核心知识及注 意事项。 作者依靠其多年的学术积累,将很多复杂抽象的概念讲解得通俗易通;同 时在侧重编码的章节总结了大量来自 Flink 开源社区的常见问题,方便读者快速上 手。 或许由于时效性原因 , 书中并未涉及Flink SQL/Table API和批处理的相关内容, 但这丝毫没有影响整书的质量。 相信无论是在流处理领域初出茅庐的七听子, 还是在 本品槌佛海关手伞的本羔砸在阅藏起码i撮TX赏用途 严禁网络传播、商用本资料, 边境制?明~~耀~~苦飞、.攒南明负 他们二人也摄ifi;I拙仆盹J肉搏沪(荔轼棋大)在 川 SQL 方面 给予了我无数倾心指导,而 Visia 在我刚开始接触 目ink (Gelly 库)时帮助我解答 了很多疑问。 倾力翻译他们尽心完成的著作对我而言既是一种荣幸,也寄托了一份 感息。 本书在审校过程中得到了阿里巴巴的樊夕 、 付典、 云邪、云芬、山智、军长、茶干、 江杰、成F日、宝牛等众人的帮助,在此表示由衷的感谢。 同时还妥感谢我的导师禹 晓挥教授,师弟陈岳亭、李依凡以及妾子张哲在书籍翻译过程中给予的支持和协助。 个人水平有限,加之时间仓促,书中难免有此漏或农述不当之处, 恳请广大读者批 评指正,如有任何问题,可以发送到 [email protected]。 译者 目录 目U 昌............. 去争喃量翻来负空白:;:研究..或者欣-赏;用途: 事务型藏禁网络传播~ 商用本资料, .. 8 违反者所嚼起的版权纠纷·;·· 造成的法律责任自负 状态:~:据孟·~·~~~>:时内删除本资料:1::::;二二二::~~ 数据管道·····························……………………………··………........…................14 流式分析..……·········· 开源流处理的演变...................................………………………...........................16 历史回顾....... Flink 快览..........………….......…………··……………………………......…...... ... 18 运行首个 Flink 应用.......................................................................................20 小结............…….....................................................................................................23 第 2 章流处理基础......…···············……….................... 25 Dataflow 编程概述 .....…….......…………………………….......…......................25 Dataflow 图 ....................……………………….......…··……...........................25 数据并行和任务并行...................................…......…….........................26 数据交换策略…................….......……··…......…·············….........…............. . 27 并行流处理................-…··..... . ..…………………············…………...... 28 延迟和吞吐.... ..............…… -………………….........………...............28 数据流上的操作..................………··.... ...... .. ….......……………·············31 时间语义...…- -………….....…······· ……………………·…........…..............36 流处理场景下一分钟的含义 .........................................................................37 处理时间 . .. ...... ........….............………··…………··……….......38 事件时间….......…......................…… …………………………………........39 水位线................……….......…….......……......……………………..40 处理时间与事件时间....................................................................................41 状态和一致性模型····· .........................……………… . . ... .... ..... .. .. .. . ....... 41 任务故障................... .......-……·......... ..........……………………..........43 结果保障........… … ......... ……-………··….........…........…….......…......44 小吉吉........ ........... .............................. ..... ................................ 46 笨隅鞭嘴;可叫k夹在学三j·~··研究或者欣赏用遥7 系统λ禁川川专播汇商用本资料? ;; ::: 违反者’ 最起. J~…权纠纷呈 造成的法律贡任自5负 .. 任务才请示24小时内删除本资料! 51 高可用性设置.................. ................................... ................................ 52 Flink 中的数据传输............…...................... 基于信用值的流量控制... 任务链接… 事件时间处理... .........…·····…......……………………...... .. ····· ......... .......... 58 时间戳.......….......…………………… .... ··································· ...... 59 水位线传播和事件时间.. 时间戳分配和水位线生成-…………·····················…………………·…….........63 状态管理............. 算子状态.... 键值分区状态... I ii 目录 状态后端...... .................... .. .. .......... ..………….......…........68 有状态算子的扩缩容···································……………·………………..........68 检查点、保存点及状态恢复..........................................…………….........7 j 一致性检查点....... .....................…………………..........……............7 j 从一致性检查点中恢复..............................……………………...........72 Flink 检查点算法...................……….............................................74 检查点对性能的影响....................……………………………………..........79 保存点...................…………………………………E………………….... 79 小吉吉... ......... ..... ...... ............…...…………………………………………….... 82 第 4 章设置 Apache Flink 开发环境.............................. 83 所需软件... 在 IDE 中运行和调试 Flink 程序............…...........................…........…................ 84 在 IDE 中导入书中示例.............… 本资种使拘押带入学习气研究或者欣赏用途 在四中严嚷I阴整整传播、商用本资料, 叫着阳曰:版权-纠纷:1:造成的法律责任卓识 第 5 章 oa1京~~~~B1 附!峪抖抖! .91 Hello, Flink! .…………………………………………………………..……………………...... 91 设置执行环境.....................………………………………...... ······ .............归 读取输入流.........…………………...... ....................... ............ 94 应用转换....................………………….......….......…………….......…….. 94 输出结果························ .... .. ..................……………. . . ................ 95 执行···············…......................................................................... 96 转换操作.. .........................…………E…………………………….................96 基本转换......... ...................……….....................………............. 97 基于 KeyedStream 的转换·····························…........................................... 100 多流转换.……………….....……………······…………··……………........ 104 分发转换...... .. . .... ...............................………..................... 108 设置并行度.... .... .........………………………………………................... 111 目录 I iii 类型.................……….............…….......……....................................................... 1 口 支持的数据类型························………………………….................................. 113 为数据类型创建类型信息.........................................….............. 116 显式提供类型信息······················································································· 117 定义键值和引用字段············…................………………................................... 118 字段位置....... ..............…………………...................…….......…………… 118 字段表达式. ............................................................................................. 119 键值选择器........... ..................................…...........................……........120 实现函数..... ······ ............................................................................................ 121 函数类...........………………............................................................................ 121 Lambda 函数................. ......... ················ .. ..................... 122 富函数………......………………···············……... ........... ·········· .... .............. 123 导入外部和 Flink 依赖 ....................................................................................... 124 处理函时数间 1d件A 向副服输务出和发计送时数器据 31d句r000 CoProcessFunction ................................... ..................................... ... 140 窗口算子 ............…···············………………··…………................……...... .. 141 定义窗口算子..............................…........………··………………............ 142 内置窗口分配器.............……………………………………………………............ 143 在窗口上应用函数……......…········………·…………········…........…........ 148 自定义窗口算子..........……......….......…………………··········……........ 155 基于时间的双流 Join.....………………··…………················· ......…................ 167 基于间隔的 Jorn ......................……………·………………… ……............... 167 基于窗口的 Join ..................................…········………........................... 168 I iv 目录 处理迟到数据....................... ············….......………......……….................... 170 丢弃迟到事件.. ......................…………….......………. ... ...................... 170 重定向迟到事件......................…...............……………………………......... 171 基于迟到事件更新结果······················…..............……………………........... 172 小结.................................…………….......…......…………… ……………......... 174 第 7 章有状态算子和应用··········…·········…….............. 175 实现有状态函数.. .......................………………........……............ .. 176 在 Runtim巳Cont巳xt 中声明键值分区状态···························…........…......... 176 通过 ListCheckpointed 接口实现算子列表状态.………………........……... 180 使用 CheckpointedFunction 接口 .......….......….......… ................................. 187 接收检查点完成通知······································………………….............. 189 为有状态的应用开启故障恢复............................................................................ 190 防止状态泄露.... ········· ............................................................................ 195 更新有状态应用...................…········· ....................………………………....... 198 保持现有状态更新应用................................................................................199 从应用中删除状态.......................................................................................200 修改算子的状态...................……………… …·…………········· ............. 200 可查询式状态..................................................................................却2 可查询式状态服务的架构及启用方式.........................................................203 对外暴露可查询式状态................................................................................204 从外部系统查询状态...........………..............................................................205 小结.................... ...... .... ...................... ....... ....... .. .......................207 目录 I v