注意:
通常我们都是使用富函数中的open()方法来建立连接接口,open方法可以在算子运行之前只会执行一次,什么是富函数在其他后面有讲到。
1 SinkFunction接口
- DataStream API为我们提供了一个专门的SinkFunction接口以及它对应的RichSinkFunction抽象类。
- SinkFunction接口内有一个方法(invoke方法)(我们可以使用Context对象来访问当前的处理时间、水位线等):
void invoke(IN value, Context ctx)
2 读取数据源并输出_代码示例
案例:读取数据源并输出到socket中
class SimpleSocketSink(val host: String, val port: Int) extends RichSinkFunction[(String, Int)] {
var socket: Socket = _
var writer: PrintStream = _
override def open(parameters: Configuration): Unit = {
socket = new Socket(InetAddress.getByName(host), port)
writer = new PrintStream(socket.getOutputStream)
}
override def invoke(value: (String, Int), context: SinkFunction.Context[_]): Unit = {
writer.println(value._1, value._2)
writer.flush()
}
override def close(): Unit = {
//关闭写入器何套接字
writer.close()
socket.close()
}
}