【Flink从入门到精通 00】流式处理概念Mac上搭建Flink 1.14.0环境并编写Demo

1. 准备环境

这里主要介绍Mac系统下的环境搭建,其他操作系统可直接查看官网或者我个人的翻译博客

1.1 安装并查看Java版本号

Flink要求Java版本为Java8或Java11及以上。

java -version

image-20211227205947419

1.2 安装Flink

查看Flink信息

brew info apache-flink

image-20211227210406923

安装Flink

brew install apache-flink

image-20211227211214355

1.3 检查安装

flink --version

image-20211227211256908

1.4 启动Flink

# 切换到Flink安装目录下的bin目录
cd /opt/homebrew/Cellar/apache-flink/1.14.0/libexec/bin
# 启动Flink集群
./start-cluster.sh

image-20211227211922992

1.5 查看Web页面

FlinkWeb页面

image-20211227211956055

1.6 删除

brew remove apache-flink

2. Demo项目

2.1 新建一个maven项目

image-20211227095714663

2.2 编写代码

2.2.1 引入依赖
<!-- flink-core -->
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-core -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-core</artifactId>
    <version>${FLINK_VERSION}</version>
    <scope>provided</scope>
</dependency>

<!-- flink-streaming -->
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-streaming-java_${SCALA_VERSION}</artifactId>
    <version>${FLINK_VERSION}</version>
    <scope>provided</scope>
</dependency>
2.2.2 创建SocketStreamWordCount
package com.suci.knowledge.firststep;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

/**
 * flink入门案例
 * Socket发送文本,flink对文本进行单词统计
 * @Author: rugu
 * @Date: 2021/12/27 10:50
 */
public class SocketStreamWordCount {
  public static void main(String[] args) throws Exception {

      final int ARGS_LENGTH = 2;

      // Socket参数校验
      if (args.length < ARGS_LENGTH){
          System.err.println("ERROR:参数校验失败,请输入正确的参数 <hostname> <port>");
          return;
      }

      String hostname = args[0];
      String port = args[1];

      // 创建Flink运行环境
      StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

      // 添加数据源
      DataStream<String> socketTextStream = env.socketTextStream(hostname, Integer.parseInt(port));

      // 对数据分组统计
      DataStream<Tuple2<String, Integer>> sum = socketTextStream.flatMap(new SocketStreamFlatMapFunction())
              .keyBy(0)
              .sum(1);

      sum.print();
      // 运行程序
      env.execute("SocketStream");

  }

    /**
     * 自定义FlatMapFunction
     * 对文本进行切割,并组装成tuple
     */
    private static class SocketStreamFlatMapFunction implements FlatMapFunction<String, Tuple2<String, Integer>> {

        @Override
        public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
            String[] words = s.split(" ");
            for (String word : words) {
                collector.collect(new Tuple2<String, Integer>(word, 1));
            }
        }
    }
}

2.2 打包运行

  1. 将项目打成jar包
mvn clean package -Dmaven.test.skip=true

image-20211227213303608

  1. 监听7777端口
nc -l 7777

image-20211227213731789

  1. 运行程序
    进入flink的bin目录下,执行以下命令
flink run -c com.suci.knowledge.firststep.SocketStreamWordCount /Users/apple/Desktop/flink-learning/flink-core/target/flink-core-1.0-SNAPSHOT.jar 127.0.0.1 7777

Jar包路径根据个人代码位置进行替换

image-20211227214022394

  1. 进入Web UI查看运行的程序

Web UI:http://localhost:8081/

image-20211227214115691

  1. 查看统计结果

使用tail命令监控程序的实时输出,注意将文件路径切换为你的路径。

cd /opt/homebrew/Cellar/apache-flink/1.14.0/libexec/log
tail -f flink-apple-taskexecutor-0-apples-MacBook-Pro.local.out

image-20211227215534252

Web UI上也可以看到总共接收了12条记录。

在这里插入图片描述

总结

本文主要介绍了在Mac环境下如何使用HomeBrew安装Flink,并运行了一个Demo程序,希望能对你有所帮助。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程理想国

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值