Recovering是Flink on Zeppelin上生产环境的最后第二块拼图。需要说明的是这里的Recovering和Flink的 job recovery不是一个概念,这里的Recovering是指当Zeppelin Server进程挂掉之后重新起来的时候再连接到原来running的interpreter 进程。
例如,你在Zeppelin上跑了一个flink job来做实时dashboard。如下图,
如果你的Zeppelin进程挂掉重启之后,虽然Flink Job不会受影响,但是Zeppelin 前端的实时dashboard就不可用了,因为Zeppelin Server和Flink Job之间的连接已经断了。
在Zeppelin 0.9中,我们增加了Recovery的feature,也就是说如果Zeppelin Server重启之后就可以自动连接到还在running的interpreter进程(包括Flink interpreter),你可以重新看到前端的实时dashboard。
配置Recovery
启动recovery非常简单,用户需要在zeppelin-site.xml中配置以下两个property
<property>
<name>zeppelin.recovery.storage.class</name>
<value>org.apache.zeppelin.interpreter.recovery.FileSystemRecoveryStorage</value>
<description>ReoveryStorage implementation</description>
</property>
<property>
<name>zeppelin.recovery.dir</name>
<value>recovery</value>
<description>Location where recovery metadata is stored</description>
</property>
zeppelin.recovery.storage.class 是用来存储interpreter的进程信息,包括机器名和端口。默认值是
org.apache.zeppelin.interpreter.recovery.NullRecoveryStorage, 不存放任何进程信息(也就是不能recovery)。
我们需要设置成org.apache.zeppelin.interpreter.recovery.FileSystemRecoveryStorage,
FileSystemRecoveryStorage是基于Hadoop hdfs实现的,也就是说进程信息都是存放在hdfs上,如果你没有用hadoop,那么就是在本地路径。
zeppelin.recovery.dir 就是存放进程信息的路径。
验证Recovery
下面我们通过一个简单的例子要验证recovery是否成功运行。在这个例子中,我首先会跑一个Flink SQL的Job,然后将结果显示在Zeppelin页面,然后我会杀掉Zeppelin,那么前端自然就看不到结果了,然后重启Zeppelin,Zeppelin会自动连接到之前在跑的Flink Job,然后前端会继续更新数据,具体可以看下面这个视频。
如果有碰到任何问题,请加入下面这个钉钉群讨论。
Apache Zeppelin公众号