Flink入门之DataStream API及kafka消费者

2023-12-06 07:20

本文主要是介绍Flink入门之DataStream API及kafka消费者,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DataStream API

  1. 主要流程:
    • 获取执行环境
    • 读取数据源
    • 转换操作
    • 输出数据
    • Execute触发执行
  2. 获取执行环境
    • 根据实际情况获取StreamExceptionEnvironment.getExecutionEnvironment(conf)
    • 创建本地环境StreamExecutionEnvironment.createLocalEnvironment()
    • 创建远程环境createRemoteEnvironment(“hadoop102”, 37784, “jar/1.jar”)
      • 参数1:主机号
      • 参数2:端口号
      • 参数3:作业jar包的路径
  3. 获取数据源
    • 简单数据源
      • 从集合中读取数据env.fromCollection(集合)
      • 从元素列表中获取数据env.fromElements()
      • 从文件中读取数据,env.readTextFIle(路径), 已废弃
      • 从端口读取数据,env.socketTextStream()
    • 文件数据源
    • kafka数据源
    • DataGen数据源
    • 自定义数据源

文件数据源

使用文件数据源前,需要先添加相关依赖

 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-files</artifactId><version>${flink.version}</version><scope>provided</scope>
</dependency>
public class Flink02_FileSource {public static void main(String[] args) throw Exception {//1.创建运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//默认是最大并行度env.setParallelism(1);//file sourceFileSource.FileSourceBuilder<String> fileSourceBuilder = FileSource.<String>forRecordStreamFormat(new TextLineInputFormat("utf-8"), new Path("input/word.txt"));FileSource<String> fileSource = fileSourceBuilder.build();//source 算子DataStreamSource<String> ds = env.fromSource(fileSource, WatermarkStrategy.noWatermarks(), "fileSource");ds.print();env.execute();}
}

DataGen数据源

主要用于生成模拟数据,也需要导入相关依赖

 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-datagen</artifactId><version>${flink.version}</version><scope>compile</scope></dependency>
public class Flink04_DataGenSource {public static void main(String[] args) {//1.创建运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//默认是最大并行度env.setParallelism(1);DataGeneratorSource<String> dataGeneratorSource = new DataGeneratorSource<>(new GeneratorFunction<Long, String>() {@Overridepublic String map(Long value) throws Exception {return UUID.randomUUID() + "->" + value;}},100,RateLimiterStrategy.perSecond(1),Types.STRING);DataStreamSource<String> dataGenDs = env.fromSource(dataGeneratorSource, WatermarkStrategy.noWatermarks(), "dataGenDs");dataGenDs.print();try {env.execute();} catch (Exception e) {throw new RuntimeException(e);}}
}

Kafka消费者

  1. 消费方式:拉取

  2. 消费者对象:KafkaConsumenr

  3. 消费原则:
    一个主题的一个分区只能被一个消费者组中的一个消费者消费
    一个消费者组中的一个消费者可以消费一个主题中的多个分区

  4. 消费者相关的参数:

    • key.deserializer 反序列化
    • value.deserializer
    • bootstrap.servers 集群的位置
    • group.id 消费者组id (为何分组,方便同一组的消费者进行断点续传)
    • auto.commit.interval.ms 自动提交间隔 默认5s
    • enable.auto.commit: 开启自动提交offset偏移量
    • auto.offset.reset: 当offset不存在时,offset重置,默认是最末尾的位置
      • ①新的消费者组,之前没有消费过,没有记录的offset
      • ②当前要消费的offset在kafka中已经不存在,可能是因为时间久了,对应的数据清理掉了
    • 重置策略:
      • earliest: 头,能消费到分区中现有的数据
      • latest: 尾,只能消费到分区中新来的数据
    • isolation.level:事务隔离级别
      • 读未提交
      • 读已提交
  5. 消费数据存在的问题

    • 漏消费,导致数据丢失
    • 重复消费,导致数据重复
  6. shell 创建生产者对象:kafka-console-producer.sh --bootstrap-server hadoop102:9092 --topic first

public class Flink03_KafkaSource {public static void main(String[] args) {//1.创建运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//默认是最大并行度env.setParallelism(1);KafkaSource<String> stringKafkaSource = KafkaSource.<String>builder().setBootstrapServers("hadoop102:9092,hadoop103:9092").setGroupId("flink").setTopics("first")//优先使用消费者组记录的Offset进行消费,如果offset不存在,根据策略进行重置.setStartingOffsets(OffsetsInitializer.committedOffsets(OffsetResetStrategy.LATEST)).setValueOnlyDeserializer(new SimpleStringSchema())//如果还有别的配置需要指定,统一使用通用方法
//                .setProperty("isolation.level", "read_committed").build();DataStreamSource<String> kafkaDS = env.fromSource(stringKafkaSource, WatermarkStrategy.noWatermarks(), "kafkaDS");kafkaDS.print();try {env.execute();} catch (Exception e) {throw new RuntimeException(e);}}
}

这篇关于Flink入门之DataStream API及kafka消费者的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/460931

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

SpringBoot整合Apache Flink的详细指南

《SpringBoot整合ApacheFlink的详细指南》这篇文章主要为大家详细介绍了SpringBoot整合ApacheFlink的详细过程,涵盖环境准备,依赖配置,代码实现及运行步骤,感兴趣的... 目录1. 背景与目标2. 环境准备2.1 开发工具2.2 技术版本3. 创建 Spring Boot

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.