From a4be6d16d8eccc07acfe137a23c5790d14149964 Mon Sep 17 00:00:00 2001 From: zeekling Date: Sun, 26 Nov 2023 17:13:10 +0800 Subject: [PATCH] =?UTF-8?q?Yarn=E7=8A=B6=E6=80=81=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yarn/yarn_event.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 yarn/yarn_event.md diff --git a/yarn/yarn_event.md b/yarn/yarn_event.md new file mode 100644 index 0000000..9c8bd2a --- /dev/null +++ b/yarn/yarn_event.md @@ -0,0 +1,58 @@ + +# 简介 + +Yarn采用了基于事件驱动的并发模型: + +- 所有状态机都实现了EventHandler接口,很多服务(类名通常带有Service后缀)也实现了该接口,它们都是事件处理器 +- 需要异步处理的事件由中央异步调度器(类名通常带有Dispatcher后缀)统一接收/派发,需要同步处理的事件直接交给相应的事件处理器。 + +![pic](https://pan.zeekling.cn/zeekling/hadoop/event/state_event_001.png) + +某些事件处理器不仅处理事件,也会向中央异步调度器发送事件。 + + +# 事件处理器定义 + +事件处理器定义如下: + +```java +@SuppressWarnings("rawtypes") +@Public +@Evolving +public interface EventHandler { + + void handle(T event); + +} +``` + +只有一个handler函数,如参是事件: + + +# 中央处理器AsyncDispatcher + +AsyncDispatcher 实现了接口Dispatcher,Dispatcher中定义了事件Dispatcher的接口。主要提供两个功能: +- 注册不同类型的事件。 +- 获取所有的事件处理器。 + +```java +@Public +@Evolving +public interface Dispatcher { + + EventHandler getEventHandler(); + + void register(Class eventType, EventHandler handler); + +} +``` + +AsyncDispatcher实现了Dispatcher接口,也扩展了AbstractService,表明AsyncDispatcher也是一个服务: + +```java +public class AsyncDispatcher extends AbstractService implements Dispatcher { + ... +} +``` + +