flink实战—编写流处理任务:入门

概述

本文讲述如何通过flink的scala接口来编写流处理任务。通过本文的描述,就可以通过简介的scala语言编写更加强大的流处理任务了。

环境准备

  • IntelliJ IDEA
  • scala-2.11

创建一个maven工程

在IDEA中创建一个maven工程,取一个名称:StreamingWordCount。步骤如下:

  • 点击IDEA的"Create New Project",在下一个步骤选择"Maven",点击"Next"
  • 填写以下的值:
    • GoupId: com.Test
    • ArtifactID: StreamingWordCount
    • Version: 默认值
    • 点击:“next”
  • 填写
    • Project Name: StreamingWordCount
    • 选择一个保存工程的路径
    • 点击: “finish”

对工程进行配置

修改pom.xml文件

在pom.xml文件中添加以下依赖项:

    <dependencies>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-scala_2.11</artifactId>
        <version>1.7.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-scala_2.11</artifactId>
        <version>1.7.1</version>
        <scope>provided</scope>
    </dependency>
    </dependencies>

添加scala的sdk依赖包

  • 点击菜单:“File” -> “Project Structure …”
  • 在"Project Settings"菜单中选择"Libraries",并点击中间栏目的"+“号,选择"Scala SDK”,在弹出的对话框中选择"Maven-2.11.8"这个一项,并点击"OK"。
  • 回到菜单后,选择"Modules",在右边的"Dependencies"中勾选"scala-sdk-2.11.8"
  • 点击“OK”

编写wordcount代码

  • 右键点击"src->main->java",选择"New->Scala Class",选择"Object",填写类名:StreamingWordCount

  • 编写代码
    把以下代码复制到该scala文件中:

import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time

object StreamingWordCount {
  def main(args: Array[String]) {

    println("start word count")
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val text = env.socketTextStream("localhost", 9999)

    val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
      .map { (_, 1) }
      .keyBy(0)
      .timeWindow(Time.seconds(5))
      .sum(1)

    counts.print()
    println("end word count")

    env.execute("Window Stream WordCount")
    println("exit now!")
  }
}
  • 注意:若还有错误,可以IDEA在下面弹出的:“auto import”,就能纠正错误。

编译和打包

打包配置

  • 点击菜单:“File” -> “Project Structure …”
  • 在"Project Settings"菜单中选择"Artifacts",并点击中间栏目的"+“号,选择"JAR->From modules with dependencies…”"
  • 在弹出的菜单中,点击“…”,选主类:StreamingWordCount
  • 其他使用默认配置,点击"OK",回到"Artfacts"的面板。
  • 我们不需要把依赖的scala的包都打进来,所以,要在最右边的"Output Layout"标签页减去依赖包,也就是减去以下两项:
Extracted 'scala-library-2.11.8.jar' ...
Extracted 'scala-reflect-2.11.8.jar' ...
  • 点击"OK"

开始打包

  • 依次点击菜单: “Build-> Build Artifacts”
  • 选择刚才我们定义的打包名称,并点击箭头,选择"Action-> Build"

若没有任何错误,我们的包就打好了,此时就可以放到flink上去运行了。

在工程的out目录下,会有一个打好的jar包,目录如下:

StreamingWordCount/out/artifacts/StreamingWordCount_jar/StreamingWordCount.jar

把任务提交到flink

安装flink集群,并启动

这篇文章安装好flink,并启动。
注意,我这里运行的是单机环境。

启动服务端口

在运行flink的机器上,开启一个新的终端,并输入命令:

$ nc -lk 9999

提交并运行流计算任务

把StreamingWordCount.jar包复制到运行flink机器的/home/ubuntu/taskpath/目录下:

$ ./bin/flink run /home/ubuntu/taskpath/StreamingWordCount.jar
  • 在nc -lk 9999 的终端中输入一下文字:
this is a test
test is ok
  • 查看计算结果

在flink的log目录下,查看输出:

cd log
$ cat flink-*-taskexecutor-1-*.out
(this : 1)
(ok : 1)
(test : 2)
(a : 1)
(is : 2)

说明,任务已经执行了。但注意:这个程序的时间窗口是5秒,也就是说每5秒统计一次流中的数据,对单词进行计数。
可以看出,该程序比storm的简介很多,通过flink提供的算子,写起来方便很多。

总结

本文描述了编写flink流计算任务的全过程。通过本文的学习和实践,就可以编写更加复杂的流处理程序。

### 在 IntelliJ IDEA 中配置 Flink 环境 #### 1. 安装并配置 Flink 开发环境 为了在本地环境中顺利开发和测试 Flink 应用程序,在 Mac 上使用 IntelliJ IDEA 建议按照以下方式设置: - **安装 JDK 和 Maven**:确保已正确安装 Java Development Kit (JDK),因为这是构建和运行基于 Java 或 Scala 的项目所必需的基础组件;Maven 则用于管理项目的依赖关系。 - **下载 Apache Flink 发行版**:访问官方网站获取最新稳定版本,并解压至合适位置。对于 Windows 用户来说,可以通过执行 `start-cluster.bat` 文件来快速启动单节点集群[^4]。 - **创建新工程或导入已有项目**:打开 IDE 并新建一个 Maven 工程或者克隆 GitHub 上开源的 Flink 示例仓库作为起点。 #### 2. 添加必要的库文件 为了让应用程序能够识别 Flink API 及其扩展模块,需向 pom.xml 文件中加入官方推荐的核心依赖项[^1]: ```xml <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-java --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>${flink.version}</version> </dependency> <!-- Add other dependencies as needed... --> </dependencies> ``` #### 3. 设置远程调试参数 当目标是在生产环境下对作业进行诊断时,则可以考虑采用远程调试的方式来进行问题排查。这涉及到修改 JobManager 的启动脚本以包含 JDWP(Java Debug Wire Protocol)选项,从而允许外部工具通过网络端口与其建立连接[^2]。 例如,在 Linux/CentOS 系统上的操作步骤可能如下所示: ```bash cd ${FLINK_HOME}/bin/ ./jobmanager.sh start cluster -Djobmanager.web.port=8081 \ -D akka.remote.netty.tcp.hostname=localhost \ -D jobmanager.rpc.address=localhost \ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ``` 上述命令中的 `-agentlib:jdwp=` 参数指定了监听地址为任意 IP 地址 (`*`) ,端口号设为 5005 。注意这里的 `suspend=n` 表示不会暂停等待客户端连入后再继续初始化进程。 而对于想要直接从IDE内部发起请求的情况而言,只需简单调整一下 flink-conf.yaml 配置文档里的相应条目即可满足需求[^3]。 #### 4. 构建与部署流程 完成以上准备工作之后就可以着手编写业务逻辑代码了。待一切就绪后,利用内置插件一键打包成 JAR 包形式再上传给远端服务器执行。当然也可以借助于 CI/CD 流水线自动化整个过程提高效率。 最后提醒一点就是记得定期清理缓存以及重启服务以便及时生效所做的更改!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值