[In A Word]In A Word章14 Flink 的Akka

Akka在Flink中的使用

Akka在Flink中用于三个分布式技术组件之间的通信,他们是JobClient,JobManager,TaskManager。Akka在Flink中主要的作用是用来充当一个coordinator的角色。

 

Flink为什么要用Akka来代替RPC

原先的RPC服务存在的问题:
没有带回调的异步调用功能,这也是为什么Flink的多个运行时组件需要poll状态的原因,这导致了不必要的延时。
没有exception forwarding,产生的异常都只能简单地吞噬掉,这使得在运行时产生一些非常难调试的古怪问题
处理器的线程数受到限制,RPC只能处理一定量的并发请求,这迫使你不得不隔离线程池
参数不支持原始数据类型(或者原始数据类型的装箱类型),所有的一切都必须有一个特殊的序列化类
棘手的线程模型,RPC会持续的产生或终止线程
采用Akka的actor模型带来的好处:

Akka解决上述的所有问题,并对外透明
supervisor模型允许你对actor做失效检测,它提供一个统一的方式来检测与处理失败(比如心跳丢失、调用失败…)
Akka有工具来持久化有状态的actor,一旦失败可以在其他机器上重启他们。这个机制在master fail-over的场景下将会变得非常有用并且很重要。
你可以定义许多call target(actor),在TaskManager上的任务可以直接在JobManager上调用它们的ExecutionVertex,而不是调用JobManager,让其产生一个线程来查看执行状态。
actor模型接近于在actor上采用队列模型一个接一个的运行,这使得状态机的并发模型变得简单而又健壮

posted on 2019-09-19 16:50  深圳私塾  阅读(184)  评论(0编辑  收藏  举报

导航