Flink实时数据写入Redis实战

这段代码展示了如何使用 Flink 将数据流写入 Redis,核心是通过 RedisSinkRedisMapper 实现数据的映射和存储。通过这种方式,可以方便地将实时处理的结果存储到 Redis 中,供后续查询或分析使用。

这段代码的主要功能是将用户点击事件流写入 Redis 的哈希表中,方便后续查询和分析。

  • 适用场景 :
    • 实时记录用户点击行为。
    • 将 Flink 处理后的结果存储到 Redis 中,供其他系统使用。

代码结构

  • 包名 : package sink
    表示这个类属于 sink 包。
  • 导入的依赖 :
    • org.apache.flink.streaming.api.scala._: Flink 的 Scala API。
    • org.apache.flink.streaming.connectors.redis.RedisSink: Flink 提供的 Redis Sink 连接器。
    • org.apache.flink.streaming.connectors.redis.common.config.FlinkJedisPoolConfig: Redis 连接池的配置类。
    • org.apache.flink.streaming.connectors.redis.common.mapper.{RedisCommand, RedisCommandDescription, RedisMapper}: Redis 映射相关的类。
    • source.ClickSource: 自定义的数据源,用于生成模拟的点击事件流。
Scala 复制代码
package sink

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}
import source.ClickSource

/**
 *
 * @PROJECT_NAME: flink1.13
 * @PACKAGE_NAME: sink
 * @author: 赵嘉盟-HONOR
 * @data: 2023-11-20 14:53
 * @DESCRIPTION
 *
 */
object sinkToRedis {
  def main(args: Array[String]): Unit = {
    val env=StreamExecutionEnvironment.getExecutionEnvironment
    val data = env.addSource(new ClickSource)

    val conf=new FlinkJedisPoolConfig.Builder().setHost("").build()
    data.addSink(new RedisSink[source.Event](conf,new RedisMapper[source.Event] {
      override def getCommandDescription: RedisCommandDescription = new RedisCommandDescription(RedisCommand.HSET,"click")
      override def getKeyFromData(t: source.Event): String = t.user
      override def getValueFromData(t: source.Event): String = t.url
    }))
    env.execute("sinkRedis")
  }
}
代码解释:
Scala 复制代码
val env = StreamExecutionEnvironment.getExecutionEnvironment
  • 获取 Flink 的流处理执行环境。
(2) 添加数据源
Scala 复制代码
val data = env.addSource(new ClickSource)
  • 使用自定义的 ClickSource 作为数据源,生成一个数据流 data
    ClickSource 可能是一个模拟用户点击事件的数据源,生成 Event 类型的数据。
(3) 配置 Redis 连接池
Scala 复制代码
val conf = new FlinkJedisPoolConfig.Builder().setHost("").build()
  • 创建一个 Redis 连接池配置 FlinkJedisPoolConfig
    这里 setHost("") 需要填写 Redis 服务器的主机地址(例如 "localhost""127.0.0.1")。
(4) 添加 Redis Sink
Scala 复制代码
data.addSink(new RedisSink[source.Event](conf, new RedisMapper[source.Event] {
  override def getCommandDescription: RedisCommandDescription = new RedisCommandDescription(RedisCommand.HSET, "click")
  override def getKeyFromData(t: source.Event): String = t.user
  override def getValueFromData(t: source.Event): String = t.url
}))
  • 将数据流 data 写入 Redis。
  • RedisSink :
    • 第一个参数是 Redis 连接池配置 conf
    • 第二个参数是一个 RedisMapper 的实现,用于定义如何将数据映射到 Redis。
  • RedisMapper :
    • getCommandDescription: 定义 Redis 命令和键名。
      这里使用 HSET 命令,将数据写入 Redis 的哈希表 "click"
    • getKeyFromData: 定义哈希表中的字段(field),这里使用 Eventuser 字段。
    • getValueFromData: 定义哈希表中的值(value),这里使用 Eventurl 字段。
Scala 复制代码
env.execute("sinkRedis")
  • 启动 Flink 任务,任务名称为 "sinkRedis"

基于scala使用flink将读取到的数据写入到Redis

getCommandDescription第一个参数为写入方式,第二个参数为Hset的键

相关推荐
金融小师妹3 小时前
基于多模态宏观建模与历史序列对齐:原油能源供给冲击的“类1970年代”演化路径与全球应对机制再评估
大数据·人工智能·能源
播播资源3 小时前
OpenAI2026 年 3 月 18 日最新 gpt-5.4-nano模型:AI 智能体的“神经末梢”,以极低成本驱动高频任务
大数据·人工智能·gpt
GJGCY4 小时前
中小企业财务AI工具技术评测:四大类别架构差异与选型维度
大数据·人工智能·ai·架构·财务·智能体
九河云5 小时前
云上安全运营中心(SOC)建设:从被动防御到主动狩猎
大数据·人工智能·安全·架构·数字化转型
武子康5 小时前
大数据-252 离线数仓 - Airflow + Crontab 入门实战:定时调度、DAG 编排与常见报错排查
大数据·后端·apache hive
jinanwuhuaguo5 小时前
OpenClaw、飞书、Claude Code、Codex:四维AI生态体系的深度解构与颗粒化对比分析
大数据·人工智能·学习·飞书·openclaw
Rubin智造社5 小时前
# OpenClaude命令实战|核心控制三剑客/reasoning+/verbose+/status 实操指南
大数据·人工智能
华奥系科技6 小时前
智慧经济新格局:解码社区、园区与城市一体化建设逻辑
大数据·人工智能·科技·物联网·安全
TDengine (老段)7 小时前
TDengine IDMP 组态面板 —— 画布
大数据·数据库·物联网·时序数据库·tdengine·涛思数据