首页 > 解决方案 > 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 分钟。

是否有任何其他参数可以用来在这种情况下获得更好的性能?

谢谢,

标签: jdbcapache-flinkimpala

解决方案


我不知道确切的配置 flink,所以请提供完整的详细信息。最常见的错误是由于 URL 中缺少rewriteBatchedStatements=true。这是因为 JDBC 将发送 1000 个单个插入语句,而不是 1 个由 1000 个插入语句组成的语句。


推荐阅读