【踩坑】Flink无法使用Jedis连接redis服务器

现象:在本地环境Flink流处理的task 用main函数可以运行 但是打包成jar包部署到Flink上就运行失败

 

过程:

项目使用Flink-scala写的 scala没有相关连接redis的包 但是Jedis只支持Java版本 所以写了个JedisUtil类 用scala调用方法来创建jedis session 工具类中都使用静态方法与变量编写

部署上去发现不行

后来将JedisUtil改成非静态的成员变量和方法后再部署就可以运行了

 

原因: scala似乎不支持java类的静态方法与静态成员变量的调用 所以需要将Java的Util类 均采用非static的写法 创建一个新的Util对象

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flink 中设置 Redis 中的数据过期时间可以通过以下步骤: 1. 在 Flink 中引入 Redis 相关的依赖,例如 jedisflink-connector-redis。 2. 在 Flink 中创建一个 RedisSinkFunction,该函数负责将数据写入 Redis 中。 3. 在 RedisSinkFunction 中使用 jedis 调用 Redis 的 API 设置数据的过期时间。 下面是一个示例代码,演示了如何在 Flink使用 RedisSinkFunction 设置 Redis 中的数据过期时间: ```java import org.apache.flink.streaming.api.functions.sink.RichSinkFunction; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; public class RedisSink extends RichSinkFunction<String> { private JedisPool jedisPool; // 初始化 Redis 连接池 @Override public void open(Configuration parameters) throws Exception { super.open(parameters); JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(10); poolConfig.setMaxIdle(5); poolConfig.setTestOnBorrow(true); jedisPool = new JedisPool(poolConfig, "localhost", 6379); } // 将数据写入 Redis 中,并设置过期时间 @Override public void invoke(String value, Context context) throws Exception { Jedis jedis = jedisPool.getResource(); jedis.set("key", value); jedis.expire("key", 60); // 设置过期时间为 60 秒 jedis.close(); } // 关闭 Redis 连接池 @Override public void close() throws Exception { super.close(); jedisPool.destroy(); } } ``` 在 Flink 的主函数中,可以将该 RedisSinkFunction 作为 SinkFunction 使用,例如: ```java DataStream<String> stream = ... // 从数据源获取数据流 stream.addSink(new RedisSink()); ``` 这样,在每次调用 RedisSinkFunction 的 invoke() 方法时,都会将数据写入 Redis 中,并设置过期时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值