怎么制作公司自己网站,信誉好的营销网站建设,松岗建网站,深圳做招牌的广告公司流处理
批处理应用于有界数据流的处理#xff0c;流处理则应用于无界数据流的处理。 有界数据流#xff1a;输入数据有明确的开始和结束。 无界数据流#xff1a;输入数据没有明确的开始和结束#xff0c;或者说数据是无限的#xff0c;数据通常会随着时间变化而更新。 在…流处理
批处理应用于有界数据流的处理流处理则应用于无界数据流的处理。 有界数据流输入数据有明确的开始和结束。 无界数据流输入数据没有明确的开始和结束或者说数据是无限的数据通常会随着时间变化而更新。 在Flink中应用程序由数据流组成这些数据流可以经由用户自定义的算子进行转换。数据流最终形成有向图这些图以一个或多个源Source开始以一个或多个接收器Sink结束。
通常来说转换Transformation与算子之间存在一对一的映射关系但这并不是绝对的一个转换也可以包含多个算子。
Flink可以处理来自数据流源例如Kafka的实时数据同时也可以处理来自数据源的历史数据。 并行数据流
Flink中的程序本质上是并行和分布式的。在执行期间流具有一个或多个流分区每个算子都拥有一个或多个子任务。子任务之间彼此相互独立在不同的线程、机器、或容器中执行。
子任务的数量就代表了该算子的并行度parallelism同一程序的不同算子可能会具有不同的并行度。 两个算子之间可以通过一对一或重新分发的方式传递数据。 一对一该模式会保留元素的分区和排序。上图中Source到map()的过程就属于一对一 重新分发 该模式会更改流的分区上图中map()到keyBy()/window()的过程就属于重新分发 keyBy()-通过散列重新分区broadcast()-广播rebalance()-随即分发
及时流处理
对于大多数流应用程序来说能够使用用于处理实时数据的相同代码重新处理历史数据并无论如何都能产生确定性、一致性的结果这是非常有价值的。
同等重要的是注意事件发生的顺序而不是交付处理的顺序并能够推断一组事件何时或应该完成。
通过使用记录在数据流中的事件时间戳而不是使用处理数据的机器的时钟可以满足及时流处理的这些要求。
有状态流处理
Flink的操作是可以有状态的。这意味着如何处理一件事可能取决于之前所有事件的累积。
Flink 应用程序在分布式集群上并行运行。
有状态算子的并行实例集实际上是一个分片键值存储。每个并行实例负责处理一组特定键的事件这些键的状态保存在本地。
下图显示了作业图中前三个算子以 2 的并行度运行的作业最终由并行度为1的接收器结束。第三个算子是有状态的第二个和第三个算子之间正在发生随机的网络连接。 状态始终在本地访问这有助于 Flink 应用程序实现高吞吐量和低延迟。 你可以选择将状态保留在 JVM 堆上如果状态开销太大可以选择将其存储于高效率的磁盘中。 通过状态快照实现容错
Flink能够通过状态快照和流回溯的组合提供容错。这些快照将捕获分布式管道以及整个作业图的状态将其记录在队列中当发生故障时进行回溯恢复至最近的状态。快照的捕获是异步进行的并不会影响正在处理的任务。