通过IDEA在Window上启动Flink WebUI

本文介绍了如何在Window环境下通过IDEA启动并保持Flink WebUI运行,以便于在本地进行Flink程序的调试。首先,需要确保Window上已经部署了Flink、配置好Java环境及IDEA开发环境。接着,添加必要的Maven依赖,并编写RunWebUIWithEmptySteaming.java代码,以实现Flink程序空跑,从而保持WebUI的激活状态。

一、引言

在学习Flink的过程中,如果想要使用Flink WebUI,需要使用云主机/虚拟机搭建Flink集群,才可以启动Flink WebUI。说实话,这种方式太麻烦了。

经过一番探索,发现在IDEA执行Flink程序的时候,可以启用WebUI来帮助调试,但任务结束后WebUI也跟着关闭了。因此产生了启动一个Flink程序空跑,在Window上维持Flink WebUI运行的想法。

二、实现

前置条件

  1. Window本地已部署Flink

  1. Java环境

  1. IDEA开发环境

Maven依赖

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <target.java.version>1.8</target.java.version>
    <maven.compiler.source>${target.java.version}</maven.compiler.source>
    <maven.compiler.target>${target.java.version}</maven.compiler.target>
    <scala.binary.version>2.11</scala.binary.version>
    <flink.version>1.13.5</flink.version>
    <log4j.version>2.16.0</log4j.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-walkthrough-common_2.12</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <!-- 运行时开启WebUI进行调试 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-runtime-web_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
</dependencies>

代码

RunWebUIWithEmptySteaming.java

import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.configuration.RestOptions;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;

/**
 * 通过IDEA在Window上启动Flink WebUI
 * 启动一个job空跑,防止WebUI随着作业结束而关闭
 */
public class RunWebUIWithEmptySteaming {

    public static void main(String[] args) throws Exception {
        
        Configuration config = new Configuration();
        // 指定WebUI界面的访问端口,默认是8081
        config.setString(RestOptions.BIND_PORT, "18081");

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(config);
        env.setRuntimeMode(RuntimeExecutionMode.STREAMING);

        DataStreamSource<String> source = env.addSource(new MyEmptyStreamSource());

        source.print();

        // Edge(Inprivate模式)打开WebUI地址
        OpenBrowseWithUrl("http://localhost:18081");

        env.execute(RunWebUIWithEmptySteaming.class.getCanonicalName());

    }

    private static void OpenBrowseWithUrl(String url) throws Exception {

        String command = String.format("C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe -inprivate %s", url);
        Runtime.getRuntime().exec(command);

    }
}


class MyEmptyStreamSource implements SourceFunction<String> {
    private volatile boolean isRunning = true;

    @Override
    public void run(SourceContext<String> ctx) throws Exception {
        while (isRunning) {
            Thread.sleep(10000);
        }
    }

    @Override
    public void cancel() {
        isRunning = false;
    }
}

### 如何在IDEA中配置和使用Flink WebUI 为了在IDEA中成功配置并使用Flink WebUI,需要完成以下关键步骤:添加必要的Maven依赖、正确设置Flink运行环境以及启动带有Web UI的本地执行环境。 #### 1. 添加Maven依赖 在项目的`pom.xml`文件中,添加Flink Web UI相关的依赖。以下是具体的依赖配置: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-runtime-web_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> ``` 上述代码片段中的`${scala.binary.version}`和`${flink.version}`应替换为实际使用的Scala版本和Flink版本[^1]。 #### 2. 配置Flink运行环境 通过Java代码配置Flink运行环境,并指定Web UI的绑定端口。以下是示例代码: ```java import org.apache.flink.configuration.Configuration; import org.apache.flink.configuration.RestOptions; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; public class FlinkWebUIExample { public static void main(String[] args) throws Exception { Configuration configuration = new Configuration(); configuration.setString(RestOptions.BIND_PORT, "8081"); // 设置Web UI的端口号 StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(configuration); // 在这里定义你的Flink任务逻辑 env.execute("Flink Web UI Example"); } } ``` 通过调用`StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(Configuration)`方法,可以创建一个带有Web UI的本地执行环境。此方法确保了Flink Web UI在本地调试时可用[^2]。 #### 3. 启动Flink Web UI 完成上述配置后,运行程序。Flink Web UI将自动启动,默认情况下可以通过浏览器访问`http://localhost:8081`查看DAG图、Watermark等信息[^3]。 #### 4. 常见问题排查 - 如果Web UI无法正常加载,请检查是否正确设置了`RestOptions.BIND_PORT`。 - 确保`flink-runtime-web`依赖已正确导入,并且与当前使用的Flink版本一致[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值