1 Flink 写入Redis
基于巴希尔(Bahire)-Flink写入Redis集群。
1.1 继承RichSinkFunction
即Flink-Stream。
1.2 使用第3方的包
即Apache-Bachir-Flink。
public class RedisWriteUtil {
/*
* FlinkJedisClusterConfig: 集群模式
* FlinkJedisPoolConfig:单机模式
* FlinkJedisSentinelConfig:哨兵模式
*
*/
// Jedis配置
private static FlinkJedisClusterConfig JEDIS_CONF = null;
static {
ParameterTool parameterTool = ParameterUtil.getParameters();
String host = parameterTool.get("redis.host");
String port = parameterTool.get("redis.port");
InetSocketAddress inetSocketAddress = new InetSocketAddress(host,Integer.parseInt(port));
Set<InetSocketAddress> set = new HashSet<>();
set.add(inetSocketAddress);
JEDIS_CONF = new FlinkJedisClusterConfig
.Builder()
.setNodes(set)
.build();
}
/**
* 基于Bahir写入Redis,Redis的数据是String类型
*/
public static void writeByBahirWithString(DataStream<Tuple2<String,String>> input) {
input.addSink(new RedisSink<>(JEDIS_CONF,new RedisSinkByBahirWithString()));
}
}注意到RedisSink:
public class RedisSink<IN> extends RichSinkFunction<IN> {2 Redis-Connector
Apache-Bachir-Flink所提供的
缺点
- 使用Jedis, 没有使用Lettuce
- 没有对 Flink Table/SQL Api 的支持
public class RedisSinkByBahirWithString implements RedisMapper<Tuple2<String, String>> {
@Override
public RedisCommandDescription getCommandDescription() {
/*
* 如果Redis的数据类型是 hash 或 z-Set
* RedisCommandDescription 的构造方法必须传入 additionalKey
* additionalKey就是Redis的键
*/
return new RedisCommandDescription(RedisCommand.SET);
}
@Override
public String getKeyFromData(Tuple2<String, String> input) {
return input.f0;
}
@Override
public String getValueFromData(Tuple2<String, String> input) {
return input.f1;
}
}3 Flink 读取Redis
Flink通过富函数类实现自定义Source以及通过自定义Source读取Redis集群。
3.1 继承 RichSourceFunction
可实现自定义的Source。
3.2 继承RichParallelSourceFunction(推荐)
也就是可以设置并行度。
RichSourceFunction RichSinkFunction,RichMapFunction都是富函数类
Flink API集合分为2大类:
- 函数类 (MapFunction)
- 富函数类 (RichMapFunction)
富函数类比函数类提供更多函数生命周期和获取上下文的方法:
富函数类通常是抽象类
RichParallelSourceFunction V.S RichSourceFunction
- RichParallelSourceFunction 可设置并行度
- RichParallelSourceFunction 和RichSourceFunction 代码可互相套用
- RichParallelSourceFunction 默认并行度是cpu core数
- RichSourceFunction 并行度只能是1
3.3 实现SourceFunction接口
Flink 原生的Source。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
- LLM Agent应用开发
- 区块链应用开发
- 大数据开发挖掘经验
- 推荐系统项目
目前主攻市级软件项目设计、构建服务全社会的应用系统。
















