jdbc - flink impala jdbc插入很慢
问题描述
目前,我们正面临一些使用 jdbc 的flink作业使用impala jdbc 每小时向 Kudu 表插入大约 100 万条数据的性能问题。
我们试图增加参数
JdbcExecutionOptions.builder()
.withBatchSize(1000)
.withBatchIntervalMs(200)
.withMaxRetries(3)
.build()
检查点间隔为 10 秒,检查点超时为 10 分钟,但没有结果。我们还尝试将并行数从 3 增加到 6,但也不起作用。
我们还尝试将 BatchSize 增加到 10000,但我们面临错误
org.apache.flink.connector.jdbc.internal.JdbcBatchingOutputFormat [] - JDBC executeBatch error, retry times = 0
java.sql.SQLException: [Cloudera][ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:AnalysisException: Exceeded the statement exp
ression limit (250000)
Statement has 720000 expressions.
我们能得到的最好结果是 1500 条记录/分钟,参数为
JdbcExecutionOptions.builder()
.withBatchSize(200)
.withBatchIntervalMs(50)
.withMaxRetries(3)
.build()
检查点间隔 3 秒,检查点超时 10 分钟。
是否有任何其他参数可以用来在这种情况下获得更好的性能?
谢谢,
解决方案
我不知道确切的配置 flink,所以请提供完整的详细信息。最常见的错误是由于 URL 中缺少rewriteBatchedStatements=true。这是因为 JDBC 将发送 1000 个单个插入语句,而不是 1 个由 1000 个插入语句组成的语句。
推荐阅读
- c++ -
Linux 中 GCC 程序集的 BIOS 中断? - google-cloud-ml - AI Platform 上所有日志的严重性为错误
- asp.net-mvc - 一对多或多对多关系
- python - 检查字典中的重复值
- python - 列表打印问题
- google-cloud-platform - 如何在 google cloud sql server 中启用 CDC 以进行 AWS DMS 复制?
- javascript - (Trello.js) 在函数中获得响应后返回 ID
- javascript - 如何优化 IndexedDb 性能?多个 indexeddb 与多个对象存储?
- javascript - 如何使用 Ammo.btCompoundShape(Bullet Physics 的 JavaScript 端口)?
- javascript - 如何在没有安装的情况下在 VueRouter 中解析 $route
?