在Flink / Kafka中从同一个套接字读写

时间:2017-11-08 13:51:38

标签: scala apache-kafka apache-flink

美好的一天

我通过flink / kafka接收数据(流数据)。 我连接的端口是将消息写回

所需的端口

TCP / IP - > Flink / Kafka Consumer - >过程数据 - >将结果发送到kafka主题并返回到TCP / IP连接

onload

连接到URL和端口有效。我收到并处理数据 我写这个主题 现在我还需要回写我连接到的相同URL和端口。{由于Url和端口可以同时发送和接收数据}

我让它写到另一个端口

// 1. Connect to TCP Stream (TCP (Socket) -> Kafka Stream INPUT)
val consumer_stream = env.socketTextStream(url, port, '\n')

// 2. Processing Data
.....

// 3. Write result to kafka topic 
consumer_stream.addSink(new FlinkKafkaProducer09[String](broker_url, topic_name, new SimpleStringSchema()))

// 4. Send result back to connected url ie.(Ref Step 1 URL) (url+port)
(This is where I need Assistance)

这有效......问题是尝试写入同一个端口。当我使用我正在阅读的相同端口时... flink作业失败

任何想法

此致

1 个答案:

答案 0 :(得分:1)

您可以使用自定义的SinkFunction将数据写回网址。

stream.addSink(new SinkFunction<String>() {
    // initialise the client to send the data
    public void invoke(String value) throws Exception {
        // send here.               
    }
}

SocketClientSink

env.socketTextStream("localhost", 5555).map(x => { println(x); x }).addSink(new SocketClientSink[String]("localhost", 5555, new SimpleStringSchema))