使用Flink从Redis读取数据

时间:2018-04-13 08:12:43

标签: scala apache-flink flink-streaming flink-sql

我对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日志文件或终端中打印,无论它是什么。

提前致谢。

2 个答案:

答案 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。