开发者社区 问答 正文

使用RedisSink无法将读取的Kafka数据写入Redis中

现在我所在的项目组在调研Flink框架,有一个指标需要读取Kafka中的数据然后使用Redis存储最终的结果。 我们在pom文件中引入了flink-redis的connector,然后按照官方的RedisSink案例,在本地开发的时候可以正常写入到某台服务器上的Redis中, 但是当我把程序打成Jar包之后,部署到服务器(华为云MRS)上使用flink run提交到yarn之后总是在报错,无法写入到Redis中,各位知道是为什么吗? 问题已经卡了我两天了,一点进展都没有,有劳各位帮忙解答一下,Thank you! 报错如下: redis.client.jedis.exceptions.JedisConnectionException:Could not get a resource from the pool at ..... *来自志愿者整理的flink邮件归档

展开
收起
小阿怪 2021-12-06 12:48:17 1011 分享
分享
版权
举报
阿里云 AI 助理回答

根据您描述的问题,程序在本地开发环境能够正常写入Redis,但在华为云MRS服务器上通过YARN提交任务后无法写入Redis,报错为JedisConnectionException: Could not get a resource from the pool。这通常意味着Flink作业在运行时无法成功从连接池中获取到Redis的连接资源。结合您的情况和知识库信息,以下是一些可能的原因及排查建议:

  1. 网络配置问题:

    • 确保华为云MRS服务器与Redis服务器之间的网络是连通的。由于您能通过本地环境访问Redis,需要检查云环境下的网络策略、安全组规则或VPC设置是否允许从MRS服务器IP访问Redis服务。
  2. Redis连接参数配置:

    • 检查提交到YARN的任务中使用的Redis连接参数(如host、port)是否正确无误,以及是否与本地测试时一致。确保Redis连接配置适应于生产环境的地址和端口。
  3. 资源限制与连接池配置:

    • 报错提示无法从连接池获取资源,可能是因为连接池配置不当或Redis服务达到最大连接数限制。请检查RedisSink使用的连接池配置(如最大连接数maxTotal、最大空闲连接数maxIdle等),确保它们适合生产负载,并且没有超出Redis服务器的最大并发连接限制。
  4. 依赖冲突或版本兼容性:

    • 验证在项目构建(pom.xml或其它依赖管理文件)中引入的flink-redis connector版本是否与Flink和Redis服务版本兼容。不兼容的版本可能导致运行时错误或异常行为。
  5. 环境变量与系统属性:

    • 在远程服务器上运行时,确认所有必要的环境变量和Java系统属性已正确设置,特别是那些影响网络连接或类加载路径的设置。
  6. 日志分析:

    • 详细查看Flink作业的日志输出,特别是与Redis连接相关的部分,以获取更具体的错误信息。这些日志可能会揭示连接失败的具体原因,比如认证失败、超时设置不当等。
  7. 代理或网络转发:

    • 如果存在网络代理或端口映射,请确保Flink应用能够识别并正确使用这些代理设置来连接Redis。如果必要,考虑按照Kafka连接问题的解决思路,将代理地址配置到Redis客户端可识别的形式。

综上所述,解决此问题的关键在于细致检查网络连通性、配置一致性、资源限制以及日志中的具体错误信息。希望这些建议能帮助您定位并解决问题。您也可以通过ECS一键诊断全面排查并修复ECS问题。

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