flink-sqlclient报错

博客内容描述了在使用Flink SQL Client时遇到的TableException错误,该错误指出Table sink不支持update changes。解决方案是将sql-client-defaults.yaml配置文件中的execution类型改为'batch'。

flink-sqlclient报错:
org.apache.flink.table.api.TableException: Table sink ‘default_catalog.default_database.sink’ doesn’t support consuming update changes which is produced by node GroupAggregate

解决方案:
修改sql-client-defaults.yaml中# ‘batch’ or ‘streaming’ execution
type: batch
就可以了。

你遇到的这个错误: ``` [ERROR] Could not find the selected project in the reactor: :flink-connector-elasticsearch7 @ ``` 是一个 **非常典型的 Maven 多模块项目中模块名不匹配或未激活** 的问题。 --- ## ✅ 简短回答: 你在 `flink` 项目的 `release-1.17.2` 分支下,试图构建 `flink-connector-elasticsearch7`,但该模块 **不存在于当前分支的模块结构中**,或者它的实际 artifactId 是别的名字(比如带前缀),导致 Maven 找不到。 --- ## 🔍 一、根本原因分析 Flink 是一个超大型多模块项目。不同版本中: - 模块命名方式可能变化 - Elasticsearch 连接器的位置和是否默认包含在构建中也不同 ### 在 `release-1.17.2` 分支中,真实情况是: ✅ **Elasticsearch 连接器不在主代码树中!** 它被移到了独立仓库: > 🔗 https://github.com/apache/flink-connector-elasticsearch 并且从 Flink 1.13+ 开始,官方不再将 ES connector 编译进主发布包。 👉 所以你在主 Flink 项目里执行: ```bash mvn clean package -pl :flink-connector-elasticsearch7 -am -DskipTests ``` Maven 就会报错:**“找不到这个模块”** —— 因为它压根就不在你的项目 reactor 中。 --- ## 📂 二、如何确认当前有哪些模块? 运行以下命令查看所有可用模块: ```bash mvn help:evaluate -Dexpression=project.modules -q -DforceStdout ``` 你会看到输出类似: ``` [flink-java, flink-streaming-java, flink-clients, flink-runtime, ...] ``` 🔍 搜索一下有没有 `elasticsearch` 相关的模块?大概率没有。 --- ## ✅ 正确解决方案:使用独立的 connector 仓库 ### ✅ 方法一:克隆官方 ES Connector 仓库(推荐) ```bash git clone https://github.com/apache/flink-connector-elasticsearch.git cd flink-connector-elasticsearch git checkout release-1.17 # 对应 Flink 1.17.x ``` 然后构建你需要的版本: #### 构建 Elasticsearch 7 版本: ```bash mvn clean package -DskipTests \ -pl flink-connector-elasticsearch7 \ -am ``` ✅ 输出 JAR 路径: ``` flink-connector-elasticsearch7/target/flink-connector-elasticsearch7-x.x.x.jar ``` 📌 注意:这个 JAR 只包含运行时类,**你需要自己添加 elasticsearch 客户端依赖到 lib 目录** --- ### ✅ 方法二:手动添加依赖(适用于 SQL Client 或 Table API 用户) 如果你只是想用 Flink SQL 写入 ES,可以直接下载预编译好的 JAR: 🔗 下载地址(Maven Central): - https://repo.maven.apache.org/maven2/org/apache/flink/flink-connector-elasticsearch7/1.17.2/ 下载这两个文件: ```bash wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-connector-elasticsearch7/1.17.2/flink-connector-elasticsearch7-1.17.2.jar wget https://repo.maven.apache.org/maven2/org/apache/flink/flink-json/1.17.2/flink-json-1.17.2.jar # 需要 JSON format 支持 ``` 放入 `$FLINK_HOME/lib/`: ```bash cp flink-connector-elasticsearch7-1.17.2.jar $FLINK_HOME/lib/ cp flink-json-1.17.2.jar $FLINK_HOME/lib/ ``` 再启动 SQL Client 即可使用: ```sql CREATE TABLE my_index ( id INT, title STRING ) WITH ( 'connector' = 'elasticsearch-7', 'hosts' = 'http://localhost:9200', 'index' = 'my-index' ); ``` --- ## ⚠️ 常见误区澄清 | 误解 | 实际情况 | |------|----------| | “Flink 主项目应该包含所有 connector” | ❌ 不对,从 1.13 起很多 connector 被拆出 | | “只要模块名对就能编” | ❌ 必须存在于 reactor 中且被正确激活 | | `flink-connector-elasticsearch7` 是标准模块 | ❌ 它不在主 Flink repo 中 | --- ## ✅ 如何避免这类问题? ### 1. 查看 Flink 官方文档对应版本 🔗 https://nightlies.apache.org/flink/flink-docs-release-1.17/docs/connectors/table/elasticsearch/ 你会发现它明确指出: > This connector is not part of binary distribution. Add it as a dependency. 并给出 Maven 坐标: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-elasticsearch7</artifactId> <version>1.17.2</version> </dependency> ``` ### 2. 使用 `-am` 时确保父模块存在 `-am` 表示 also build modules that the requested project depends on,但如果主项目没包含它,自然也无法依赖。 --- ## ✅ 总结:你现在该怎么办? | 步骤 | 操作 | |------|------| | 1 | 不要在主 Flink 项目中尝试构建 ES connector | | 2 | 改为使用 [flink-connector-elasticsearch](https://github.com/apache/flink-connector-elasticsearch) 独立仓库 | | 3 | 或直接从 Maven Central 下载预编译 JAR | | 4 | 放入 `$FLINK_HOME/lib/` 并配合 `flink-json` 使用 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科学的N次方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值