概览Aloha 是一个基于 Scala 实现的分布式的任务调度和管理框架,提供插件式扩展功能,可以用来调度各种类型的任务。Aloha 的典型的应用场景是作为统一的任务管理入口。例如,在数据平台上通常会运行各种类型的应用,如 Spark 任务,Flink 任务,ETL 任务等,统一对这些任务进行管理并 ...
阅读全文 »

前面的文章我们介绍了 StreamGraph 的生成,这个实际上只对应 Flink 作业在逻辑上的执行计划图。Flink 会进一步对 StreamGraph 进行转换,得到另一个执行计划图,即 JobGraph。 JobVertex在 StreamGraph 中,每一个算子(Operator) 对应 ...
阅读全文 »

在编写 Flink 的程序的时候,核心的要点是构造出数据处理的拓扑结构,即任务执行逻辑的 DAG。我们先来看一下 Flink 任务的拓扑在逻辑上是怎么保存的。 StreamExecutionEnvironmentStreamExecutionEnvironment 是 Flink 在流模式下任务执行 ...
阅读全文 »

Docker最初风靡一时的 Paas 项目提供的“应用托管”,其最核心的组件就是一套应用的打包和分发机制。为了对多用户的应用环境进行隔离,会调用操作系统的 Cgroups 和 Namespace 机制为每一个应用单独创建一个称作“沙盒”的隔离环境,然后在“沙盒”中启动这些应用进程。这就是所谓的“容器 ...
阅读全文 »

scala.util.DynamicVariable,这个类有点类似于 java 里面 ThreadLocal,适合用来保存和传递上下文(Context)相关的信息。 Scala 的官方文档 是这么介绍的: DynamicVariables 提供了一种绑定机制,即变量的当前值是通过动态范围来查找的 ...
阅读全文 »

SQL 解析器可以将 SQL 语句解析成一棵抽象语法树(AST)。遍历 AST,从所有的叶子节点中可以找到本条SQL 语句中需要的所有表。 在 Calcite 中,解析出的 AST 是以 SqlNode 的形式表现的,一个 SqlNode 即是 AST 中的一个节点。SqlNode 有众多的子类,但 ...
阅读全文 »

模式匹配和匿名函数Scala 的模式匹配可能是最常用到的代码片段,match 和 case 配合使用,应该是 Scala 程序员最常写的代码片段: 1234v match { case Some(str) => ... case None => ...} ...
阅读全文 »

从状态说起状态 (State) 是 Flink 程序中构建复杂逻辑的基本组件。流处理中的状态可以视作算子上的记忆能力,可以保留和已经处理完的输入相关的信息,并对后续输入的处理造成影响。与之相反,流处理中的无状态操作只会考虑到当前处理的元素,不会受到处理完毕的元素的影响,也不会影响到后续待处理的元素。 ...
阅读全文 »

gRPC 是 Google 开源的一款高性能 RPC 框架,前两天发布了 1.0 版本。RPC (Remote Procedure Call) 即远程过程调用,通过 RPC ,客户端的应用程序可以方便地调用另外一台机器上的服务端程序,因而常被应用于分布式系统中。 RPC 框架通常使用 IDL (In ...
阅读全文 »