Flink基础之DataStream API

流的合并

  1. union联合:被unioin的流中的数据类型必须一致
  2. connect连接:合并的两条流的数据类型可以不一致
    • connec后,得到的是ConnectedStreams
    • 合并后需要根据数据流是否经过keyby分区
      • coConnect: 将两条数据流合并为同一数据类型
      • keyedConnect
public class Flink09_UnionConnectStream {public static void main(String[] args) {//1.创建运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//默认是最大并行度env.setParallelism(1);DataStreamSource<Integer> ds1 = env.fromElements(1, 2, 3, 4, 5, 6, 7);DataStreamSource<Integer> ds2 = env.fromElements(8, 9);DataStreamSource<String> ds3 = env.fromElements("a", "b", "c");DataStream<Integer> unionDs = ds1.union(ds2);unionDs.print();//connectConnectedStreams<Integer, String> connectDs = ds1.connect(ds3);//处理connectDs.process(new CoProcessFunction<Integer, String, String>() {@Overridepublic void processElement1(Integer value, CoProcessFunction<Integer, String, String>.Context ctx, Collector<String> out) throws Exception {out.collect(value.toString());}@Overridepublic void processElement2(String value, CoProcessFunction<Integer, String, String>.Context ctx, Collector<String> out) throws Exception {out.collect(value.toUpperCase());}}).print("connect");try {env.execute();} catch (Exception e) {throw new RuntimeException(e);}}
}

Sink输出算子

目前所使用的大多数Sink, 都是基于2PC的方式来保证状态精确一次性。2PC 即 two face commit, 两阶段提交,该机制的实现必须要开启Flink的检查点。

