Flink作业写holo表报错,如何解决?

Flink作业写holo表报错,如何解决?
2024-04-16 10:12:13
java.io.IOException: java.io.IOException: com.alibaba.hologres.client.exception.HoloClientException: [UNKNOW:XX000]ERROR: [HoloFixedExecutorCachedOnFE] internal error: fail to execute query Unknown code(105): Tablet is follower, write is not allowed.

展开
收起
三分钟热度的鱼 2024-04-24 20:57:25 206 分享 版权
阿里云 AI 助理回答

问题分析

根据报错信息,Flink作业在写入Hologres表时出现以下错误:

java.io.IOException: java.io.IOException: com.alibaba.hologres.client.exception.HoloClientException: [UNKNOW:XX000]ERROR: [HoloFixedExecutorCachedOnFE] internal error: fail to execute query Unknown code(105): Tablet is follower, write is not allowed.

该错误表明当前尝试写入的Hologres表所在的Tablet是Follower角色,而Follower节点不允许写操作。Hologres的写操作只能在Leader节点上执行。


解决方案

1. 确认Hologres表的分布键和分区策略

  • Hologres表的写入性能和正确性依赖于其分布键(Distribution Key)和分区策略。如果分布键设计不合理,可能导致数据写入到Follower节点。
  • 检查目标表的建表语句,确保分布键的设计符合业务需求,并且能够均匀分布数据。

建议操作: - 使用以下SQL语句查看表的分布键: sql SELECT attname FROM pg_attribute WHERE attrelid = 'your_table_name'::regclass AND attnum > 0 AND NOT attisdropped; - 如果分布键设计不合理,可以通过ALTER TABLE语句重新设置分布键。

2. 检查Hologres实例的副本配置

  • Hologres支持多副本机制,通常一个Tablet会有多个副本(Leader和Follower)。如果Leader节点不可用或发生切换,可能会导致写入失败。
  • 确保Hologres实例的副本状态正常,并且Leader节点可用。

建议操作: - 登录Hologres控制台,检查实例的运行状态和副本分布情况。 - 如果发现Leader节点异常,可以联系阿里云技术支持进行修复。

3. 调整Flink作业的写入参数

  • 在Flink作业中,写入Hologres时需要正确配置连接器参数,以避免写入到Follower节点。
  • 确保hologres.client.write.mode参数设置为INSERT_OR_REPLACEINSERT_OR_UPDATE,以支持高并发写入。

示例配置:

config.setString(HologresConfigs.ENDPOINT, "<yourEndpoint>");
config.setString(HologresConfigs.USERNAME, "<yourUserName>");
config.setString(HologresConfigs.PASSWORD, "<yourPassword>");
config.setString(HologresConfigs.DATABASE, "<yourDatabaseName>");
config.setString(HologresConfigs.TABLE, "<yourTableName>");
config.setString("hologres.client.write.mode", "INSERT_OR_REPLACE");

4. 增加重试机制

  • 在分布式系统中,Leader节点切换或网络抖动可能导致短暂的写入失败。通过增加重试机制,可以提高作业的容错能力。

建议操作: - 在Flink作业中配置Hologres连接器的重试参数,例如: java config.setInteger("hologres.client.retry.max.attempts", 3); config.setInteger("hologres.client.retry.interval.ms", 1000);

5. 升级Hologres连接器版本

  • 如果使用的Hologres连接器版本较旧,可能存在已知的Bug或兼容性问题。建议升级到最新版本的连接器。

操作步骤: - 下载最新版本的Hologres连接器JAR包。 - 替换现有连接器,并重新打包Flink作业。

6. 检查Flink作业的资源配置

  • 如果Flink作业的并发度设置过高,可能导致Hologres实例的压力过大,进而引发写入失败。
  • 调整Flink作业的并发度和资源分配,确保与Hologres实例的处理能力匹配。

建议操作: - 在Flink控制台的资源配置页面,降低Sink节点的并发度。 - 例如,将holo.tpc_ds.store_sales Sink节点的并发度从8降低到4。


总结

通过以上步骤,您可以逐步排查并解决Flink作业写入Hologres表时的Tablet is follower, write is not allowed问题。重点在于: - 优化表结构设计,确保分布键合理。 - 检查Hologres实例状态,确保Leader节点可用。 - 调整Flink作业配置,包括写入模式、重试机制和并发度。

如果问题仍未解决,建议联系阿里云技术支持,提供详细的日志和配置信息以便进一步分析。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理