flink用法详解

Flink

  • 无界流 (Unbounded Streams): 数据流理论上没有终点,持续不断地流入系统。Flink 会连续地处理这些事件,即使在处理过程中新的数据还在不断到来。

  • 有界流 (Bounded Streams): 数据流有一个明确的起点和终点,处理完所有数据后任务即结束。Flink 可以像处理流一样处理批数据,采用相同的 API 并提供高效执行。

编写一个Flink步骤

  1. 创建一个flink执行环境
  2. 创建一个数据来源 source
  3. 编写流操作 transformations
  4. 数据流出口 sink
  5. 执行任务 execute

public class SimpleFlinkJob {
   
 
    public static void main(String[] args) throws Exception {
   
        // 创建执行环境
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
 
        // 设置 Kafka 消费者参数
        Properties kafkaProps = new Properties();
        kafkaProps.setProperty("bootstrap.servers", "localhost:9092");
        kafkaProps.setProperty("group.id", "testGroup");
 
        // 创建 Kafka 数据源
        FlinkKafkaConsumer<String> kafkaSource = new FlinkKafkaConsumer<>("input-topic", new SimpleStringSchema(), kafkaProps);
 
        // 从 Kafka 中读取数据流
        DataStream<String> stream = env.addSource(kafkaSource);
 
        // 定义数据转换操作,这里是对字符串计数
        DataStream<Tuple2<String, Integer>> counts = stream
            .map(new MapFunction<String, Tuple2<String, Integer>>() {
   
                @Override
                public Tuple2<String, Integer> map(String value) {
   
                    return new Tuple2<>(value, 1);
                }
            })
            .keyBy(0)
            .sum(1);
 
        // 打印输出结果
        counts.print().setParallelism(1);
 
        // 执行任务
        env.execute("Simple Flink Job");
    }


Source:flink的数据来源

  • 集合

    **
    * 一般用于学习测试时使用
    * 1.env.fromElements(可变参数);
    * 2.env.fromColletion(各种集合);
    * 3.env.generateSequence(开始,结束);
    * 4.env.fromSequence(开始,结束);
    *
    * @param args 基于集合
    * @throws Exception
    */
    
    
    // source
            DataStream<String> ds1 = env.fromElements("i am alanchan", "i like flink");
            DataStream<String> ds2 = env.fromCollection(Arrays.asList("i am alanchan", "i like flink"));
            DataStream<Long> ds3 = env.generateSequence(1, 10);//已过期,使用fromSequence方法
            DataStream<Long> ds4 = env.fromSequence(1, 10);
    
  • 文件

    /**
     * env.readTextFile(本地/HDFS文件/文件夹),压缩文件也可以
     */
    		DataStream<String> ds1 = env.readTextFile("D:src/main/resources/words.txt");
            DataStream<String> ds2 = env.readTextFile("D:/workspace/distribute_cache_student");
            DataStream<String> ds3 = env.readTextFile("D:/words.tar.gz");
            DataStream<S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值