Flink-Connector-Redis 使用指南

Flink-Connector-Redis 使用指南

【免费下载链接】flink-connector-redis Asynchronous connector based on the Lettuce, supporting sql join and sink, query caching and debugging. 【免费下载链接】flink-connector-redis 项目地址: https://gitcode.com/gh_mirrors/fl/flink-connector-redis

项目简介

Flink-Connector-Redis 是一个基于 Lettuce 的异步 Flink 连接器,支持 SQL Join、Sink 查询缓存以及调试等功能。该项目基于 bahir-flink 二次开发,主要改进包括:

  1. 使用 Lettuce 替换 Jedis,同步读写改为异步读写,大幅提升性能
  2. 增加 Table/SQL API,支持 select/维表 join 查询
  3. 增加关联查询缓存(支持增量与全量)
  4. 增加支持整行保存功能,用于多字段的维表关联查询
  5. 增加限流功能,用于 Flink SQL 在线调试
  6. 支持 Flink 高版本(1.12、1.13、1.14+)
  7. 统一过期策略等
  8. 支持 Flink CDC 删除及其他 RowKind.DELETE
  9. 支持 select 查询

项目结构

flink-connector-redis
├── src/main/java          # 核心业务逻辑代码
│   ├── command           # Redis 命令相关类
│   ├── config            # 配置处理类
│   ├── container         # Redis 容器管理
│   ├── converter         # 数据转换器
│   ├── hanlder           # 处理器服务
│   ├── mapper            # 映射器
│   └── table             # 表相关功能
├── src/test/java         # 测试代码
├── pom.xml              # Maven 构建配置
├── README.md            # 中文文档
├── README-en.md         # 英文文档
└── img.png             # 项目图片

快速开始

安装依赖

项目依赖 Lettuce(6.2.1) 及 netty-transport-native-epoll(4.1.82.Final),根据环境选择对应的 jar 包:

<dependency>
    <groupId>io.github.jeff-zou</groupId>
    <artifactId>flink-connector-redis</artifactId>
    <version>1.4.3</version>
    <!-- 没有单独引入依赖时使用 -->
    <!-- <classifier>jar-with-dependencies</classifier> -->
</dependency>

自行打包

执行打包命令:

mvn package

将生成的包放入 Flink lib 目录即可使用。

配置参数详解

主要连接参数

参数默认值类型说明
connector(none)String必须设置为 'redis'
host(none)StringRedis 服务器地址
port6379IntegerRedis 端口
passwordnullStringRedis 密码
database0Integer数据库编号
timeout2000Integer连接超时时间(ms)
cluster-nodes(none)String集群节点地址(集群模式)
command(none)StringRedis 操作命令
redis-mode(none)StringRedis 模式: single/cluster/sentinel
lookup.cache.max-rows-1Integer查询缓存大小
lookup.cache.ttl-1Integer查询缓存过期时间(秒)
lookup.cache.load-allfalseBoolean是否开启全量缓存

数据存储结构

支持两种数据存储方式:

column 模式(默认)

create table sink_redis(username VARCHAR, passport VARCHAR) with ('command'='set')
-- username 为 key, passport 为 value

row 模式

create table sink_redis(username VARCHAR, passport VARCHAR) with ('command'='set', 'value.data.structure'='row')
-- username 为 key, username\01passport 为 value

命令支持情况

命令写入查询维表关联删除
setsetgetgetdel
hsethsethgethgethdel
rpush/lpushrpush/lpushlrange--
incrByincrBygetget反向操作
saddsaddsrandmember-srem
zaddzaddzscorezscorezrem

Redis 连接器架构图

使用示例

维表查询示例

-- 创建 Redis 表
create table sink_redis(name varchar, level varchar, age varchar) with (
    'connector'='redis', 
    'host'='10.11.80.147',
    'port'='7001', 
    'redis-mode'='single',
    'password'='******',
    'command'='hset'
);

-- 插入测试数据
insert into sink_redis select * from (values ('3', '3', '100'));

-- 创建维表
create table dim_table (name varchar, level varchar, age varchar) with (
    'connector'='redis',
    'host'='10.11.80.147',
    'port'='7001', 
    'redis-mode'='single', 
    'password'='*****',
    'command'='hget', 
    'lookup.cache.max-rows'='10', 
    'lookup.cache.ttl'='10'
);

-- 创建数据源表
create table source_table (username varchar, level varchar, proctime as procTime()) with (
    'connector'='datagen',  
    'rows-per-second'='1',
    'fields.username.kind'='sequence',
    'fields.username.start'='1',
    'fields.username.end'='10',
    'fields.level.kind'='sequence',
    'fields.level.start'='1',
    'fields.level.end'='10'
);

-- 关联查询
insert into result_table
select s.username, s.level, d.age
from source_table s
left join dim_table for system_time as of s.proctime as d 
on d.name = s.username and d.level = s.level;

多字段维表关联

-- 创建表(row 模式)
create table sink_redis(uid VARCHAR, score double, score2 double) with (
    'connector' = 'redis',
    'host' = '10.11.69.176',
    'port' = '6379',
    'redis-mode' = 'single',
    'password' = '****',
    'command' = 'SET',
    'value.data.structure' = 'row'
);

-- 插入数据
insert into sink_redis select * from (values ('1', 10.3, 10.1));

-- 创建关联表
create table join_table with ('command'='get', 'value.data.structure'='row') like sink_redis;

-- 执行关联查询
insert into result_table
select s.uid, s.username, j.score, j.score2
from source_table as s
join join_table for system_time as of s.proc_time as j on j.uid = s.uid;

数据类型转换

Flink 类型Redis 转换
CHAR/VARCHAR/StringString
BOOLEANString.valueOf() / Boolean.valueOf()
BINARY/VARBINARYBase64 编码/解码
DECIMALBigDecimal.toString()
TINYINT/SMALLINT/INTEGER数值转换
DATE/TIME时间格式转换
BIGINT/FLOAT/DOUBLE数值转换
TIMESTAMP时间戳转换

开发环境

  • IDE: IntelliJ IDEA
  • 代码格式: google-java-format + Save Actions
  • Flink 版本: 1.12/1.13/1.14+
  • JDK: 1.8
  • Lettuce: 6.2.1

注意事项

  1. Redis 不支持两段提交,无法实现精确一次语义
  2. 在线调试时可使用限流参数控制资源使用
  3. 集群模式需要配置正确的节点信息
  4. 哨兵模式需要额外配置 master.name 和 sentinels.info

获取帮助

如果在使用过程中遇到问题,可以参考项目中的测试用例或查看详细的使用文档。项目提供了丰富的中英文文档和示例代码,帮助用户快速上手和使用。

【免费下载链接】flink-connector-redis Asynchronous connector based on the Lettuce, supporting sql join and sink, query caching and debugging. 【免费下载链接】flink-connector-redis 项目地址: https://gitcode.com/gh_mirrors/fl/flink-connector-redis

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值