我对Flink来说是全新的。愿这个问题重复,但只找到一个链接,这对我来说是不可理解的。
https://stackoverflow.com/a/44294980/6904987
我在Redis中以Key Value格式存储数据示例Key是UserId,UserInfo是value。写在下面的代码。
class RedisExampleMapper extends RedisMapper[(String, String)] {
override def getCommandDescription: RedisCommandDescription = {
new RedisCommandDescription(RedisCommand.HSET, "HASH_NAME")
}
override def getKeyFromData(data: (String, String)): String = data._1
override def getValueFromData(data: (String, String)): String = data._2
}
val env = StreamExecutionEnvironment.getExecutionEnvironment
val conf = new FlinkJedisPoolConfig.Builder().setHost("IP").build()
val streamSink = env.readTextFile("/path/useInformation.txt").map(x => {
val userInformation = x.split(",")
val UserId = userInformation(0)
val UserInfo = userInformation(1)
(UserId , UserInfo)
})
val redisSink = new RedisSink[(String, String)](conf, new RedisExampleMapper)
streamSink.addSink(redisSink)
示例数据:
12“UserInfo12”
13“UserInfo13”
14“UserInfo14”
15“UserInfo15”
我想使用基于密钥的Flink来从redis中提供数据。示例14应返回“UserInfo14”。输出应该在Flink日志文件或终端中打印,无论它是什么。
提前致谢。
答案 0 :(得分:0)
扩展https://stackoverflow.com/a/44294980/6904987中的答案。
使用env.addSource(new RedisSource(data structure name))
添加来源。
您必须自己实现连接到Redis数据库的RedisSource,从Redis数据结构中读取记录。
实施取决于。您可以通过轮询从Redis中消费,也可以订阅Redis,只要从Redis获取事件,就会从源中发出事件。
您可以查看此处提供的常规SourceFunction示例和文档:https://ci.apache.org/projects/flink/flink-docs-release-1.5/api/java/org/apache/flink/streaming/api/functions/source/SourceFunction.html
答案 1 :(得分:0)
如果要查询Redis的键值搜索,可以在转换中使用Redis客户端。例如,如果您使用带有Flink的Java,则Jedis可用于查询Redis。