分布式计算的概念听起来很高深,其背后的思想十分朴素,即分而治之(Divide and Conquer),又被称为分治法。分治法将一个原始问题分解为子问题,多个子问题分别在多台机器上求解,借助必要的数据交换和合并策略,将子结果汇总即可求出最终结果。具体而言,不同的分布式计算系统所使用的算法和策略根据所要解决的问题各有不同,但基本上都是将计算拆分,把子问题放到多台机器上,分而治之地计算求解。分布式计算的每台机器(物理机或虚拟机)又被称为一个节点。
第一代被广泛采用的流处理框架是Strom。在多项基准测试中,Storm的数据吞吐量和延迟都远逊于Flink。Storm只支持”at least once”和”at most once”,即数据流里的事件投递只能保证至少一次或至多一次,不能保证只有一次。对于很多对数据准确性要求较高的应用,Storm有一定劣势。第二代非常流行的流处理框架是Spark Streaming。Spark Streaming使用mini-batch的思想,每次处理一小批数据,一小批数据包含多个事件,以接近实时处理的效果。因为它每次计算一小批数据,因此总有一些延迟。但Spark Streaming的优势是拥有Spark这个靠山,用户从Spark迁移到Spark Streaming的成本较低,因此能给用户提供一个批量和流式于一体的计算框架。