新书速评: Stream Processing With Apache Flink(既生瑜何生亮)

分享 未结
1 1 0 6
小编 2019-06-13发布
收藏 点赞
来源: 阿莱克西斯

这本《Stream Processing With Apache Flink》是今年(2019)4月底刚出的新书,大概一年前预购的,话说我都忘记我买过这本书了... 接到快递时候一脸懵逼… —_—

如果没有读过《Streaming Systems》(以后简称《SS》)的话, 《Stream Processing With Apache Flink》(以后简称《Flink》)估计我会给5星。这本书其实还不错,可惜在它问世之前,我已经遇到了我的2018 三神书之一的《SS》, 其在立意的高度,涉及的广度,和思考的深度3方面完爆这本Flink的书。当然SS的难度也稍高,SS难度是10的话,这本难度大概在3-5之间(当然我读SS的时候stream的理解还很浅薄,读完SS之后,又去刷了一些streaming相关的论文,所以以目前的知识储备再来评价Flink这本书,难度分可能会不客观的压的低些。。。);

当然即使读过SS(关于这本书的内容和评价详见阿莱克西斯:评:Streaming System(简直炸裂,强势安利),本文不再赘述),再读这本Flink也是有一定收获的。它在一定程度上补足了SS没有提供的很多细节,使得可以从具体的Api,系统组件,部署等方方面面来具体理解一个流系统框架是如何工作的。(SS通过Apache Beam model出发,虽然用Beam的api给出了一些示例程序,但是没有具体讲这些API是怎么被具体实现来支持的,比如Beam model over Spark或者over Flink的时候,具体哪些service是怎么样配合来支持实现beam mode的各级语义的;当然,对分布式系统设计比较熟悉的同学可以大概率的猜出来大概会怎么实现,对于这些同学一边去猜Flink这本书每一章会讲怎么实现,然后读过去一一验证自己的想法,会是一个很愉快很有意思的过程);从这个角度来说SS讨论的层级较高较抽象,甚至讨论了还没有“任何实现的未来”, 所以SS没看懂的同学可以用Flink这本作为补充读物,通过一个实际的如何支持trigger,watermark,window,event time的framework实现,来深入理解SS的内容。特别是SS在end 2 end exact once message processing这个话题里,只是在一个抽象高度上统一的点出了实现所需要的重点和注意事项,只是蜻蜓点水式的(但是没有细节的)讨论了一下每一个流框架是怎么实现的,对这个话题没有什么背景知识的同学有可能比较难理解这个流系统的“重点难题”,而Flink这本书则详细通过例子和图示讲解了Flink魔改后的chandy-lamport算法如何支撑end2end exact once message processing的。

这是一本很典型的“技术书“,有很多的工程细节的知识点还是很有意思的,对于只对Flink感兴趣或者需要直接使用flink的同学来说应该还是很有用的。比如它介绍了使用key based Stream的时候,如果key的range会随着时间扩大的话,那么基于key的state就需要application自己去注意clean up,否则它会持续积累直到内存枯竭;再比如使用save point的时候,最好save之后直接quit掉application,不然save point之后如果发生check point,sink所连接的外部系统的状态就会随check point前进,从而和save point时的状态不在一个global consistent的snapshot里,这时候从save point replay就会给你一个surprise(sink连接的外部系统会接收重复信息); 比如讲解了为什么即使Flink接Kafka的sink processor使用了2PC还是在某些edge case下无法做到end2end exact once message processing...等等;这些零碎分散在全书里的小技巧和小知识点,应该都是工程实践积累下来的珍贵教训,还是值得一看的。

Flink这本书没有介绍Flink对于batch processing的功能和知识点。。。遗憾。。。

也没讲stream join (SS讲的很详细

最后再次强荐Streaming System~

PS: 流系统的东西我的论文专栏其实也介绍过不少了,这里推荐一起都读了(知识的相互辉映会让理解更深入):

  1. Google的MillWheel的论文(阿莱克西斯:简单解释MillWheel: Google的internal Stream System),Chandy-Lamport算法(阿莱克西斯:简单解释: 分布式快照(Chandy-Lamport算法))Flink对Chandy-Lamport的魔改 (阿莱克西斯:(十)简单解释: 分布式数据流的异步快照(Flink的核心))Google的DataFlow model论文(看了SS的话就不用看了)

最后,为今年7月低才出的《Stream Processing with Apache Spark》这本书提前默哀5分钟.... (micro-batch也能叫streaming嘛… ╮( ̄▽ ̄"")╭ )

回帖
  • 消灭零回复