Apache flink 在不使用netcat服务器的情况下从套接字读取Flink中的字符串数据流

Apache flink 在不使用netcat服务器的情况下从套接字读取Flink中的字符串数据流,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我有一个案例场景,其中我有一个流生成器客户端,它生成多个流,合并它们并将其发送到套接字,我希望Flink程序作为服务器来监听它。正如我们所知,必须首先打开服务器,以便它能够侦听客户端请求。我试着用下面给出的代码来做同样的事情 public static void main(String[] args) throws Exception { //setting the envrionment variable as StreamExecutionEnvironment S

我有一个案例场景,其中我有一个流生成器客户端,它生成多个流,合并它们并将其发送到套接字,我希望Flink程序作为服务器来监听它。正如我们所知,必须首先打开服务器,以便它能够侦听客户端请求。我试着用下面给出的代码来做同样的事情

 public static void main(String[] args)  throws Exception {

    //setting the envrionment variable as StreamExecutionEnvironment
      StreamExecutionEnvironment environment = StreamExecutionEnvironment.getExecutionEnvironment();

        environment.setParallelism(1);


        DataStream<String> stream1 = environment.socketTextStream("localhost", 9000);
        stream1.print();



                //start the execution
     environment.execute(" Started the execution ");



}// main
    DataStream<Event> stream1  = envrionment
                .addSource(new EventGenerator(2,60,1,1,100, 200 ))
                .name("stream 1")
                .setParallelism(parallelism_for_stream_rr);

    DataStream<Event> stream2  = envrionment
            .addSource(new EventGenerator(3,60,1,2,10, 20 ))
            .name("stream 2")
            .setParallelism(parallelism_for_stream_rr);


    DataStream<Event> stream3  = envrionment
            .addSource(new EventGenerator(5,60,1,3,30, 40 ))
            .name("stream 3")
            .setParallelism(parallelism_for_stream_rr);


    DataStream<Event> merged = stream1.union(stream2,stream3);

    merged.print();



            // sending data to Mobile Cep via socket

            merged.map(new MapFunction<Event, String>() {

                @Override
                public String map(Event event) throws Exception {
                    String tuple = event.toString();


                    return tuple + "\n";

                }
            }).writeToSocket("localhost", 9000, new SimpleStringSchema() );
我知道一个可能的解决方案是在Flink程序中生成流,但我希望通过套接字接收流


提前感谢~

Flink的套接字源和接收器都不会启动TCP服务器并等待传入连接。它们都是针对已启动的TCP服务器进行连接的客户端。这也是为什么在启动作业之前必须启动
netcat
。如果您想对套接字进行写操作和读操作,那么您必须编写一个TCP服务器,该服务器可以缓冲传入的数据,并在客户端连接到它之后转发它们

Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)