Flink():
实时性高,吞吐量高,离线+实时
算子较为丰富
Spark Streaming():
有延迟(毫秒级别),吞吐量高,离线+实时
算子丰富,可以做机器学习,图计算(生态圈)
flink的批处理实际上流处理,只是把一个批处理当作是一个大的流,而spark的实时实际上时批处理,是极小的批次,比如说把1秒的一个批次进行一次处理,可以看作是流处理,但是会有延迟
Spark做实时计算,原来是一次性提交一个大的RDD,想要做实时计算,需要把不断的读取数据,形成多个小的RDD,每隔一段时间就会产生一个小的RDD,然后将小的RDD提交到集群
下面是在使用Scala对flink和spark进行编程时的一个对比
flink实时的wordcount:
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.streaming.api.windowing.time.Time
/**
* @Author: zxl
* @Date: 2019/1/12 10:16
* @Version 1.0
* 通过实时收集 某个端口的数据, 然后进行wordcount
*/
object FlinkDemo01 {
def main(args: Array[String]): Unit = {
// flink 的一个工具类,可以获取参数
val tool = ParameterTool.fromArgs(args)
// 获取hostname,如果没有就取默认值
val hostname = tool.get("hostname","192.168.136.150")
val port = tool.getInt("port",9999)
// env 相当于spark中的StreamContext上下文
val env = StreamExecutionEnvironment