在 Windows 中使用 Flink 进行 Socket 流处理
对于开发人员来说,能够在 Windows 环境中进行调试和测试,然后将调试好的程序部署到集群中运行,是非常理想的开发流程。下面,我们将通过一个简单的 Socket 程序,演示如何在本地监控端口并实时提取数据。
示例代码
以下是一段 Flink 代码,用于实现 Socket 流处理:
import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time
object SocketWindowWordCount {
def main(args: Array[String]): Unit = {
val port: Int = try {
ParameterTool.fromArgs(args).getInt("port")
} catch {
case e: Exception => {
System.out.print("No port specified. Please run 'SocketWindowWordCount'")
return
}
}
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
val text = env.socketTextStream("localhost", port, '\n')
val windowWordCount = text
.flatMap { w => w.split("\\s+") }
.map { w => WordWithCount(w, 1) }
.keyBy("word")
.timeWindow(Time.seconds(5), Time.seconds(1))
.sum("count")
windowWordCount.print().setParallelism(1)
env.execute("Socket Window WordCount")
}
}
case class WordWithCount(word: String, count: Long)
关键点解析
- 时间包的使用:注意
org.apache.flink.streaming.api.windowing.time.Time
的引入,这是时间窗口功能的关键。 - Flink 的引入路径:要使用
org.apache.flink.streaming.api.scala._
,不要直接引入org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
。
配置 Windows 的 nc 端口
在进行 Socket 流处理之前,我们需要配置 Windows 的 nc 端口。首先,从 Netcat 官网 下载 nc.exe
。
-
解压文件:将下载的文件解压到指定目录。
-
进入目录:在 CMD 环境中进入到解压后的目录。
-
启动 nc:使用以下命令开始监听端口 9000:
nc -L -p 9000 -v
在 IDEA 中设置 Flink 参数
在 IDEA 中进行调试时,设置程序的输入参数:
-
设置端口参数:指定端口为
--port 9000
,然后运行程序。
-
运行程序:运行程序后,CMD 端口中输入的数据将通过 Flink 实时处理并显示结果。
实时查看结果
在 CMD 端口中输入数据后,可以在 Flink 中看到实时处理的结果:
至此,在 Windows 中配置 Flink Stream 流处理的过程已经完成。