前言
关于Flink
随着5G和物联网技术的不断发展,数据流正在源源不断地在各类终端上生成,企业需要一种高吞吐、低延迟的数据处理方式以应对更大规模的数据,Flink正是一种针对数据流的大数据处理引擎。比起已有的大数据处理引擎Hadoop和Spark,Flink集流处理和批处理于一体,具有高吞吐、低延迟,支持状态和故障恢复等优势。尤其是其流处理技术为业界领先水平,被广泛应用在阿里巴巴、腾讯、华为等公司的生产环境中。随着流处理需求的爆炸式增长、开源社区和各大公司的投入和推广的增加,以及Flink本身的不断成熟,Flink将成为企业必备的大数据处理引擎之一。
编写初衷
我一直从事大数据相关的开发和研究工作,非常关注大数据行业的发展,先后接触了Hadoop、Hive、Kafka、Spark、TensorFlow等大数据中间件,在大数据的流处理和批处理方向上都有一定的实际工作经验。2019年年初,随着阿里巴巴收购了位于柏林的Flink母公司,Flink声名鹊起,开始得到广泛的关注,并逐渐被部署到很多公司的生产环境中。我当时所在的小米大数据团队已经对Flink技术进行了大量的调研,并将一些流处理任务从Spark Streaming迁移到Flink上。这些Flink任务不仅取得了高吞吐、低延迟的预期效果,相比Spark Streaming,还节省了大量计算资源。可以说,Flink意味着更高的性能、更低的成本。
Flink在不少公司的生产环境中取得了巨大成功已经是不争的事实。但我在学习和使用Flink的过程中发现,Flink相比Kafka或Spark来说,涉及的概念更多、学习难度更大、掌握起来更具挑战性。没有流处理实战经验的读者可能很难理解有状态的计算和数据一致性投递保障等问题。作为一项较新的技术,中文领域里对Flink的介绍相对比较少,缺少具有系统性的教程。为了学习和使用Flink,我阅读了Flink的英文文档、分析了Flink的源码,参考了不少书籍和论文,并且与我的同事以及Flink开发者讨论、切磋,慢慢对Flink有了更为全面的认识。为了让更多的开发者能够快速上手这项技术,我希望将我学到的知识分享出来。
大数据经过十几年的发展,逐渐从批处理向流处理演进,从早期的MapReduce编程模型到后来的数据流图,技术正在飞速迭代,但对技术背后的分布式计算原理而言,仍然是万变不离其宗。同时,不同的业务系统关注的核心指标有所区别,采用的技术栈也截然不同。当前大数据领域中各类中间件蓬勃发展,一大批优秀的工具相继涌现,就像春秋战国时期的百家争鸣一般。Flink的一些设计思路和实现细节多多少少受到了其他技术的影响,可谓博采众长。有其他大数据开发工具基础的读者可以很容易理解Flink的一些概念,学习Flink同样可以让我们从更多角度了解其他大数据中间件的各项特性。
如何阅读这本书
Flink流处理的概念颇多,主要包括时间与窗口、状态和检查点等内容,部分概念听起来容易,用起来却很难。对于没有相关经验的读者,直接上手Flink有一定的难度。本书避免直接搬运官方文档内容,而是对几大核心概念做了梳理。当然,Flink作为一个整体,其各个核心概念之间的联系非常紧密,知识点之间难免有相互穿插的地方。读者在前面章节遇到的一些疑问,会在之后的章节中得到解答。在此希望读者在阅读和学习时要保持一定的耐心。
本书前两章主要作为相关技术背景的铺垫,包括对常见大数据技术的概述和对大数据必备编程知识的梳理。第3章重点介绍Flink的设计与运行原理,首次阅读后读者应该能够对Flink产生一个概括性的印象,随着对Flink各项概念的深入理解,重新阅读第3章或许能够有一些新的收获。第4章到第7章主要介绍DataStream API上的流处理,分别针对数据流、时间和窗口、状态和检查点、输入输出等Flink编程不可或缺的环节。第8章主要关注在Flink SQL上进行流处理,可以说是第4章到第7章的集大成者。第9章将介绍如何部署和配置Flink作业。当然,包括DataSet API、机器学习、图计算在内的很多技术本书没能够全面覆盖,感兴趣的读者可以继续探索。
另外,本书附赠了示例程序,可供读者下载学习。“纸上得来终觉浅,绝知此事要躬行。”在阅读本书之时,我建议读者准备一个实验环境,将本书的示例程序和代码运行一遍。动手实践的收获将远大于字面上的阅读。
限于本人水平有限,编写时间仓促,书中难免会出现一些疏漏,恳请读者批评指正。
感谢
小米是一家具有开放理念和开源精神的公司。感谢小米大数据团队的同事们,他们前期做了大量工作,带领我进入Flink的世界。感谢陈帅、曾杰瑜、张新星、杨飞等同事帮我打开Flink的大门,感谢董事长雷军和副总裁崔宝秋等高管在小米开源环境上所做的巨大投入。
感谢Apache Flink社区众多开发者对Flink的贡献,他们为开发者提供了一款开源的大数据处理引擎。很多开发者依托各种方式、在各大平台不遗余力地传授和讲解Flink知识。感谢Flink社区提供的源码、技术文档、邮件列表等各类资料,这些资料是我学习Flink技术的重要入口。感谢Flink社区中曾经耐心回复我问题的唐云、伍翀等人,感谢Stephan Ewen、Fabian Hueske等创始团队成员在一些英文文档中对Flink技术的深入解析。
本书受到国家重点研发计划课题“自适应、可伸缩的大数据存储系统”(2018YFB1004401)和北京理工大学大数据系统软件国家工程实验室的资助。这里要感谢中国人民大学杜小勇教授、陈红教授和陈跃国教授给我提供了宽松自由的研究环境。
最后,感谢我的爱人、父母、岳父母对我的写作和研究的支持。没有家人的付出和支持,我是不可能完成本书的写作的。
作者
2021年1月