如何在flink map()

时间:2018-01-08 13:52:59

标签: redis apache-flink

我的代码是这样的:

  StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

  env.enableCheckpointing(500);

  DataStream<String> stream = env.addSource(getConsumer(TOPIC_1));

  Jedis jedis = new Jedis("master1");
  stream.map(new RichMapFunction<String, String>() {
      @Override
      public String map(String value) throws Exception {
          String result = jedis.hget("rtc", value);
          return result;
      }
  });

我想在map()中从Redis获取一些数据,但它无法运行,因为Jedis.class不可序列化。

如何在map()中使用不可序列化的类,例如ZkClient,Jedis?

1 个答案:

答案 0 :(得分:2)

RichMapFunction之类的所有丰富函数都可以覆盖open(Configuration)close调用。一旦将函数部署到执行它的TaskManager,就会调用这些生命周期方法。

class MyMapFunction extends RichMapFunction<String, String> {

    private transient Jedis jedis;

    @Override
    public void open(Configuration parameters) {
        // open connection to Redis, for example
        jedis = new Jedis("master1");
    }

    @Override
    public void close() {
        // close connection to Redis
        jedis.close();
    }
}