【问题标题】:Redis connection reset in FlinkFlink 中的 Redis 连接重置
【发布时间】:2017-12-19 22:36:44
【问题描述】:

我有一个类在我的 Flink 流作业中扩展了 RichFlatmapFunction。我在open() 方法中创建了一个Jedis 实例,并在close() 方法中关闭它(jedis.close()),这样通过转换的所有记录都使用相同的Jedis 实例。这种方法以前没有给我任何连接错误。但是在最近的一次工作中,我得到了错误,

"redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException:连接重置”。

这可能是因为我对所有记录都使用相同的绝地实例(保持打开状态)吗?创建实例时我没有设置任何超时。所以超时也是默认值。

如果我使用 JedisPool 来检索和关闭每条记录的 Jedis 实例,我能否避免此错误?

【问题讨论】:

  • 如果有帮助,请为答案投票

标签: apache-flink flink-streaming jedis


【解决方案1】:

连接重置发生在网络级别的服务器和客户端连接之间存在任何中断的情况下,即任何网络丢失、防火墙或应用程序崩溃或预期关闭

由于空闲超时,也有可能打算关闭。

现在开始使用 JedisPool,使用连接池是多线程环境中的最佳实践,因为重用连接是有效的。所以请尝试通过适当的配置来使用它们

【讨论】:

  • “默认情况下,如果客户端空闲多秒,最新版本的 Redis 不会关闭与客户端的连接:连接将永远保持打开状态”。 Redis 的文档中提到了这一点,我们使用的是最新版本的 Redis。我们也没有在配置中设置“空闲超时”。所以这个问题可能是因为“网络级别的服务器和客户端连接之间的任何中断,即任何网络丢失、防火墙或应用程序崩溃”?
  • @avidlearner 是的,它必须是触发 TCP RST 输入的情况
猜你喜欢
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2022-11-10
  • 1970-01-01
  • 2021-10-18
  • 2020-01-02
  • 2022-12-15
相关资源
最近更新 更多