自定义RedisSource连接管理数据拉取数据转换错误处理 为了使代码更加模块化,以下是我所扩展的代码片段(Java)展示了如何实现连接管理模块: publicclassRedisConnectionManager{privateRedisClientclient;publicRedisConnectionManager(Stringhost,intport){client=Redi
既然数据最终都要落到Redis,那么我们完全没必要在Flink端做Top N的统计,直接利用Redis的有序集合(zset)就行了,商品ID作为field,销量作为分数值,简单方便。不过flink-redis-connector项目中默认没有提供ZINCRBY命令的实现(必须再吐槽一次),我们可以自己加,步骤参照之前写过的那篇加SETEX的命令的文章,不再赘述。RedisMap...
自定义 Source 需要继承 org.apache.flink.streaming.api.functions.source.RichSourceFunction 实现 run 方法和 cancel 方法即可,主要逻辑在 run 方法中,run 方法负责从队列中不断获取数据并 collect 到下游,除此之外,由于需要读取 redis client,所以还需要新增 open 方法进行 client 的初始化。 class JedisPoolSource...
redis lookup source 实现已经有一段时间了,之前实现的只能查询 string/hash 两种类型的数据,查询方式和返回结果都比较死板(hash 只能查某个key/feild 的值),对应其他类型没有好的思路来兼容 今天在review 的时候,有了新的灵感,想到了可以兼容所有类型数据的方式,如下: 首先设计通用的 redis 临时表结构: key/filed...
需要实现SourceFunction接口,指定泛型<>,也就是获取redis里的数据,处理完后的数据输入的数据类型 这里我们需要的是 (我们需要返回kv对的,就要考虑HashMap) pom.xml <!--https://mvnrepository.com/artifact/redis.clients/jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><ver...
/** * 从指定的socket读取数据,对单词进行计算,将结果写入到Redis中 */ public class RedisSinkDemo { public static void main(String[] args) throws Exception { //创建Flink流计算执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //创建DataStream //Source DataSt...
接到的需求如下: 1.数据源:从 kafka 接入实时数据。 2.解析json,取到所需要的字段数据,其中有一个userName的字段,截取前七位,作为redis的key。 3.通过key去redis查询该条数据对应的省份和城市。 4.每五分钟…
执行源码包中的flink.examples.sql._03.source_sink.RedisSinkTest测试类,然后使用 redis-cli 执行get a就可以看到结果了(目前只支持 kv,即 redisset key value)。 如果想直接在集群环境使用: 命令行执行mvn package -DskipTests=true打包 将生成的包flink-examples-0.0.1-SNAPSHOT.jar引入 flink lib 中即可,无...
(1)先操作(删除)Redis,再操作数据库 并发下可能产生数据一致性问题 上面的图表示,Thread-1 是个更新流程,Thread-2 是个查询流程,CPU 执行顺序是:Thread-1 删除缓存成功,此时 Thread-2 获取到 CPU 执行查询缓存没有数据,然后查询数据库把数据库的值写入缓存,因为此时 Thread-1 更新数据库还没有执行,所以缓存里...
DataStream<String> dataStream = env.addSource(new RedisSource<>(jedisConfig, new MyRedisMapper())); 复制代码 其中,MyRedisMapper是实现了RedisMapper接口的自定义类,用于指定Redis中的数据格式和将数据映射到Flink数据流的方式。 定义自定义的RedisMapper类,实现以下方法: public class MyRedisMapper implements...