Flink—RedisSink
1.开发流程
特别说明:
Flink版本1.12
Reids不是跟着Flink版本的走的,相当于有第三方提供的工具类。
2.环境介绍
idea+liunx
添加Redis Connector依赖
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-connector-redis -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-redis_2.11</artifactId>
<version>1.1.5</version>
</dependency>
官网提供(不推荐,可能下载不下来)
<dependency>
<groupId>org.apache.bahir</groupId>
<artifactId>flink-connector-redis_2.11</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
3.代码
import com.atguigu.bean.WaterSensor;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.redis.RedisSink;
import org.apache.flink.streaming.connectors.redis.common.config.FlinkJedisPoolConfig;
import org.apache.flink.streaming.connectors.redis.common.mapper.RedisCommand;
import org.apache.flink.streaming.connectors.redis.common.mapper.RedisCommandDescription;
import org.apache.flink.streaming.connectors.redis.common.mapper.RedisMapper;
public class Flink08_Sink_Redis {
public static void main(String[] args) throws Exception {
//1.获取执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);
//2.读取端口数据并转换为JavaBean
SingleOutputStreamOperator<WaterSensor> waterSensorDS = env.socketTextStream("hadoop102", 9999)
.map(new MapFunction<String, WaterSensor>() {
@Override
public WaterSensor map(String value) throws Exception {
String[] split = value.split(",");
return new WaterSensor(split[0],
Long.parseLong(split[1]),
Integer.parseInt(split[2]));
}
});
//3.将数据写入Redis
FlinkJedisPoolConfig jedisPoolConfig = new FlinkJedisPoolConfig.Builder()
.setHost("hadoop102")
.setPort(6379)
.build();
waterSensorDS.addSink(new RedisSink<>(jedisPoolConfig, new MyRedisMapper()));
//4.执行任务
env.execute();
}
public static class MyRedisMapper implements RedisMapper<WaterSensor> {
@Override
public RedisCommandDescription getCommandDescription() {
// 返回存在Redis中的数据类型 存储的是Hash, 第二个参数是外面的key
return new RedisCommandDescription(RedisCommand.HSET, "Sensor");
}
@Override
public String getKeyFromData(WaterSensor data) {
// 从数据中获取Key: Hash的Key
return data.getId();
}
@Override
public String getValueFromData(WaterSensor data) {
// 从数据中获取Value: Hash的value
return data.getVc().toString();
}
}
}
public class WaterSensor {
private String id;
private Long ts;
private Integer vc;
}
4.启动redis
在redis的bin目录下,输入命令
1--> redis-server ./redis.conf
2--> redis-cli -h hadoop102
清空整个 Redis 服务器的数据(删除所有数据库的所有 key:Flushall
查看redis里的key:key *
查看Redis是否收到数据
redis-cli --raw