02_flink 流处理

Streaming


高性能 & 低延迟

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

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

Performance of data streaming applications


正好一次语义状态的计算

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

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

Exactly-once Semantics for Stateful Computations


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

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

Continuous Streaming Model


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

Flink的故障容错机制是通过Chandy-Lamport分布式快照实现的。这是一种轻量级的机制, 它允许系统维持高吞吐率的同时,提供强大的一致性保证。

Lightweight Distributed Snapshots

Batch and Streaming in One System


流处理和批处理同时运行

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

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

Unified Runtime for Batch and Stream Data Analysis


内存管理

Flink 在JVM内实现了它自己的内存管理.应用能够,使用超出主内存的内存大小,同时减少GC次数.

Managed JVM Heap


迭代和增量迭代

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

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

Performance of iterations and delta iterations


性能优化

批处理,在花销昂贵的操作(shuffle和sort)的情况下会自动优化利用,从而避免这些昂贵的花销。同时,中间数据是可以缓存起来的。

Optimizer choosing between different execution strategies

APIs and Libraries



批处理程序

Flink的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 在加快开发中,目前还处于测试阶段。

Flink Stack with Libraries

Ecosystem



范围广泛的集成

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

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

Other projects that Flink is integrated with
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值