个人手机版网站建设,电影网站模板html,wordpress多站点模式插件,摄影师网站模板什么是Flink Flink是一个分布式的、高性能的、可伸缩的、容错的流处理引擎#xff0c;它支持批处理和流处理#xff0c;并提供了丰富的 API 和库#xff0c;是实时数据处理的理想选择 由Java 和 Scala 实现的#xff0c;所以所有组件都会运行在Java 虚拟机【单个JVM也可以】…什么是Flink Flink是一个分布式的、高性能的、可伸缩的、容错的流处理引擎它支持批处理和流处理并提供了丰富的 API 和库是实时数据处理的理想选择 由Java 和 Scala 实现的所以所有组件都会运行在Java 虚拟机【单个JVM也可以】上 不需要依赖于hadoop集群的组件优缺点 优点 事件驱动型。Flink的事件驱动型应用是一类具有状态的应用它从一个或多个事件流提取数据并根据到来的事件触发计算、状态更新或其他外部动作。 高吞吐、低延迟、高性能。Flink被设计在所有常见的集群环境中运行以内存执行速度和任意规模来执行计算。 强大的容错机制。Flink使用两阶段提交协议来解决容错问题。 缺点 Flink的API较难使用。 Flink的社区相对较小。应用场景 事件驱动的应用Flink应用每接受一条数据就会处理一条数据处理之后就会触发一个动作同时也可以将处理结果写入外部消息队列中其他Flink应用再消费。 智能推荐 根据用户历史的购买行为通过推荐算法训练模型预测用户未来可能会购买的物品。【例如实时统计每隔1秒统计最近2秒单词出现的次数可以直接使用Flink训练的API】 复杂事件处理 比较常见的案例主要集中于工业领域例如对车载传感器、机械设备等实时故障检测。 实时计算 实时监控、实时报表实时化采集、加工流式数据存储、流数据分析、实时仓库。架构组件 作业管理器JobManager 控制一个应用程序的主进程每个应用程序都会被一个不同的JobManager 所控制执行。JobManager 会向资源管理器ResourceManager请求执行任务必要的资源也就是任务管理器TaskManager上的插槽slot。一旦它获取到了足够的资源就会将执行图分发到真正运行它们的TaskManager 上。而在运行过程中JobManager 会负责所有需要中央协调的操作比如说检查点checkpoints的协调。 资源管理器ResourceManager 负责管理任务管理器TaskManager的插槽slotTaskManger 插槽是 Flink 中定义的处理资源单元。Flink 为不同的环境和资源管理工具提供了不同资源管理器比如YARN、Mesos、K8s以及 standalone 部署。当 JobManager 申请插槽资源时ResourceManager会将有空闲插槽的 TaskManager 分配给 JobManager。如果 ResourceManager 没有足够的插槽来满足 JobManager 的请求它还可以向资源提供平台发起会话以提供启动 TaskManager进程的容器。另外ResourceManager 还负责终止空闲的 TaskManager释放计算资源。 任务管理器TaskManager 是一个工作进程,通常在 Flink 中会有多个 TaskManager 运行每一个 TaskManager都包含了一定数量的插槽slots。插槽的数量限制了 TaskManager 能够执行的任务数量。启动之后TaskManager 会向资源管理器注册它的插槽收到资源管理器的指令后TaskManager 就会将一个或者多个插槽提供给 JobManager 调用。JobManager 就可以向插槽分配任务tasks来执行了。在执行过程中一个 TaskManager 可以跟其它运行同一应用程序的 TaskManager 交换数据。 分发器Dispatcher 负责接收用户提交的作业并且将作业提交给作业管理器。工作原理 自身 ①由应用端(App)提交应用给分发器(dispatcher) ②Dispatcher启动并提交应用给JobManager ③JobManager向resourcemanager请求slots(插槽)资源 ④resourcemanager收到了JobManager的资源请求后就去启动TaskManager ⑤TaskManger启动之后会去resourcemanager注册slots ⑥resourcemanager收到TaskManger的注册slots请求后会给TaskManger发出提供slot的指令 ⑦TaskManager接到指令后JobManager会被告知已有所需数量的slots使用。 ⑧JobManager得知有足够的slots可以使用后就会提交要执行的任务给TaskManager ⑨与此同时TaskManager之间也会进行数据的交换 依赖于Hadoop集群的Yarn ①Flink客户端上传flink的jar包和配置到HDFS ②客户端提交job到resourcemanager(yarn) ③resourcemanager启动ApplicationMaster同时ApplicationMaster启动JobManager之后jobmanager从HDFS上加载Flink的jar包和配置环境(除了yarn的resourcemanagerflink也有自己的resourcemanager只不过它不管理资源而是由yarn的resourcemanager管理资源) ④jobmanager向resourcemanager申请资源 ⑤jobmanager申请到资源后启动TaskManager同样TaskManager向flink的ResourceManager注册slot因此jobmanager得知有足够的slots可以使用就会将job任务提交给TaskManager去执行同时taskmanager会从HDFS加载flink的jar包和环境配置。基本概念 处理无界和有界数据 无界流 有定义流的开始但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理因为输入是无限的在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件例如事件发生的顺序以便能够推断结果的完整性。 有界流 有定义流的开始也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序所以并不需要有序摄取。有界流处理通常被称为批处理常踩的坑 数据延迟当外部组件往Kafka topic在写数据而同时Flink正在消费这个topic的数据如果外部组件出现问题就会发生数据晚到的现象。 乱序数据由于Flink能通过延迟水印来支持乱序所以即使数据出现乱序Flink也可以处理。 日志记录过多在处理窗口时需要测量花费的时间只要计算窗口所需的时间超过1分钟就记录下所有可能的数据过多的记录会降低性能。 卡住作业的调查需要找到一种简单的方法来定位作业疑似卡住时当前正在运行的代码段。初学者 Flink Shell 开发的时候容易出错如果每次都打包进行调试比较麻烦并且也不好定位问题可以在scala shell命令行下进行调试