flink 批量压缩redis集群 sink

idea maven依赖

<dependency>

<groupId>org.apache.bahir</groupId>

<artifactId>flink-connector-redis_2.11</artifactId>

<version>1.0</version>

</dependency>

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>3.8.0</version>

</dependency>

复制代码
import org.apache.flink.configuration.Configuration
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction
import org.apache.flink.streaming.api.functions.sink.SinkFunction
import redis.clients.jedis.*
import java.io.ByteArrayOutputStream
import java.util.zip.GZIPOutputStream


class RedisSink : RichSinkFunction<Data>() {
    private lateinit var jedisCluster: JedisCluster

    override fun open(parameters: Configuration) {
        super.open(parameters)
        val jedisPoolConf = JedisPoolConfig()
        jedisPoolConf.maxTotal = 128// 最大连接数
        jedisPoolConf.maxIdle = 50// 最大空闲连接数
        jedisPoolConf.testOnBorrow = true // 当调用 borrow Object方法时,是否进行有效性检查

        // 集群模式
        val nodes = HashSet<HostAndPort>()

        val hostAndPort1 = HostAndPort("h1", port)
        val hostAndPort2 = HostAndPort("h2", port)
        val hostAndPort3 = HostAndPort("h3", port)
        nodes.add(hostAndPort1)
        nodes.add(hostAndPort2)
        nodes.add(hostAndPort3)

        jedisCluster = JedisCluster(nodes, 100000, 100000, 2, "password", jedisPoolConf)
    }

    override fun invoke(value: Data, context: SinkFunction.Context<*>?) {
        val key = "data" + value.x+ value.y

 

            val outputBts = ByteArrayOutputStream()
            val gzip = GZIPOutputStream(outputBts)
            gzip.write(value.toByteArray())
            gzip.flush()
            gzip.finish()

            jedisCluster.set(key.toByteArray(), outputBts.toByteArray())
            jedisCluster.expire(key.toByteArray(),15552000)
        
    }

    override fun close() {
        super.close()
        jedisCluster.close()
    }

}
相关推荐
Light607 小时前
点燃变革:领码SPARK融合平台如何重塑OA,开启企业智慧协同新纪元?
大数据·分布式·spark
Guheyunyi7 小时前
智慧消防管理系统如何重塑安全未来
大数据·运维·服务器·人工智能·安全
写代码的【黑咖啡】8 小时前
如何在大数据数仓中搭建数据集市
大数据·分布式·spark
忍冬行者8 小时前
清理三主三从redis集群的过期key和键值超过10M的key
数据库·redis·缓存
TimberWill8 小时前
使用Redis队列优化内存队列
数据库·redis·缓存
华清远见成都中心8 小时前
成都理工大学&华清远见成都中心实训,助力电商人才培养
大数据·人工智能·嵌入式
梦里不知身是客119 小时前
flume防止数据丢失的方法
大数据·flume
Jackeyzhe9 小时前
Flink学习笔记:反压
flink
川石课堂软件测试10 小时前
Mysql中触发器使用详详详详详解~
数据库·redis·功能测试·mysql·oracle·单元测试·自动化
鹏说大数据11 小时前
数据治理项目实战系列6-数据治理架构设计实战,流程 + 工具双架构拆解
大数据·数据库·架构