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输出信息

相关推荐
CoderYanger2 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
C++业余爱好者2 小时前
Java 提供了8种基本数据类型及封装类型介绍
java·开发语言·python
想用offer打牌3 小时前
RocketMQ如何防止消息丢失?
java·后端·架构·开源·rocketmq
老蒋新思维3 小时前
创客匠人峰会深度解析:知识变现的 “信任 - 效率” 双闭环 —— 从 “单次交易” 到 “终身复购” 的增长密码
大数据·网络·人工智能·tcp/ip·重构·数据挖掘·创客匠人
皮卡龙3 小时前
Java常用的JSON
java·开发语言·spring boot·json
初辰ge3 小时前
2025年12月高质量简历模板平台深度解析
面试
PineappleCoder3 小时前
还在重复下载资源?HTTP 缓存让二次访问 “零请求”,用户体验翻倍
前端·性能优化
利刃大大3 小时前
【JavaSE】十三、枚举类Enum && Lambda表达式 && 列表排序常见写法
java·开发语言·枚举·lambda·排序
float_六七3 小时前
Java反射:万能遥控器拆解编程
java·开发语言
han_hanker4 小时前
java 异常类——详解
java·开发语言