Flink特点与Spark的比较

Flink特点:

  1. 重要特点:

    1.1事件驱动型,是具有状态的应用,从事件流中提取数据,并根据时间来触发计算、更新状态或其他操作。SparkStreaming就是为批次处理,这是与Flink的最大区别。
    1.2.流与批的世界观:其中,批处理的特点是,有界、持久、大量,数据是一个批次一个批次的来,通常用于T+1模式。流处理的特点,无界、实时,数据是一条一条的来,通常用于T+0的模式。在Spark中,一切都是由批组成,离线数据是一个大批次,实时数据是一个小批次。在Flink中,一切都是由流组成,离线数据是有界的流,实时数据是一个没有界的流。
    分层API:Flink特点与Spark的比较_第1张图片
    最底层级的抽象仅仅提供了有状态的流,他将通过过程函数,也就是Process Function嵌入到DataStream API中。Process Function与DataStream API相集成,使其可以对某些特定的操作进行底层的抽象,允许用户可以处理来自一个或多个数据流的事件,并使用一致的容错状态。另外用户可以注册事件事件并处理时间回调,使程序可以处理复杂的计算。
    大多数应用并不需要上述的底层抽象,而是针对核心API(Core APIs) 进行编程,比如DataStream API(有界或无界流数据)以及DataSet API(有界数据集)。这些API为数据处理提供了通用的构建模块,比如由用户定义的多种形式的转换(transformations),连接(joins),聚合(aggregations),窗口操作(windows)等等。DataSet API 为有界数据集提供了额外的支持,例如循环与迭代。这些API处理的数据类型以类(classes)的形式由各自的编程语言所表示。
    Table API是以表为中心的声明式编程,其中表可能会动态变化。用户可以自定义UDF进行扩展,虽然不如核心API更具表达能力但是用起来却更为简洁。
    Flink提供的最高层级的抽象是sql,这一层抽象在语法与表达能力上与Table API类似,是以sql查询的表达形式展现。Sql与Table API交互密切,同时sql查询可以直接在Table API定义的表上执行。
    当然,目前Flink很少用于批处理,不如Spark成熟,所以DataSet使用的并不是很多,Flink API和Flink sql也并不完善。1.12.0,已经完成实现了真正的流批一体,可以处理流式数据,也可以处理离线数据。

  2. Spark 与Flink:

    Spark与Flink 最主要的差别就在于计算模型的不同。Spark采用了微批处理模型,而Flink采用了基于操作符的连续流模型。如果要在而这种选择出一个来进行里数据处理,推荐使用Flink,因为,Flink窗口灵活,并且拥有Exactly Once语义的保证。Flink特点与Spark的比较_第2张图片

你可能感兴趣的:(flink,flink,spark,大数据)