flink 测试demo

文章展示了如何搭建一个基于Flink1.13.1的流处理测试环境,包括Maven项目配置、prop.json参数设置,以及FlinkTest1类中DataStream的使用和测试。代码中包含了从Kafka读取数据并进行转换的操作,同时配置了checkpoint参数。此外,还使用JUnit进行了测试,并读取prop.json文件内容作为程序参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flink 测试demo

以flink1.13.1为例

1. maven

<project>
  <groupId>com.example</groupId>
  <artifactId>flink-example</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <!-- Flink依赖 -->
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-java</artifactId>
      <version>1.13.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-streaming-java_2.12</artifactId>
      <version>1.13.1</version>
    </dependency>
    <!-- JUnit依赖 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <!-- Flink插件 -->
      <plugin>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-maven-plugin</artifactId>
        <version>1.13.1</version>
        <executions>
          <execution>
            <id>package</id>
            <goals>
              <goal>package</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

2. prop.json 参数

{
  "topic":"pupu_main",
  "kafka_brokers":"127.0.0.1:9092",
  "group_id":"pHistTask",
  "s3_path":"/Users/Desktop/code/test",
  "checkpoint.interval":"60000",
  "checkpoint.timeout": "1200000"
}

3. code

3.1 FlinkTest1.class

package demo.test;

import com.alibaba.fastjson.JSON;
import lombok.Builder;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;


@Builder
public class FlinkTest1 {

    public void start(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
        ParameterTool params = ParameterTool.fromArgs(args);
        System.out.println(JSON.toJSON(params));
        env.setParallelism(1);
        // 构建测试数据
        DataStream<String> dataStream = env.fromElements("Hello", "World");
        // 执行测试操作
        DataStream<String> resultStream = dataStream.map(String::toUpperCase);
        // 验证测试结果
        resultStream.print();
        env.execute();
    }
}

3.1 FlinkTest1.class

package demo.test;

import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.flink.api.java.utils.ParameterTool;
import org.junit.Test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class FlinkDemoTest {

    @Test
    public void FlinkTest1() throws Exception {
        String[] args = readFile("prop.json");
        FlinkTest1.builder().build().start(args);
    }

    private String[] readFile(String propFileName) throws Exception {
        List<String> sList = new ArrayList<>();
        File file = new File(Objects.requireNonNull(FlinkDemoTest.class.getClassLoader().getResource(propFileName)).getPath());
        JSONObject jsonObject = JSON.parseObject(FileUtil.readString(file, "UTF-8"));
        for (String key : jsonObject.keySet()) {
            String value = jsonObject.getString(key);
            sList.add("--" + key);
            sList.add(value);
        }
        return sList.toArray(new String[0]);
    }

    public static void main(String[] args) throws Exception {
        List<String> sList = new ArrayList<>();
        File file = new File(Objects.requireNonNull(FlinkDemoTest.class.getClassLoader().getResource("prop.json")).getPath());
        JSONObject jsonObject = JSON.parseObject(FileUtil.readString(file, "UTF-8"));
        for (String key : jsonObject.keySet()) {
            String value = jsonObject.getString(key);
            sList.add("--" + key);
            sList.add(value);
        }
        String[] result = sList.toArray(new String[0]);
        ParameterTool params = ParameterTool.fromArgs(result);
        System.out.println(JSON.toJSONString(params.toMap()));
    }

}

3.3 结果

在这里插入图片描述

### Flink 示例程序演示 #### 使用Flink DataStream API进行流式数据处理的词频统计示例 为了展示如何利用 Apache Flink 进行实时数据分析,这里提供了一个简单的例子——从 Kafka 中读取消息并执行单词频率计数[^1]。 ```java import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import java.util.Properties; public class WordCountFromKafka { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "test"); FlinkKafkaConsumer<String> kafkaSource = new FlinkKafkaConsumer<>( "input-topic", new SimpleStringSchema(), properties); DataStream<String> stream = env.addSource(kafkaSource); // 执行Word Count逻辑 DataStream<Tuple2<String, Integer>> wordCounts = stream .flatMap(new Tokenizer()) .keyBy(value -> value.f0) .sum(1); wordCounts.print(); env.execute("Word Count from Kafka Example"); } } ``` 此代码片段展示了如何配置一个基于 JavaFlink 应用程序来连接到 Kafka 主题,并对收到的消息应用基本的文字分割和平铺映射操作以计算每个唯一词语的数量。最后的结果会被打印出来供进一步分析或存储。 对于想要更深入了解这个过程的人而言,在启动上述应用程序前还需要完成一些准备工作: - **安装和设置好本地环境**:确保已经正确设置了 JDK 和 Maven 或 Gradle 构建工具;下载并解压最新版本的 Flink 发行版文件[^5]。 - **准备输入源**:在这个特定的例子中,需要有一个正在运行的 Kafka 实例以及相应的主题用于发送测试消息给 Flink 流处理器。 - **编译项目并将作业提交至集群**:可以通过命令 `mvn clean package` 来构建 JAR 文件,之后使用类似于 flink run -c com.example.WordCountFromKafka target/your-flink-app.jar 命令向 Flink 提交任务[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值