[Flink开发总结]Tuple2<Integer, Long> TreeSet<HotItem>的类型怎么获取?

问题:

在Aggregate状态获取时,为了方便起见可以将聚合函数简化为Tuple2<Integer, Long>类型,但是Tuple2<Integer, Long>的类型如何表示呢?
在这里插入图片描述
在这里插入图片描述

解决:

表示方式如下:

 Types.TUPLE(Types.INT, Types.LONG)
valueState = getRuntimeContext()
.getState(new ValueStateDescriptor<TreeSet<HotItem>>(
"valueState",
 TypeInformation.of(new TypeHint<TreeSet<HotItem>>() { })));

总结:

1.其实万能的方法就是使用TypeInformation.of(new TypeHint<TreeSet<HotItem>>() { }
2.记得最后加上{},防止泛型擦除
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <artifactId>flink-connectors</artifactId> <groupId>org.apache.flink</groupId> <version>1.14.0</version> <relativePath>../../pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>flink-connector-jdbc_2.12</artifactId> <name>Flink : Connectors : JDBC</name> <build> <plugins> <plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <reuseForks>false</reuseForks> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-api-java-bridge_2.12</artifactId> <version>1.14.0</version> <scope>provided</scope> <exclusions> <exclusion> <artifactId>flink-table-api-java</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-java</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-streaming-java_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> </exclusions> <optional>true</optional> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.10</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-test-utils_2.12</artifactId> <version>1.14.0</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>flink-runtime</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-runtime</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-clients_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>curator-test</artifactId> <groupId>org.apache.curator</groupId> </exclusion> <exclusion> <artifactId>flink-statebackend-changelog</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-streaming-java_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-common</artifactId> <version>1.14.0</version> <type>test-jar</type> <scope>test</scope> <exclusions> <exclusion> <artifactId>flink-core</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-connector-files</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-shaded-asm-7</artifactId> <groupId>org.apache.flink</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>1.14.0</version> <type>test-jar</type> <scope>test</scope> <exclusions> <exclusion> <artifactId>flink-file-sink-common</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-scala_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-shaded-guava</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>commons-math3</artifactId> <groupId>org.apache.commons</groupId> </exclusion> <exclusion> <artifactId>flink-core</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-runtime</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-java</artifactId> <groupId>org.apache.flink</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-core</artifactId> <version>1.14.0</version> <type>test-jar</type> <scope>test</scope> <exclusions> <exclusion> <artifactId>flink-annotations</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-metrics-core</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>commons-lang3</artifactId> <groupId>org.apache.commons</groupId> </exclusion> <exclusion> <artifactId>kryo</artifactId> <groupId>com.esotericsoftware.kryo</groupId> </exclusion> <exclusion> <artifactId>commons-collections</artifactId> <groupId>commons-collections</groupId> </exclusion> <exclusion> <artifactId>commons-compress</artifactId> <groupId>org.apache.commons</groupId> </exclusion> <exclusion> <artifactId>flink-shaded-asm-7</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-shaded-guava</artifactId> <groupId>org.apache.flink</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner_2.12</artifactId> <version>1.14.0</version> <type>test-jar</type> <scope>test</scope> <exclusions> <exclusion> <artifactId>flink-table-common</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-api-scala_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-api-scala-bridge_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-runtime_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-api-java</artifactId> <groupId>org.apache.flink</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-table-planner_2.12</artifactId> <version>1.14.0</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>flink-table-common</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-api-scala_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-api-scala-bridge_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-runtime_2.12</artifactId> <groupId>org.apache.flink</groupId> </exclusion> <exclusion> <artifactId>flink-table-api-java</artifactId> <groupId>org.apache.flink</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.opentable.components</groupId> <artifactId>otj-pg-embedded</artifactId> <version>0.13.3</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>xz</artifactId> <groupId>org.tukaani</groupId> </exclusion> <exclusion> <artifactId>commons-io</artifactId> <groupId>commons-io</groupId> </exclusion> <exclusion> <artifactId>commons-codec</artifactId> <groupId>commons-codec</groupId> </exclusion> <exclusion> <artifactId>spotbugs-annotations</artifactId> <groupId>com.github.spotbugs</groupId> </exclusion> <exclusion> <artifactId>jcl-over-slf4j</artifactId> <groupId>org.slf4j</groupId> </exclusion> <exclusion> <artifactId>commons-lang3</artifactId> <groupId>org.apache.commons</groupId> </exclusion> <exclusion> <artifactId>commons-compress</artifactId> <groupId>org.apache.commons</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>postgresql</artifactId> <version>1.16.0</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>jdbc</artifactId> <groupId>org.testcontainers</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>ch.vorburger.mariaDB4j</groupId> <artifactId>mariaDB4j</artifactId> <version>2.4.0</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>mariaDB4j-core</artifactId> <groupId>ch.vorburger.mariaDB4j</groupId> </exclusion> <exclusion> <artifactId>mariaDB4j-db-linux64</artifactId> <groupId>ch.vorburger.mariaDB4j</groupId> </exclusion> <exclusion> <artifactId>mariaDB4j-db-win32</artifactId> <groupId>ch.vorburger.mariaDB4j</groupId> </exclusion> <exclusion> <artifactId>mariaDB4j-db-mac64</artifactId> <groupId>ch.vorburger.mariaDB4j</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>2.5.4</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>protobuf-java</artifactId> <groupId>com.google.protobuf</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.14.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>mysql</artifactId> <version>1.16.0</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>jdbc</artifactId> <groupId>org.testcontainers</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.15</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>1.3.9</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-test-utils-junit</artifactId> <version>1.14.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.7.2</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>junit-jupiter-api</artifactId> <groupId>org.junit.jupiter</groupId> </exclusion> <exclusion> <artifactId>junit-jupiter-params</artifactId> <groupId>org.junit.jupiter</groupId> </exclusion> <exclusion> <artifactId>junit-jupiter-engine</artifactId> <groupId>org.junit.jupiter</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.7.2</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>apiguardian-api</artifactId> <groupId>org.apiguardian</groupId> </exclusion> <exclusion> <artifactId>junit-platform-engine</artifactId> <groupId>org.junit.platform</groupId> </exclusion> <exclusion> <artifactId>junit</artifactId> <groupId>junit</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.21.0</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>byte-buddy</artifactId> <groupId>net.bytebuddy</groupId> </exclusion> <exclusion> <artifactId>byte-buddy-agent</artifactId> <groupId>net.bytebuddy</groupId> </exclusion> <exclusion> <artifactId>objenesis</artifactId> <groupId>org.objenesis</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>2.0.4</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>powermock-module-junit4-common</artifactId> <groupId>org.powermock</groupId> </exclusion> <exclusion> <artifactId>hamcrest-core</artifactId> <groupId>org.hamcrest</groupId> </exclusion> <exclusion> <artifactId>junit</artifactId> <groupId>junit</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-api-mockito2</artifactId> <version>2.0.4</version> <scope>test</scope> <exclusions> <exclusion> <artifactId>mockito-core</artifactId> <groupId>org.mockito</groupId> </exclusion> <exclusion> <artifactId>powermock-api-support</artifactId> <groupId>org.powermock</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.14.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.14.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>2.14.1</version> <scope>test</scope> </dependency> </dependencies> <properties> <otj-pg-embedded.version>0.13.3</otj-pg-embedded.version> <postgres.version>42.2.10</postgres.version> </properties> </project> 帮我完善依赖
最新发布
09-20
这是一个**代码型**问题。 --- ### **代码概述** 你提供的 `pom.xml` 是 **Flink JDBC Connector 官方模块的构建文件**,用于开发和测试 Flink 与数据库(如 MySQL、PostgreSQL 等)的连接功能。但该文件是 **官方源码的一部分**,不适合作为用户项目的依赖配置 —— 它缺少主程序入口支持、核心运行时依赖未暴露,且大量依赖被标记为 `<scope>test</scope>` 或 `provided`。 如果你的目标是:**在自己的 Flink 项目中使用 JDBC 写入 MySQL(例如从 Flink 写数据到虚拟机 MySQL)**,那么当前 `pom.xml` 不可直接使用,需要**重构并简化依赖结构**。 --- ### **代码解析** #### ❌ 当前 `pom.xml` 的主要问题: | 问题 | 说明 | |------|------| | **用途错误** | 这是 Flink 源码中的子模块 `flink-connector-jdbc_2.12`,用于构建 connector 自身,不是用户项目可用的依赖集。 | | **缺少 runtime 依赖** | 如 `flink-scala`, `flink-streaming-scala` 被排除或设为 `provided`,导致无法编译你的流处理代码。 | | **依赖作用域不合理** | 大量测试库(如 Testcontainers、H2、MariaDB4j)仅用于单元测试,不应出现在生产级项目中。 | | **无打包插件** | 缺少 `maven-shade-plugin`,无法生成可提交到 Flink 集群的 Fat Jar。 | --- ### ✅ 推荐解决方案:新建一个适合用户的 `pom.xml` 以下是适用于 **Scala 用户编写 Flink 程序并将结果写入 MySQL** 的精简、正确、可运行的 `pom.xml` 配置。 ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example.flink</groupId> <artifactId>flink-mysql-demo</artifactId> <version>1.0-SNAPSHOT</version> <name>Flink → MySQL Demo</name> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <flink.version>1.14.0</flink.version> <scala.binary.version>2.12</scala.binary.version> </properties> <dependencies> <!-- Flink Core for Scala --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-scala_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-scala_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <!-- Flink JDBC Connector --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <!-- MySQL Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!-- 日志组件 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> </dependency> </dependencies> <build> <sourceDirectory>src/main/scala</sourceDirectory> <plugins> <!-- Scala 编译插件 --> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>4.5.6</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <!-- 打包成 Fat Jar --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <!-- 替换为你的主类名,例如:WindowCountToMySQL --> <mainClass>WindowCountToMySQL</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> ``` --- ### ✅ 使用说明 1. **保存为新项目根目录下的 `pom.xml`** 2. 将你的 Scala 代码放在 `src/main/scala/` 下 3. 编译打包: ```bash mvn clean package ``` 4. 生成的 jar 包路径: ``` target/flink-mysql-demo-1.0-SNAPSHOT.jar ``` 5. 可以通过以下方式运行: ```bash java -cp target/flink-mysql-demo-1.0-SNAPSHOT.jar WindowCountToMySQL ``` 或提交到 Flink 集群。 --- ### **知识点** 1. **Maven 依赖作用域理解** `compile`:参与编译和运行;`provided`:仅编译期提供(由运行环境加载);用户项目应使用 `compile`。 2. **Flink Connector 命名规则** `flink-connector-jdbc_2.12` 中的 `_2.12` 表示 Scala 版本,必须与项目一致,否则类加载失败。 3. **Fat Jar 构建必要性** 使用 `maven-shade-plugin` 打包所有依赖进一个 jar 文件,确保在本地或集群中独立运行时不缺依赖。 --- ### ✅ 总结 > ❌ 你不应该“完善”那个原始的 `pom.xml` —— 它是 Flink 源码内部构建用的,不适合用户开发。 > ✅ 应该使用上面提供的**简化版 `pom.xml`**,它才是正确的用户级项目依赖配置。 只要使用推荐的 `pom.xml`,配合之前的 Flink 程序代码(如窗口统计 + JdbcSink),即可成功运行并将数据写入虚拟机 MySQL 数据库。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值