Streaming



高性能 & 低延迟


Flink的流计算实现,仅需要很低的配置,就能实现高吞吐量和低延迟的流数据处理。

下面的图表显示了一个分布式流数据的计数任务,的性能和cpu核数的比值。




flink 流程告警 flink流处理_批处理



正好一次语义状态的计算


流数据应用可以在计算过程中保持自定义状态(state)。

Flink's checkpoint 的机制保证了,当发生故障时,状态的仅一次的语义。


flink 流程告警 flink流处理_flink 流程告警_02



自带流量控制(限流)的连续流数据模型


Flink的streaming runtime 具有天然的限流功能(背压): 放慢下游的操作。上游数据量太大的时候,自动反压上游的操作。


flink 流程告警 flink流处理_flink 流程告警_03



轻量级分布式快照实现的故障容错机制


这是一种轻量级的机制, 它允许系统维持高吞吐率的同时,提供强大的一致性保证。


flink 流程告警 flink流处理_批处理_04



Batch and Streaming in One System



流处理和批处理同时运行


Flink 使用了一个共同的runtime对于流处理和批处理.

批处理作为流处理的一种特殊场景。


flink 流程告警 flink流处理_批处理_05



内存管理


应用能够,使用超出主内存的内存大小,同时减少GC次数.


flink 流程告警 flink流处理_迭代_06



迭代和增量迭代


Flink针对迭代计算这个方面进行了专业的支持 (集群学习领域和图计算这两个领域,经常需要迭代计算).

增量迭代可以通过计算所需的依赖,使计算更快速的收敛。


flink 流程告警 flink流处理_迭代_07



性能优化


自动优化利用,从而避免这些昂贵的花销。同时,中间数据是可以缓存起来的。


flink 流程告警 flink流处理_批处理_08



APIs and Libraries



批处理程序


DataSet  API可以让你写出漂亮的类型安全和易于维护的代码,目前支持Java和Scala。它支持比keyvalue更广泛的数据类型,和丰富的操作。

下面这个例子展示了PageRank 算法的主要逻辑。


case class Page(pageId: Long, rank: Double)
case class Adjacency(id: Long, neighbors: Array[Long])

val result = initialRanks.iterate(30) { pages =>
  pages.join(adjacency).where("pageId").equalTo("pageId") {

    (page, adj, out : Collector[Page]) => {
      out.collect(Page(page.id, 0.15 / numPages))
        
      for (n <- adj.neighbors) {
        out.collect(Page(n, 0.85*page.rank/adj.neighbors.length))
      }
    }
  }
  .groupBy("pageId").sum("rank")
}



流处理程序


DataStream API支持,在流数据中进行功能丰富的transformations ,同时还支持用户定义的状态,和灵活的窗口。

下面的例子展示了如何计算滑动窗口的文字出现频率。


WindowWordCount in Flink's DataStream API


case class Word(word: String, freq: Long)

val texts: DataStream[String] = ...

val counts = text
  .flatMap { line => line.split("\\W+") } 
  .map { token => Word(token, 1) }
  .groupBy("word")
  .window(Time.of(5, SECONDS)).every(Time.of(1, SECONDS))
  .sum("freq")



lib包的生态系统


Flink's 栈提供了多种 libraries 应对各种不同的场景: 机器学习, 图计算, 和 相关性处理(Relational Data Processing).

这些libraries 在加快开发中,目前还处于测试阶段。




Ecosystem



范围广泛的集成


Flink 集成了大多数数据处理领域的开源项目。

Flink 可以跑在yarn上面,和hdfs集成,拉kafka上面的数据,还可以执行Hadoop的代码,和连接各种数据存储。


flink 流程告警 flink流处理_flink 流程告警_09