  1. FileSink:fileSink = FileSink.<数据流泛型>forRowFormat(输出路径, 数据流编码器)
    • 文件滚动策略 .withRollingPolicy().builder()
      • 文件多大滚动.withMaxPartSize(MemorySize.parse(“10m”))
      • 多长时间滚动一次 .withRolloverInterval(Duration.ofSeconds(10))
      • 多久不活跃滚动 .withInactivityInterval(Duration.ofSeconds(5))
    • 目录滚动策略:一般设置为按照天或者小时或者其他时间间隔
    • 文件输出配置:可以设置输出文件的前缀和后缀
public class Flink01_FileSink {public static void main(String[] args) {//1.创建运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();env.enableCheckpointing(2000);//默认是最大并行度env.setParallelism(1);DataStreamSource<Event> ds = Flink06_EventSource.getEventSource(env);//FileSinkFileSink<String> stringFileSink = FileSink.<String>forRowFormat(new Path("output"),new SimpleStringEncoder<>()).withRollingPolicy(//文件滚动策略DefaultRollingPolicy.builder().withMaxPartSize(MemorySize.parse("10m"))//文件多大滚动.withRolloverInterval(Duration.ofSeconds(10))//多久滚动.withInactivityInterval(Duration.ofSeconds(5))//多久不活跃滚动.build()).withBucketAssigner(//目录滚动策略new DateTimeBucketAssigner<>("yyyy-MM-dd HH-mm")).withBucketCheckInterval(1000L)//检查的间隔.withOutputFileConfig(OutputFileConfig.builder().withPartPrefix("atguigu").withPartSuffix(".log").build()).build();ds.map(JSON::toJSONString).sinkTo(stringFileSink);try {env.execute();} catch (Exception e) {throw new RuntimeException(e);}}
}
  1. Kafka Sink(重点)
    • 生产者对象:KafkaProducer
    • Kafka生产者分区策略:
      • 如果明确指定分区号,直接用
      • 如果没有指定分区号,但是Record中带了key,就按照key的hash值对分区数取余得到分区号
      • 如果没有指定相关分区号,使用粘性分区策略
    • 生产者相关配置
      • key.serializer : key的序列化器
      • value.serializer: value的序列化器
      • bootstrap.servers: 集群位置
      • retries: 重试次数
      • batch.size 批次大小
      • linger.ms 批次超时时间
      • acks 应答级别
      • transaction.id 事务ID
    • Shell中开启Kafka消费者的命令:kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first
public class Flink02_KafkaSink {public static void main(String[] args) {//1.创建运行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//默认是最大并行度env.setParallelism(1);//开启检查点env.enableCheckpointing(5000);DataStreamSource<Event> ds = Flink06_EventSource.getEventSource(env);//KafkaSinkKafkaSink<String> kafkaSink = KafkaSink.<String>builder().setBootstrapServers("hadoop102:9092,hadoop103:9092").setRecordSerializer(KafkaRecordSerializationSchema.<String>builder().setTopic("first").setValueSerializationSchema(new SimpleStringSchema()).build())//语义//AT_LEAST_ONCE:至少一次,表示数据可能重复,需要考虑去重操作//EXACTLY_ONCE:精确一次//kafka transaction timeout is larger than broker//kafka超时时间:1H//broker超时时间:15分钟//                .setDeliveryGuarantee(DeliveryGuarantee.AT_LEAST_ONCE)//数据传输的保障.setDeliveryGuarantee(DeliveryGuarantee.EXACTLY_ONCE)//数据传输的保障.setTransactionalIdPrefix("flink"+ RandomUtils.nextInt(0,100000))
//                .setProperty(ProducerConfig.RETRIES_CONFIG,"10").setProperty(ProducerConfig.TRANSACTION_TIMEOUT_CONFIG,"600000").build();ds.map(JSON::toJSONString).sinkTo(kafkaSink);//写入到kafka 生产者//shell 消费者:kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic firsttry {env.execute();} catch (Exception e) {throw new RuntimeException(e);}}
}

为了在Shell中开启消费者更为便捷,这里写了一个小脚本,用来动态的设置主题并开启相应的Kafka消费者,脚本名称为kc.sh.

#!/bin/bash# 检查参数数量
if [ $# -lt 1 ]; thenecho "Usage: $0 <topic>"exit 1
fi# 从命令行参数获取主题
topic=$1# Kafka配置
bootstrap_server="hadoop102:9092"# 构建kafka-console-consumer命令
consumer_command="kafka-console-consumer.sh --bootstrap-server $bootstrap_server --topic $topic"# 打印消费命令
echo "Running Kafka Consumer for topic: $topic"
echo "Command: $consumer_command"# 执行消费命令
$consumer_command

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泛洪填充(Flood Fill)

图像形态学是图像处理中的一种基础技术&#xff0c;泛洪填充&#xff08;Flood Fill&#xff09;是其中的一种操作&#xff0c;用于在图像中填充特定区域。 原理和作用 原理 泛洪填充是基于种子点开始的区域生长算法。它从一个种子点开始&#xff0c;通过选择相邻像素并根据一…

什么是数据清洗、特征工程、数据可视化、数据挖掘与建模?

1.1什么是数据清洗、特征工程、数据可视化、数据挖掘与建模&#xff1f; 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.1节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵…

Jtti:网站服务器如何预防CC攻击?

CC攻击主要通过大量的请求或连接不断地向目标网站服务器发送流量&#xff0c;以消耗其带宽、资源和处理能力。为了有效应对CC攻击&#xff0c;以下是一些关键的防御策略&#xff1a; 1.使用防火墙 安装和配置一个强大的防火墙是预防CC攻击的首要步骤。防火墙可以根据IP地址、用…

python HTML文件标题解析问题的挑战

引言 在网络爬虫中&#xff0c;HTML文件标题解析扮演着至关重要的角色。正确地解析HTML文件标题可以帮助爬虫准确地获取所需信息&#xff0c;但是在实际操作中&#xff0c;我们常常会面临一些挑战和问题。本文将探讨在Scrapy中解析HTML文件标题时可能遇到的问题&#xff0c;并…

微软 Power Platform 零基础 Power Pages 网页搭建高阶实际案例实践(四)

微软 Power Platform 零基础 Power Pages 网页搭建教程之高阶案例实践学习&#xff08;四&#xff09; Power Pages 实际案例学习进阶 微软 Power Platform 零基础 Power Pages 网页搭建教程之高阶案例实践学习&#xff08;四&#xff09;1、新增视图&#xff0c;添加List页面2…

http的 content-type都有哪些?

HTTP请求中的Content-Type是用来指定请求或者响应的内容类型&#xff0c;告诉浏览器或者相关设备如何显示或处理加载的数据&#xff0c;此属性的值可以查看MIME&#xff08;Multipurpose Internet Mail Extensions&#xff0c;多用途互联网邮件扩展&#xff09;的类型。 如果设…

Java集合进阶(上)

集合 集合在Java开发中应用极为广泛&#xff0c;它其实就是一些常用的数据结构的包装类&#xff0c;分为单列集合&#xff08;Collecton接口类&#xff0c;例如LinkdeList集合&#xff09;和双列集合&#xff08;Map接口类&#xff0c;例如HashMap集合)两种 Collection Coll…

网络层之IP数据报格式、数据报分片、IPv4、子网划分和子网掩码

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

Kubernetes Service控制器详解以及切换为ipvs代理模式

文章目录 一、Service 存在的意义二、Pod与Service的关系三、Service定义与创建四、Service三种常用类型五、Service代理模式六、切换Service代理模式七、service总体工作流程八、kube-proxy ipvs和iptables的异同九、Service DNS名称 一、Service 存在的意义 service的引入主…

【从零开始学习JVM | 第四篇】类加载器的分类以及双亲委派机制

前言&#xff1a; 在Java编程中&#xff0c;类加载器(Class Loader)扮演着重要的角色。类加载器负责加载Java字节码并将其转换为可执行对象&#xff0c;使得我们能够在应用程序中使用各种类和资源。Java类加载器的设计和实现旨在支持动态扩展和模块化编程&#xff0c;为Java语…

管理和监控CentOS上的HTTP服务

CentOS作为一款稳定的开源服务器操作系统&#xff0c;为各种网络服务提供了优秀的支持。其中&#xff0c;HTTP服务是互联网上最常用的服务之一&#xff0c;它为人们提供了便捷的信息访问和交互方式。在CentOS上管理和监控HTTP服务是一项重要的任务&#xff0c;下面我们将介绍一…

【改进YOLOv8】融合感受野注意力卷积RFCBAMConv的杂草分割系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着计算机视觉技术的不断发展&#xff0c;图像分割成为了一个重要的研究领域。图像分割可以将图像中的不同对象或区域进行有效的分离&#xff0c;对于许多应用领…

elk+kafka+filebeat

elk1 cd /opt 把filebeat投进去 tar -xf filebeat-6.7.2-linux-x86_64.tar.gz mv filebeat-6.7.2-linux-x86_64 filebeat cd filebeat/ yum -y install nginx systemctl restart nginx vim /usr/share/nginx/html/index.html this is nginx cp filebeat.yml filebeat.yml.…

EPICS modbus 模块数字量读写练习

本文使用modbus slave软件模拟一个受控的modbus设备&#xff0c;此模拟设备提供如下功能&#xff1a; 1、线圈1&#xff0c;起始地址为0&#xff0c;数量为8&#xff0c;软件设置如下(功能码1)&#xff1a; 2、线圈2&#xff0c;起始地址为8&#xff0c;数量为8&#xff0c;软…

【React】学习路线图

目录 HTML、CSS和JavaScript基础 1. HTML标记语言&#xff1a; 2. CSS样式&#xff1a; 3. JavaScript编程语言&#xff1a; 基础开发技能 学习Git 了解HTTP(S)协议 学习终端 算法和数据结构 学习设计模式 JavaScript框架和库 1. jQuery&#xff1a; 2. Bootstrap…

使用GPT-4V解决Pycharm设置问题

pycharm如何实现关联&#xff0c;用中文回答 在PyCharm中关联PDF文件类型&#xff0c;您可以按照以下步骤操作&#xff1a; 1. 打开PyCharm设置&#xff1a;点击菜单栏中的“File”&#xff08;文件&#xff09;&#xff0c;然后选择“Settings”&#xff08;设置&#xff09;。…

论文笔记--A Fine-grained Interpretability Evaluation Benchmark for Neural NLP

论文笔记--A Fine-grained Interpretability Evaluation Benchmark for Neural NLP 1. 文章简介2. 文章概括3 文章重点技术3.1 数据收集3.2 数据扰动3.3 迭代标注和检查根因3.4 度量3.4.1 Token F1-score3.4.2 MAP(Mean Average Precision) 4. 文章亮点5. 原文传送门 1. 文章简…

【WPF】隐藏一个XAML的view视图

要在WPF中隐藏一个XAML视图&#xff0c;你可以使用Visibility属性来控制该视图的可见性。Visibility属性具有以下几个可能的值&#xff1a; Visible&#xff1a;视图可见。Hidden&#xff1a;视图隐藏&#xff0c;但仍占用布局空间。Collapsed&#xff1a;视图隐藏&#xff0c…

日志框架梳理(Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2)

原文链接 日志框架发展历程 在了解日志框架时总会列出一系列框架&#xff1a;Log4j&#xff0c;Reload4j&#xff0c;JUL&#xff0c;JCL&#xff0c;SLF4J&#xff0c;Logback&#xff0c;Log4j2&#xff0c;这么多框架让人感到混乱&#xff0c;该怎么选取、该怎么用。接下来…

分享“技艺与传承”的魅力!春城晚报(开屏新闻)生活节第七期媒体开放日活动举行

近日&#xff0c;由云南报业传媒&#xff08;集团&#xff09;有限责任公司、云南春晚传媒有限公司指导&#xff1b;金格金俊广场、云南精品文化传媒有限公司联合主办的第七期媒体开放日活动在金格金俊广场B1共享空间举办。本次活动以「技艺与传承」为主题&#xff0c;特邀青年…