项目介绍
基于bahir-flink二次开发,相对bahir调整的内容有:
1.使用Lettuce替换Jedis,同步读写改为异步读写,大幅度提升了性能
2.增加了Table/SQL API,增加维表join查询支持
3.增加查询缓存(支持增量与全量)
4.增加支持整行保存功能,用于多字段的维表关联查询
5.增加限流功能,用于Flink SQL在线调试功能
6.增加支持Flink高版本(包括1.12,1.13,1.14+)
7.统一过期策略等
8.支持flink cdc删除及其它RowKind.DELETE
因bahir使用的flink接口版本较老,所以改动较大,开发过程中参考了腾讯云与阿里云两家产商的流计算产品,取两家之长,并增加了更丰富的功能。
使用注意:redis不支持两段提交,故无法实现刚好一次。
支持功能对应redis的操作命令有:
插入/CDC插入与更新 | 维表查询 |
---|---|
set | get |
hset | hget |
rpush lpush | |
incrBy incrByFloat decrBy hincrBy hincryByFloat zincrby | |
sadd zadd pfadd(hyperloglog) | |
publish | |
zrem srem | |
del hdel |
CDC时支持类型
CDC插入及更新 | CDC删除时响应操作 |
---|---|
set | del |
hset | hdel |
rpush lpush | 不响应 |
incrBy incrByFloat decrBy hincrBy hincryByFloat zincrby | 写入相对值,如:incrby 2 -> incryby -2 |
sadd zadd | srem zrem |
pfadd(hyperloglog) | 不响应 |
publish | 不响应 |
zrem srem | 不响应 |
del hdel | 不响应 |
注:cdc更新操作与插入效果相同 |
使用方法:
1.打包命令: mvn package -DskipTests
2.将生成的包放入flink lib中即可,无需其它设置。
项目依赖Lettuce(6.2.1)及netty-transport-native-epoll(4.1.82.Final),如flink环境有这两个包,则使用flink-connector-redis-1.3.2.jar, 否则使用flink-connector-redis-1.3.2-jar-with-dependencies.jar。
开发环境工程直接引用:
<dependency>
<groupId>io.github.jeff-zou</groupId>
<artifactId>flink-connector-redis</artifactId>
<!-- 没有单独引入项目依赖Lettuce netty-transport-native-epoll依赖时 -->
<!-- <classifier>jar-with-dependencies</classifier>-->
<version>1.3.2</version>
</dependency>
使用说明:
value.data.structure = column(默认)
无需通过primary key来映射redis中的Key,直接由ddl中的字段顺序来决定Key,如:
create table sink_redis(username VARCHAR, passport VARCHAR) with ('command'='set')
其中username为key, passport为value.
create table sink_redis(name VARCHAR, subject VARCHAR, score VARCHAR) with ('command'='hset')
其中name为map结构的key, subject为field, score为value.
value.data.structure = row
整行内容保存至value并以’\01’分割
create table sink_redis(username VARCHAR, passport VARCHAR) with ('command'='set')
其中username为key, username\01passport为value.
create table