作者回复: Storm和Flink的共同之处在于它们旨在通过流水线数据传输实现低延迟流处理,其实说实话Flink的流水线引擎内部看起来还是有点类似于Storm的,比方说Flink的并行任务的接口类似于Storm的bolt,然后Flink中也提供了其他数据输入的算子,类似于Spot。但是,与Storm相比,Flink提供了更高级的API,Flink的DataStream API不仅能够实现Spot,Bolt等全部功能,同时提供Map,GroupBy,Window和Join等高级接口,而这些用户如果使用Storm时都要手动实现许多此功能,程序编写非常费时; 另一个区别是处理语义。Storm能保证至少一次处理,而Flink只提供当且仅当一次处理语义。虽然Storm使用记录级别的确认,但Flink使用了Chandy-Lamport算法的变体,数据源会定期将Barrier注入数据流。每当Operator会接收到这样的Barrier,然后就会检查其内部状态。当下游算子中全部接收到Barrier时,才会触发计算操作,保证了数据一致性。 另外比如内存管理这块,Flink能够脱离JVM进行处理数据的内容管理,内部全部将数据序列化成Bytes类型存储,并提供了一套非常完善的数据序列化和反序列化的机制,这样能保障在大数据量的情况对内存的合理利用; 还有很多地方,比如如何支持带反压数据流模型这块,Flink就能够提出基于Credit的反压模型,能够有效保障系统的稳定运行,而Storm里面还要借助于Zookeeper实现。 总之对比的地方还是很多的,后面的课程我们再遇到具体的细节方面会把这些框架进行横向对比。 谢谢
作者回复: Spark在2.x版本后加入了StructedStreaming模块,与流处理引擎Sparkstreaming一样,用于处理流数据。 StructedStreaming主要用于处理结构化流数据,也就是执行在SparkSQL上,对于SparkStreaming主要还是执行在DataStream/RDD上。 另外StructedStreaming可以支持Micro-batch模式和Continuous Processing两种模式,其中Continuous Processing模式实现了通过long-running的task,"不停地"循环从数据源获取数据并处理,从而实现真正的流处理。但是该模式下,当前只能支持简单的projection式(如map,filter,mappartitions等)操作, 和Flink相比还有很多改进的地方; 另外在Job生成方式上也有一定的区别:SparkStreaming主要是通过Timer定时器定时生成job,StructStreaming主要是通过Trigger触发计算的; 希望能对你有帮助,谢谢
作者回复: 好想法。只要数据能传输到网络,怎么处理都行,Flink也能直接支持Socket套接字数据直接接入,需要做下数据协议上的转换就行,然后就可以在Flink里面处理了。
作者回复: 流处理是实时计算,Rest API是实时请求,流处理可以理解为异步的计算操作
作者回复: Gitee上有课件
作者回复: 估计在1.12基本上就完成对Source的重构了,这样数据接入进来就是DataStream,就基本上是批流一体了