Flink(2):实现流处理实例(Java和scala)

一、实现功能

使用scala和java分别实现Flink的流式处理。

二、实现功能代码

1.Java

(1)代码

package com.bd.flink._1130WordCount;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;

/**
 * Created by Administrator on 2019/11/30.
 * 使用Java API开发Flink 实时处理
 */
public class StreamingWordCountJava {
    public static void main(String[] args) throws Exception {

        int port=0;
        //通过传入参数获取端口,但是默认式9999
        try {
            ParameterTool parameterTool=ParameterTool.fromArgs(args);
            port=parameterTool.getInt("port");
        }catch (Exception e){
            System.out.println("端口未输入,默认端口为9999");
            port=9999;
        }finally {

        }

        //第一步:创建开发环境
        StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();

        //第二步:读取数据
        DataStreamSource<String> text=env.socketTextStream("hadoop01",9999);

        //第三步:开发业务逻辑(transform operations)

        text.flatMap(new FlatMapFunction<String, Tuple2<String,Integer>>() {
            @Override
            public void flatMap(String value, Collector<Tuple2<String, Integer>> collector) throws Exception {

                String[] tokens=value.toLowerCase().split(" ");
                for (String token : tokens) {
                    if(token.length()>0){
                        collector.collect(new Tuple2<String,Integer>(token,1));
                    }
                }
            }
        }).keyBy(0).timeWindow(Time.seconds(5)).sum(1).print().setParallelism(1); //setParallelism并行度设置为1


        //第四步:执行程序(execute program),Streaming 需要执行
        env.execute("Streaming app is running");
    }

}

(2)开启服务器对应端口9999

[root@hadoop ~]# nc -lk 9999

(3)添加运行参数端口号:--key value形式输入
 
输入:--port 9999

(4)运行程序,同时输入

[root@hadoop ~]# nc -lk 9999
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss

Idea中,结果输出

(aa,7)
(cd,7)
(bb,7)
(we,7)
(dfe,7)
(fd,7)
(ss,7)


2.Scala

(1)代码

package com.bd.flink._1130WordCount

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

/**
  * Created by Administrator on 2019/11/30.
  * 流处理:scala
  */
object StreamingWordCountScala {

  def main(args: Array[String]): Unit = {

    //第一步:创建开发环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //第二步:读取数据
    val text=env.socketTextStream("hadoop01",9999)

    //第三步:开发业务逻辑(transform operations)
    import org.apache.flink.api.scala._
    text.flatMap(_.split(" "))
      .map((_,1))
      .keyBy(0)
      .timeWindow(Time.seconds(5))
      .sum(1)
      .print()
      .setParallelism(1)
    //第四步:执行程序(execute program),Streaming 需要执行
    env.execute("Flink Streaming WordCount")

  }
}

(2)开启服务器对应端口9999

[root@hadoop ~]# nc -lk 9999

(3)运行程序,同时输入

[root@hadoop ~]# nc -lk 9999
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss
aa bb cd we fd dfe ss

客户端结果输出

(aa,7)
(cd,7)
(bb,7)
(we,7)
(dfe,7)
(fd,7)
(ss,7)

(完成~)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 Java 编程语言来实现 Flink 实时处理 Kafka。下面是一个简单的示例代码: ```java import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import java.util.Properties; public class FlinkKafkaExample { public static void main(String[] args) throws Exception { // 创建 Flink 执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 设置 Kafka 连接参数 Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "flink-consumer"); // 创建 Kafka 数据 FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>("topic", new SimpleStringSchema(), properties); DataStream<String> kafkaStream = env.addSource(kafkaConsumer); // 在数据上进行处理逻辑 DataStream<String> processedStream = kafkaStream.map(str -> "Processed: " + str); // 打印处理后的结果 processedStream.print(); // 执行任务 env.execute("Flink Kafka Example"); } } ``` 在上述代码中,我们使用 `FlinkKafkaConsumer` 连接到 Kafka 主题,将 Kafka 中的数据添加到 Flink 的执行环境中。然后,我们对数据进行处理,并将处理后的结果打印出来。最后,通过调用 `env.execute()` 来执行任务。 请确保在运行代码之前,您已经正确配置了 Kafka 的连接参数,并将相关的 Flink 和 Kafka 依赖项添加到您的项目中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值