Flink 输出至 Redis

【1】引入第三方Bahir提供的Flink-redis相关依赖包

xml 复制代码
<!-- https://mvnrepository.com/artifact/org.apache.bahir/flink-connector-redis -->
<dependency>
    <groupId>org.apache.bahir</groupId>
    <artifactId>flink-connector-redis_2.11</artifactId>
    <version>1.0</version>
</dependency>

【2】Flink连接Redis并输出Sink处理结果

java 复制代码
package com.zzx.flink

import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.redis.RedisSink
import org.apache.flink.streaming.connectors.redis.common.config.FlinkJedisPoolConfig
import org.apache.flink.streaming.connectors.redis.common.mapper.{RedisCommand, RedisCommandDescription, RedisMapper}

object RedisSinkTest {
  def main(args: Array[String]): Unit = {
    // 创建一个流处理执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //从文件中读取数据并转换为 类
    val inputStreamFromFile: DataStream[String] = env.readTextFile("E:\\Project\\flink\\src\\main\\resources\\wordcount.txt")
    //转换  SensorReading为用户自定义的类,是从文件转换而来的
    val dataStream: DataStream[SensorReading] = inputStreamFromFile
      .map( data => {
        var dataArray = data.split(",")
        SensorReading(dataArray(0),dataArray(1).toLong,dataArray(2).toDouble)
      })
    //定义一个 redis 的配置类 继承了FlinkJedisConfigBase 正是 SensorReading需要传入的参数,底层将有些数据保存成了状态数据。
    val conf = new FlinkJedisPoolConfig.Builder().setHost("192.168.52.131").setPort(6379).setPassword("zzx").build()
    //定义 RedisMapper 数据保存的类型
    val myMapper = new RedisMapper[SensorReading] {
      //定义保存数据到 redis的命令,hset table key value
      override def getCommandDescription: RedisCommandDescription = {
        // hset tablesname
        new RedisCommandDescription(RedisCommand.HSET , "sensor_temp")
      }
      //设置key
      override def getKeyFromData(data: SensorReading): String = data.id
      //设置value
      override def getValueFromData(data: SensorReading): String = data.temperature.toString
    }
    dataStream.addSink(new RedisSink[SensorReading](conf,myMapper))

    env.execute("Redis Sink test")
  }
}

查看源码可知RedisSink是继承自RichSinkFunction<IN>

java 复制代码
public class RedisSink<IN> extends RichSinkFunction<IN> {

【3】查看Redis输出信息

相关推荐
xiao--xin11 分钟前
Java定时任务实现方案(一)——Timer
java·面试题·八股·定时任务·timer
DevOpsDojo12 分钟前
HTML语言的数据结构
开发语言·后端·golang
MrZhangBaby24 分钟前
SQL-leetcode—1158. 市场分析 I
java·sql·leetcode
东软吴彦祖31 分钟前
包安装利用 LNMP 实现 phpMyAdmin 的负载均衡并利用Redis实现会话保持nginx
linux·redis·mysql·nginx·缓存·负载均衡
我的棉裤丢了32 分钟前
windows安装ES
大数据·elasticsearch·搜索引擎
想做富婆33 分钟前
大数据,Hadoop,HDFS的简单介绍
大数据·hadoop·分布式
一只淡水鱼6638 分钟前
【spring原理】Bean的作用域与生命周期
java·spring boot·spring原理
五味香44 分钟前
Java学习,查找List最大最小值
android·java·开发语言·python·学习·golang·kotlin
时韵瑶1 小时前
Scala语言的云计算
开发语言·后端·golang
金融OG1 小时前
99.8 金融难点通俗解释:净资产收益率(ROE)
大数据·python·线性代数·机器学习·数学建模·金融·矩阵