当前位置: 首页 > news >正文

建云购网站吗制作企业网站的实训报告

建云购网站吗,制作企业网站的实训报告,网站开发招标任务书,个人自建网站Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的table api与sql之流式概念-详解的介绍了动态表、时间属性配置如何处理更新结果、时态表、流上的join、流上的确定性以及查询配置 16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及FileSystem示例1 16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Elasticsearch示例2 16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Kafka示例3 16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及JDBC示例4 16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及Apache Hive示例6 17、Flink 之Table API: Table API 支持的操作1 17、Flink 之Table API: Table API 支持的操作2 18、Flink的SQL 支持的操作和语法 19、Flink 的Table API 和 SQL 中的内置函数及示例1 19、Flink 的Table API 和 SQL 中的自定义函数及示例2 19、Flink 的Table API 和 SQL 中的自定义函数及示例3 19、Flink 的Table API 和 SQL 中的自定义函数及示例4 20、Flink SQL之SQL Client: 不用编写代码就可以尝试 Flink SQL可以直接提交 SQL 任务到集群上 21、Flink 的table API与DataStream API 集成1- 介绍及入门示例、集成说明 21、Flink 的table API与DataStream API 集成2- 批处理模式和inser-only流处理 21、Flink 的table API与DataStream API 集成3- changelog流处理、管道示例、类型转换和老版本转换示例 21、Flink 的table API与DataStream API 集成完整版 22、Flink 的table api与sql之创建表的DDL 24、Flink 的table api与sql之Catalogs介绍、类型、java api和sql实现ddl、java api和sql操作catalog-1 24、Flink 的table api与sql之Catalogsjava api操作数据库、表-2 24、Flink 的table api与sql之Catalogsjava api操作视图-3 24、Flink 的table api与sql之Catalogsjava api操作分区与函数-4 25、Flink 的table api与sql之函数(自定义函数示例) 26、Flink 的SQL之概览与入门示例 27、Flink 的SQL之SELECT (select、where、distinct、order by、limit、集合操作和去重)介绍及详细示例1 27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例2 27、Flink 的SQL之SELECT (窗口函数)介绍及详细示例3 27、Flink 的SQL之SELECT (窗口聚合)介绍及详细示例4 27、Flink 的SQL之SELECT (Group Aggregation分组聚合、Over Aggregation Over聚合 和 Window Join 窗口关联)介绍及详细示例5 27、Flink 的SQL之SELECT (Top-N、Window Top-N 窗口 Top-N 和 Window Deduplication 窗口去重)介绍及详细示例6 27、Flink 的SQL之SELECT (Pattern Recognition 模式检测)介绍及详细示例7 28、Flink 的SQL之DROP 、ALTER 、INSERT 、ANALYZE 语句 29、Flink SQL之DESCRIBE、EXPLAIN、USE、SHOW、LOAD、UNLOAD、SET、RESET、JAR、JOB Statements、UPDATE、DELETE1 29、Flink SQL之DESCRIBE、EXPLAIN、USE、SHOW、LOAD、UNLOAD、SET、RESET、JAR、JOB Statements、UPDATE、DELETE2 30、Flink SQL之SQL 客户端通过kafka和filesystem的例子介绍了配置文件使用-表、视图等 31、Flink的SQL Gateway介绍及示例 32、Flink table api和SQL 之用户自定义 Sources Sinks实现及详细示例 33、Flink 的Table API 和 SQL 中的时区 35、Flink 的 Formats 之CSV 和 JSON Format 36、Flink 的 Formats 之Parquet 和 Orc Format 41、Flink之Hive 方言介绍及详细示例 40、Flink 的Apache Kafka connectorkafka source的介绍及使用示例-1 40、Flink 的Apache Kafka connectorkafka sink的介绍及使用示例-2 40、Flink 的Apache Kafka connectorkafka source 和sink 说明及使用示例 完整版 42、Flink 的table api与sql之Hive Catalog 43、Flink之Hive 读写及详细验证示例 44、Flink之module模块介绍及使用示例和Flink SQL使用hive内置函数及自定义函数详细示例–网上有些说法好像是错误的 文章目录 Flink 系列文章一、Apache Kafka 连接器1、maven依赖2、kafka source1、使用示例1、Flink 1.13版本实现2、Flink 1.17版本实现3、说明 2、Topic / Partition 订阅1、Topic 列表2、正则表达式匹配3、Partition 列表 3、消息解析4、起始消费位点5、有界 / 无界模式6、其他属性7、动态分区检查8、事件时间和水印9、空闲10、消费位点提交11、监控1、范围1、用户范围2、系统范围System Scope3、所有变量列表4、用户变量 2、指标范围3、Kafka Consumer 指标 12、安全13、实现细节1、数据源分片Source Split2、分片枚举器Split Enumerator3、源读取器Source Reader 本文介绍了kafka作为source的13个主要 方面关于常用的功能均以可运行的示例进行展示并提供完整的验证步骤。 本专题为了便于阅读以及整体查阅分为三个部分 40、Flink 的Apache Kafka connectorkafka source的介绍及使用示例-1 40、Flink 的Apache Kafka connectorkafka sink的介绍及使用示例-2 40、Flink 的Apache Kafka connectorkafka source 和sink 说明及使用示例 完整版 本文依赖kafka集群能正常使用。 本文分为2个部分即maven依赖和作为source的应用。 本文的示例是在Flink 1.17版本中运行。 一、Apache Kafka 连接器 Flink 提供了 Apache Kafka 连接器使用精确一次Exactly-once的语义在 Kafka topic 中读取和写入数据。 1、maven依赖 Apache Flink 集成了通用的 Kafka 连接器它会尽力与 Kafka client 的最新版本保持同步。 该连接器使用的 Kafka client 版本可能会在 Flink 版本之间发生变化。 当前 Kafka client 向后兼容 0.10.0 或更高版本的 Kafka broker。 有关 Kafka 兼容性的更多细节请参考 Kafka 官方文档。 dependencygroupIdorg.apache.flink/groupIdartifactIdflink-connector-kafka/artifactIdversion1.17.1/version /dependency如果使用 Kafka sourceflink-connector-base 也需要包含在依赖中 dependencygroupIdorg.apache.flink/groupIdartifactIdflink-connector-base/artifactIdversion1.17.1/version /dependency Flink 目前的流连接器还不是二进制发行版的一部分。 在集群中运行需要增加kafka的jar包然后重启集群。比如/usr/local/bigdata/flink-1.13.5/lib/flink-sql-connector-kafka_2.11-1.13.5.jar。 2、kafka source 1、使用示例 Kafka Source 提供了构建类来创建 KafkaSource 的实例。 以下代码片段展示了如何构建 KafkaSource 来消费 “alan_kafkasource” 最早位点的数据 使用消费组 “flink_kafka”并且将 Kafka 消息体反序列化为字符串 1、Flink 1.13版本实现 maven依赖 propertiesencodingUTF-8/encodingproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetjava.version1.8/java.versionscala.version2.12/scala.versionflink.version1.13.6/flink.version/propertiesdependenciesdependencygroupIdorg.apache.flink/groupIdartifactIdflink-clients_2.11/artifactIdversion${flink.version}/version/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-scala_2.11/artifactIdversion${flink.version}/version/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-java/artifactIdversion${flink.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-streaming-scala_2.11/artifactIdversion${flink.version}/version/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-streaming-java_2.11/artifactIdversion${flink.version}/versionscopeprovided/scope/dependency!-- flink连接器 --dependencygroupIdorg.apache.flink/groupIdartifactIdflink-sql-connector-kafka_2.12/artifactIdversion${flink.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-csv/artifactIdversion${flink.version}/version/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-json/artifactIdversion${flink.version}/version/dependency!-- 日志 --dependencygroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactIdversion1.7.7/versionscoperuntime/scope/dependencydependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/versionscoperuntime/scope/dependency/dependencies实现代码 import java.util.Properties;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 org.apache.flink.streaming.util.serialization.SimpleStringSchema; ...... public static void test1() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 source// 准备kafka连接参数Properties props new Properties();// 集群地址props.setProperty(bootstrap.servers, 192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092);// 消费者组idprops.setProperty(group.id, flink_kafka);// latest有offset记录从记录位置开始消费,没有记录从最新的/最后的消息开始消费// earliest有offset记录从记录位置开始消费,没有记录从最早的/最开始的消息开始消费props.setProperty(auto.offset.reset, latest);// 会开启一个后台线程每隔5s检测一下Kafka的分区情况,实现动态分区检测props.setProperty(flink.partition-discovery.interval-millis, 5000);// 自动提交(提交到默认主题,后续学习了Checkpoint后随着Checkpoint存储在Checkpoint和默认主题中)props.setProperty(enable.auto.commit, true);// 自动提交的时间间隔props.setProperty(auto.commit.interval.ms, 2000);// 使用连接参数创建FlinkKafkaConsumer/kafkaSourceFlinkKafkaConsumerString kafkaSource new FlinkKafkaConsumerString(alan_kafkasource, new SimpleStringSchema(), props);// 使用kafkaSourceDataStreamString kafkaDS env.addSource(kafkaSource);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、/ executeenv.execute();}验证 1、创建kafka主题alan_kafkasourcekafka命令发送数据 [alanchanserver2 bin]$ kafka-topics.sh --create --bootstrap-server server1:9092 --topic alan_kafkasource --partitions 1 --replication-factor 1[alanchanserver2 bin]$ kafka-console-producer.sh --broker-list 192.168.10.41:9092 --topic alan_kafkasource alan,18 alanchan,19 alanchan,20 2、启动应用程序并观察控制台输出 2、Flink 1.17版本实现 maven依赖 propertiesencodingUTF-8/encodingproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetjava.version1.8/java.versionscala.version2.12/scala.versionflink.version1.17.0/flink.version/propertiesdependencies!-- https://mvnrepository.com/artifact/org.apache.flink/flink-clients --dependencygroupIdorg.apache.flink/groupIdartifactIdflink-clients/artifactIdversion${flink.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-java/artifactIdversion${flink.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-streaming-java/artifactIdversion${flink.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-csv/artifactIdversion${flink.version}/versionscopeprovided/scope/dependencydependencygroupIdorg.apache.flink/groupIdartifactIdflink-json/artifactIdversion${flink.version}/versionscopeprovided/scope/dependency!-- flink连接器 --!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-kafka --dependencygroupIdorg.apache.flink/groupIdartifactIdflink-connector-kafka/artifactIdversion${flink.version}/version/dependency/dependencies实现代码 import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; 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.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.util.serialization.SimpleStringSchema;......public static void test2() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 sourceKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(alan_kafkasource).setGroupId(flink_kafka).setStartingOffsets(OffsetsInitializer.earliest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();DataStreamSourceString kafkaDS env.fromSource(source, WatermarkStrategy.noWatermarks(), Kafka Source);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、executeenv.execute();}验证 1、创建kafka主题alan_kafkasourcekafka命令发送数据 [alanchanserver2 bin]$ kafka-topics.sh --create --bootstrap-server server1:9092 --topic alan_kafkasource --partitions 1 --replication-factor 1[alanchanserver2 bin]$ kafka-console-producer.sh --broker-list 192.168.10.41:9092 --topic alan_kafkasource alan,18 alanchan,19 alanchan,20 2、启动应用程序并观察控制台输出 3、说明 以下属性在构建 KafkaSource 时是必须指定的 Bootstrap server通过 setBootstrapServers(String) 方法配置消费者组 ID通过 setGroupId(String) 配置要订阅的 Topic / Partition请参阅 Topic / Partition 一节用于解析 Kafka 消息的反序列化器Deserializer请参阅消息解析一节 2、Topic / Partition 订阅 Kafka Source 提供了 3 种 Topic / Partition 的订阅方式 1、Topic 列表 订阅 Topic 列表中所有 Partition 的消息 // 2、 sourceKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(alan_kafkasource1,alan_kafkasource2).setGroupId(flink_kafka).setStartingOffsets(OffsetsInitializer.earliest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();2、正则表达式匹配 订阅与正则表达式所匹配的 Topic 下的所有 Partition // 2、 sourceKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(alan_kafkasource*).setGroupId(flink_kafka).setStartingOffsets(OffsetsInitializer.earliest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();3、Partition 列表 订阅指定的 Partition 实现代码 import java.util.Arrays; import java.util.HashSet; import java.util.Properties;import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.kafka.common.TopicPartition; 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.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.util.serialization.SimpleStringSchema;........public static void test3() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 sourceHashSetTopicPartition partitionSet new HashSet(Arrays.asList(new TopicPartition(topic_alan, 0), // Partition 0 of topic topic_alannew TopicPartition(topic_alanchan, 3))); // Partition 5 of topic topic_alanchanKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setPartitions(partitionSet)//.setTopics(alan_kafkasource).setGroupId(flink_kafka).setStartingOffsets(OffsetsInitializer.earliest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();DataStreamSourceString kafkaDS env.fromSource(source, WatermarkStrategy.noWatermarks(), Kafka Source);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、executeenv.execute();}验证 1、创建kafka主题topic_alan和topic_alanchan其中topic_alanchan有四个分区topic_alan只有一个分区 topic_alan主题信息 topic_alanchan主题信息 2、启动程序 3、通过命令向topic_alan和topic_alanchan主题中发送数据 topic_alan主题发送的数据 [alanchanserver2 bin]$ kafka-console-producer.sh --broker-list 192.168.10.41:9092 --topic topic_alan alan,18 alan,19 alan,20topic_alanchan主题发送的数据 [alanchanserver2 bin]$ kafka-console-producer.sh --broker-list 192.168.10.41:9092 --topic topic_alanchan alanchan,28 alan,29 alanchan,30 alanchan,31 alanchan,32 alanchan,33 alanchan,34 alanchan,35 4、程序控制台输出 3、消息解析 代码中需要提供一个反序列化器Deserializer来对 Kafka 的消息进行解析。 反序列化器通过 setDeserializer(KafkaRecordDeserializationSchema) 来指定其中 KafkaRecordDeserializationSchema 定义了如何解析 Kafka 的 ConsumerRecord。 如果只需要 Kafka 消息中的消息体value部分的数据可以使用 KafkaSource 构建类中的 setValueOnlyDeserializer(DeserializationSchema) 方法其中 DeserializationSchema 定义了如何解析 Kafka 消息体中的二进制数据。 也可使用 Kafka 提供的解析器 来解析 Kafka 消息体。例如使用 StringDeserializer 来将 Kafka 消息体解析成字符串 示例代码 import java.util.Arrays; import java.util.HashSet; import java.util.Properties;import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.connector.kafka.source.reader.deserializer.KafkaRecordDeserializationSchema; 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.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.util.serialization.SimpleStringSchema; import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.serialization.StringDeserializer;......public static void test4() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 sourceKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(alan_kafkasource).setGroupId(flink_kafka).setStartingOffsets(OffsetsInitializer.earliest()).setDeserializer(KafkaRecordDeserializationSchema.valueOnly(StringDeserializer.class)) // .setValueOnlyDeserializer(new SimpleStringSchema()).build();DataStreamSourceString kafkaDS env.fromSource(source, WatermarkStrategy.noWatermarks(), Kafka Source);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、executeenv.execute();}验证结果 kafka命令发送数据 [alanchanserver2 bin]$ kafka-console-producer.sh --broker-list 192.168.10.41:9092 --topic alan_kafkasource alan,18 alanchan,19 alanchan,20程序运行结果 4、起始消费位点 Kafka source 能够通过位点初始化器OffsetsInitializer来指定从不同的偏移量开始消费 。内置的位点初始化器包括 KafkaSource.builder()// 从消费组提交的位点开始消费不指定位点重置策略.setStartingOffsets(OffsetsInitializer.committedOffsets())// 从消费组提交的位点开始消费如果提交位点不存在使用最早位点.setStartingOffsets(OffsetsInitializer.committedOffsets(OffsetResetStrategy.EARLIEST))// 从时间戳大于等于指定时间戳毫秒的数据开始消费.setStartingOffsets(OffsetsInitializer.timestamp(1657256176000L))// 从最早位点开始消费.setStartingOffsets(OffsetsInitializer.earliest())// 从最末尾位点开始消费.setStartingOffsets(OffsetsInitializer.latest()); 示例代码 import java.util.Arrays; import java.util.HashSet; import java.util.Properties;import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.connector.kafka.source.reader.deserializer.KafkaRecordDeserializationSchema; 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.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.util.serialization.SimpleStringSchema; import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.serialization.StringDeserializer;......public static void test5() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 sourceKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(topic_alanchan).setGroupId(flink_kafka) // .setStartingOffsets(OffsetsInitializer.earliest()).setStartingOffsets(OffsetsInitializer.latest()).setDeserializer(KafkaRecordDeserializationSchema.valueOnly(StringDeserializer.class)) // .setValueOnlyDeserializer(new SimpleStringSchema()).build();DataStreamSourceString kafkaDS env.fromSource(source, WatermarkStrategy.noWatermarks(), Kafka Source);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、executeenv.execute();}验证 1、kafka命令行输入数据 [alanchanserver2 bin]$ kafka-console-producer.sh --broker-list 192.168.10.41:9092 --topic topic_alanchan alanchan,37 alanchan,38 alanchan,39 alanchan,40 alanchan,41 alanchan,42 alanchan,43 alanchan,44 alanchan,45 alanchan,46 alanchan,47 alanchan,48 alanchan,49 alanchan,50 alanchan,512、运行程序控制台输出结果 如果内置的初始化器不能满足需求也可以实现自定义的位点初始化器OffsetsInitializer。 如果未指定位点初始化器将默认使用 OffsetsInitializer.earliest()。 5、有界 / 无界模式 Kafka Source 支持流式和批式两种运行模式。默认情况下KafkaSource 设置为以流模式运行因此作业永远不会停止直到 Flink 作业失败或被取消。 可以使用 setBounded(OffsetsInitializer) 指定停止偏移量使 Kafka Source 以批处理模式运行。当所有分区都达到其停止偏移量时Kafka Source 会退出运行。 流模式下运行通过使用 setUnbounded(OffsetsInitializer) 也可以指定停止消费位点当所有分区达到其指定的停止偏移量时Kafka Source 会退出运行。 示例代码 import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.connector.kafka.source.reader.deserializer.KafkaRecordDeserializationSchema; 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.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.util.serialization.SimpleStringSchema; import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.serialization.StringDeserializer;public static void test6() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 sourceKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(topic_alan).setGroupId(flink_kafka) // .setStartingOffsets(OffsetsInitializer.earliest()).setStartingOffsets(OffsetsInitializer.latest()).setDeserializer(KafkaRecordDeserializationSchema.valueOnly(StringDeserializer.class)) // .setValueOnlyDeserializer(new SimpleStringSchema()).setUnbounded(OffsetsInitializer.timestamp(1700546218367L)).build();DataStreamSourceString kafkaDS env.fromSource(source, WatermarkStrategy.noWatermarks(), Kafka Source);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、executeenv.execute();} 6、其他属性 除了上述属性之外您还可以使用 setProperties(Properties) 和 setProperty(String, String) 为 Kafka Source 和 Kafka Consumer 设置任意属性。KafkaSource 有以下配置项 client.id.prefix指定用于 Kafka Consumer 的客户端 ID 前缀partition.discovery.interval.ms定义 Kafka Source 检查新分区的时间间隔。 请参阅下面的动态分区检查一节register.consumer.metrics 指定是否在 Flink 中注册 Kafka Consumer 的指标commit.offsets.on.checkpoint 指定是否在进行 checkpoint 时将消费位点提交至 Kafka broker Kafka consumer 的配置可以参考 Apache Kafka 文档。 请注意即使指定了以下配置项构建器也会将其覆盖 key.deserializer 始终设置为 ByteArrayDeserializer value.deserializer 始终设置为 ByteArrayDeserializer auto.offset.reset.strategy 被 OffsetsInitializer#getAutoOffsetResetStrategy() 覆盖 partition.discovery.interval.ms 会在批模式下被覆盖为 -1 示例代码 import java.util.Arrays; import java.util.HashSet; import java.util.Properties;import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.connector.kafka.source.reader.deserializer.KafkaRecordDeserializationSchema; 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.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.util.serialization.SimpleStringSchema; import org.apache.kafka.common.TopicPartition; import org.apache.kafka.common.serialization.StringDeserializer;......public static void test7() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 source// 准备kafka连接参数Properties props new Properties();// 集群地址props.setProperty(bootstrap.servers, 192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092);// 消费者组idprops.setProperty(group.id, flink_kafka);// latest有offset记录从记录位置开始消费,没有记录从最新的/最后的消息开始消费// earliest有offset记录从记录位置开始消费,没有记录从最早的/最开始的消息开始消费props.setProperty(auto.offset.reset, latest);// 会开启一个后台线程每隔5s检测一下Kafka的分区情况,实现动态分区检测props.setProperty(flink.partition-discovery.interval-millis, 5000);// 自动提交(提交到默认主题,后续学习了Checkpoint后随着Checkpoint存储在Checkpoint和默认主题中)props.setProperty(enable.auto.commit, true);// 自动提交的时间间隔props.setProperty(auto.commit.interval.ms, 2000);KafkaSourceString source KafkaSource.Stringbuilder() // .setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(topic_alan) // .setGroupId(flink_kafka) // .setStartingOffsets(OffsetsInitializer.earliest()).setValueOnlyDeserializer(new SimpleStringSchema()) // .setUnbounded(OffsetsInitializer.timestamp(1700546218367L)).setProperties(props).build();DataStreamSourceString kafkaDS env.fromSource(source, WatermarkStrategy.noWatermarks(), Kafka Source);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、executeenv.execute();}7、动态分区检查 为了在不重启 Flink 作业的情况下处理 Topic 扩容或新建 Topic 等场景可以将 Kafka Source 配置为在提供的 Topic / Partition 订阅模式下定期检查新分区。要启用动态分区检查请将 partition.discovery.interval.ms 设置为非负值 // 会开启一个后台线程每隔5s检测一下Kafka的分区情况,实现动态分区检测 props.setProperty(flink.partition-discovery.interval-millis, 5000); KafkaSourceString source KafkaSource.Stringbuilder().setProperties(props).build();// 或通过方法属性设置 KafkaSource.builder().setProperty(partition.discovery.interval.ms, 10000); // 每 10 秒检查一次新分区分区检查功能默认不开启。需要显式地设置分区检查间隔才能启用此功能。 8、事件时间和水印 默认情况下Kafka Source 使用 Kafka 消息中的时间戳作为事件时间。您可以定义自己的水印策略Watermark Strategy 以从消息中提取事件时间并向下游发送水印 import java.time.Duration;import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.util.serialization.SimpleStringSchema;......public static void test1() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 sourceKafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(topic_alan).setGroupId(flink_kafka).setStartingOffsets(OffsetsInitializer.earliest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();// 设置Watermaker 当前最大的事件时间 - 最大允许的延迟时间或乱序时间DataStreamString kafkaSource env.fromSource(source, WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(3)), Kafka Source);// 3、 transformation// 4、 sinkkafkaSource.print();// 5、executeenv.execute();}关于watermark内容可参考文章7、Flink四大基石之Time和WaterMaker详解与详细示例watermaker基本使用、kafka作为数据源的watermaker使用示例以及超出最大允许延迟数据的接收实现 9、空闲 如果并行度高于分区数Kafka Source 不会自动进入空闲状态。您将需要降低并行度或向水印策略添加空闲超时。如果在这段时间内没有记录在流的分区中流动则该分区被视为“空闲”并且不会阻止下游操作符中水印的进度。 如果数据源中的某一个分区/分片在一段时间内未发送事件数据则意味着 WatermarkGenerator 也不会获得任何新数据去生成 watermark。我们称这类数据源为空闲输入或空闲源。在这种情况下当某些其他分区仍然发送事件数据的时候就会出现问题。由于下游算子 watermark 的计算方式是取所有不同的上游并行数据源 watermark 的最小值则其 watermark 将不会发生变化。 为了解决这个问题你可以使用 WatermarkStrategy 来检测空闲输入并将其标记为空闲状态。WatermarkStrategy 为此提供了一个工具接口 WatermarkStrategy.Tuple2Long, StringforBoundedOutOfOrderness(Duration.ofSeconds(20)).withIdleness(Duration.ofMinutes(1));示例代码 import java.time.Duration; import java.util.Properties;import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.connector.kafka.source.KafkaSource; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.util.serialization.SimpleStringSchema;/*** author alanchan**/ public class TestKafkaSourceWithWatermarkDemo {public static void test1() throws Exception {// 1、envStreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();// 2、 source KafkaSourceString source KafkaSource.Stringbuilder().setBootstrapServers(192.168.10.41:9092,192.168.10.42:9092,192.168.10.43:9092).setTopics(topic_alan).setGroupId(flink_kafka).setStartingOffsets(OffsetsInitializer.latest()).setValueOnlyDeserializer(new SimpleStringSchema()).build();// 设置Watermaker 当前最大的事件时间 - 最大允许的延迟时间或乱序时间// default WatermarkStrategyT withIdleness(Duration idleTimeout) // static T WatermarkStrategyT forBoundedOutOfOrderness(Duration maxOutOfOrderness) DataStream String kafkaDS env.fromSource(source,(WatermarkStrategy)WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(60)).withIdleness(Duration.ofMinutes(60)), Kafka Source);// DataStreamSourceString kafkaDS env.fromSource(source, WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(3)), Kafka Source);// 3、 transformation// 4、 sinkkafkaDS.print();// 5、executeenv.execute();}public static void main(String[] args) throws Exception {test1();}} 10、消费位点提交 Kafka source 在 checkpoint 完成时提交当前的消费位点 以保证 Flink 的 checkpoint 状态和 Kafka broker 上的提交位点一致。如果未开启 checkpointKafka source 依赖于 Kafka consumer 内部的位点定时自动提交逻辑自动提交功能由 enable.auto.commit 和 auto.commit.interval.ms 两个 Kafka consumer 配置项进行配置。 Kafka source 不依赖于 broker 上提交的位点来恢复失败的作业。提交位点只是为了上报 Kafka consumer 和消费组的消费进度以在 broker 端进行监控。 11、监控 Kafka source 会在不同的范围 (Scope)中汇报下列指标。 1、范围 每个metric 度量都被分配了一个标识符和一组key-value对在这些key-value对下将报告度量。 标识符基于3个组件注册度量时的用户定义名称、可选的用户定义范围和系统提供的范围。例如如果A.B是系统作用域C.D是用户作用域E是名称那么度量的标识符将是A.B.C.D.E。 您可以通过在conf/flink-conf.yaml中设置metrics.scope.delimiter键来配置用于标识符的分隔符默认值.。 1、用户范围 您可以通过调用MetricGroup#addGroup(String name)、MetricGroup#addGroup(int name) 或MetricGroup#addGroup(String key, String value)来定义用户作用域。这些方法影响MetricGroup#getMetricIdentifier和MetricGroup#getScopeComponents返回的内容。 counter getRuntimeContext().getMetricGroup().addGroup(MyMetrics).counter(myCounter);counter getRuntimeContext().getMetricGroup().addGroup(MyMetricsKey, MyMetricsValue).counter(myCounter);2、系统范围System Scope 系统范围包含有关度量的上下文信息例如它在哪个任务中注册或者该任务属于哪个作业。 应该包括哪些上下文信息可以通过在conf/flink-conf.yaml中设置以下键来配置。这些键中的每一个都需要一个格式字符串该字符串可能包含常量例如“taskmanager”和变量例如“task_id”这些常量和变量将在运行时被替换。 metrics.scope.jm Default: .jobmanager 应用于job manager范围内的所有指标metrics.scope.jm-job Default: .jobmanager.job_name 应用于 job manager and job范围内的所有度量metrics.scope.tm Default: .taskmanager.tm_id 应用于task manager范围内的所有度量metrics.scope.tm-job Default: .taskmanager.tm_id.job_name 应用于范围为task manager and job的所有度量metrics.scope.task Default: .taskmanager.tm_id.job_name.task_name.subtask_index 应用于task范围内的所有度量metrics.scope.operator Default: .taskmanager.tm_id.job_name.operator_name.subtask_index 应用于作用域为operator的所有度量 变量的数量或顺序没有限制。变量区分大小写。 操作员度量的默认作用域将产生类似于 localhost.taskmanager.1234.MyJob.MyOperator.0.MyMetric 的标识符 如果还希望包含任务名称但省略task manager信息则可以指定以下格式 metrics.scope.operator: .job_name.task_name.operator_name.subtask_index 这可以创建标识符localhost localhost.MyJob.MySource_-_MyOperator.MyOperator.0.MyMetric. 对于此格式字符串如果同一作业同时运行多次可能会发生标识符冲突从而导致度量数据不一致。因此建议使用通过包括id例如job_id或通过为作业和运算符分配唯一名称来提供一定程度的唯一性的格式字符串。 3、所有变量列表 JobManager: TaskManager: , tm_idJob: job_id, job_nameTask: task_id, task_name, task_attempt_id, task_attempt_num, subtask_indexOperator: operator_id,operator_name, subtask_index 对于Batch API, operator_id task_id. 4、用户变量 您可以通过调用MetricGroup#addGroup(String key, String value)来定义用户变量。此方法会影响MetricGroup#getMetricIdentifier、MetricGroup#getScopeComponents和MetricGroup#getAllVariables()返回的内容。 用户变量不能用于范围格式。 2、指标范围 该指标反映了最后一条数据的瞬时值。之所以提供瞬时值是因为统计延迟直方图会消耗更多资源瞬时值通常足以很好地反映延迟。 3、Kafka Consumer 指标 Kafka consumer 的所有指标都注册在指标组 KafkaSourceReader.KafkaConsumer 下。 例如 Kafka consumer 的指标 records-consumed-total 将在该 Flink 指标中汇报 some_parent_groups.operator.KafkaSourceReader.KafkaConsumer.records-consumed-total。 您可以使用配置项 register.consumer.metrics 配置是否注册 Kafka consumer 的指标 。默认此选项设置为 true。 关于 Kafka consumer 的指标您可以参考 Apache Kafka 文档 了解更多详细信息。 12、安全 要启用加密和认证相关的安全配置只需将安全配置作为其他属性配置在 Kafka source 上即可。 下面代码未经过验证由于缺乏环境代码来源于官网示例。 下面的代码片段展示了如何配置 Kafka source 以使用 PLAIN 作为 SASL 机制并提供 JAAS 配置 KafkaSource.builder().setProperty(security.protocol, SASL_PLAINTEXT).setProperty(sasl.mechanism, PLAIN).setProperty(sasl.jaas.config, org.apache.kafka.common.security.plain.PlainLoginModule required username\username\ password\password\;);使用 SASL_SSL 作为安全协议并使用 SCRAM-SHA-256 作为 SASL 机制 KafkaSource.builder().setProperty(security.protocol, SASL_SSL)// SSL 配置// 配置服务端提供的 truststore (CA 证书) 的路径.setProperty(ssl.truststore.location, /path/to/kafka.client.truststore.jks).setProperty(ssl.truststore.password, test1234)// 如果要求客户端认证则需要配置 keystore (私钥) 的路径.setProperty(ssl.keystore.location, /path/to/kafka.client.keystore.jks).setProperty(ssl.keystore.password, test1234)// SASL 配置// 将 SASL 机制配置为 as SCRAM-SHA-256.setProperty(sasl.mechanism, SCRAM-SHA-256)// 配置 JAAS.setProperty(sasl.jaas.config, org.apache.kafka.common.security.scram.ScramLoginModule required username\username\ password\password\;);如果在作业 JAR 中 Kafka 客户端依赖的类路径被重置了relocate class登录模块login module的类路径可能会不同因此请根据登录模块在 JAR 中实际的类路径来改写以上配置。 关于安全配置的详细描述请参阅 Apache Kafka 文档中的安全一节。 13、实现细节 在新 Source API 的抽象中Kafka source 由以下几个部分组成 1、数据源分片Source Split Kafka source 的数据源分片source split表示 Kafka topic 中的一个 partition。Kafka 的数据源分片包括 该分片表示的 topic 和 partition该 partition 的起始位点该 partition 的停止位点当 source 运行在批模式时适用 Kafka source 分片的状态同时存储该 partition 的当前消费位点该分片状态将会在 Kafka 源读取器source reader进行快照snapshot 时将当前消费位点保存为起始消费位点以将分片状态转换成不可变更的分片。 可查看 KafkaPartitionSplit 和 KafkaPartitionSplitState 类来了解细节。 2、分片枚举器Split Enumerator Kafka source 的分片枚举器负责检查在当前的 topic / partition 订阅模式下的新分片partition并将分片轮流均匀地分配给源读取器source reader。 注意 Kafka source 的分片枚举器会将分片主动推送给源读取器因此它无需处理来自源读取器的分片请求。 3、源读取器Source Reader Kafka source 的源读取器扩展了 SourceReaderBase并使用单线程复用single thread multiplex的线程模型使用一个由分片读取器 split reader驱动的 KafkaConsumer 来处理多个分片partition。消息会在从 Kafka 拉取下来后在分片读取器中立刻被解析。分片的状态 即当前的消息消费进度会在 KafkaRecordEmitter 中更新同时会在数据发送至下游时指定事件时间。 以上本文介绍了kafka作为source的13个主要 方面关于常用的功能均以可运行的示例进行展示并提供完整的验证步骤。 本专题为了便于阅读以及整体查阅分为三个部分 40、Flink 的Apache Kafka connectorkafka source的介绍及使用示例-1 40、Flink 的Apache Kafka connectorkafka sink的介绍及使用示例-2 40、Flink 的Apache Kafka connectorkafka source 和sink 说明及使用示例 完整版
http://www.zqtcl.cn/news/182157/

相关文章:

  • 广东华迪工程建设监理公司网站网站的优化从哪里进行
  • 国产做的视频网站优秀网站首页
  • 做国际黄金看什么网站网络营销品牌推广公司
  • 手机自助建站平台手机网站开发设计报价单
  • 网站建设标书范本注册了一个域名怎么做网站
  • 行政部建设公司网站东莞市做网站
  • 网站建设开发的流程建设官方网站的主要作用
  • 怎样用模板做网站wordpress柚子皮
  • 长宁区网站建设公司内蒙古赤峰市建设局网站
  • 网站配色怎么对网站的数据库做管理
  • 企业网站效果图wap网站
  • 网站建设优化托管跨境电商怎么做流程
  • 昆明网站建站平台在线阅读网站开发教程
  • pv3d 优秀网站18种最有效推广的方式
  • 一站式网站建设顾问网站建设公司专业网站科技开发
  • python做网站比php好网站开发财务费用
  • 图片上传网站变形的处理北京网站建设有哪些公司
  • 昆山品牌网站建设wordpress 浮动二维码
  • 网站网页建设论文cms免费源码
  • wordpress登录的图片不显示seo竞价网站建设
  • 邢台做移动网站找谁网上推广平台哪个好
  • 做网站准备广州短视频拍摄公司
  • 网站建设学什么软件做电影资源网站有哪些
  • 怎么样让百度搜到自己的网站wordpress的短代码
  • 聊城专业网站建设公司电子商务网站建设与维护李建忠下载
  • icp备案网站接入信息怎么写长兴县网站建设
  • 如何在网上注册公司网站网站不想让百度收录
  • 服务器做jsp网站教程视频免费的舆情网站app下载
  • 肇庆网站建设方案优化家居定制类网站建设
  • 自助建站加盟备案的网站有什么好处