案例准备:
1、启动Redis
2、启动zookeeper
3、启动Kafka
4、打开IDEA
代码实现:
def main(args: Array[String]): Unit = {
val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
val properties = new Properties()
properties.setProperty("bootstrap.servers","192.168.91.180:9092")
properties.setProperty("group.id","sensor_group")
val stream: DataStream[String] =
env.addSource(new FlinkKafkaConsumer011[String]("sensor",
new SimpleStringSchema(), properties))
val dataStream: DataStream[SensorReading] = stream
.map(value => {
val arr: Array[String] = value.split(",")
SensorReading(arr(0), arr(1).toLong, arr(2).toDouble)
})
val config: FlinkJedisPoolConfig = new FlinkJedisPoolConfig.Builder()
.setHost("192.168.91.180")
.setPort(6379)
.setMaxIdle(10)
.setMaxTotal(30).build()
dataStream.addSink(new RedisSink[SensorReading](config,new MyRedisMapper))
env.execute()
}
class MyRedisMapper extends RedisMapper[SensorReading]{
override def getCommandDescription: RedisCommandDescription = {
new RedisCommandDescription(RedisCommand.HSET,"sensor_temp")
}
override def getKeyFromData(t: SensorReading): String = t.id
override def getValueFromData(t: SensorReading): String = t.temperature.toString
}
生产者发送信息:
kafka-console-producer.sh --topic sensor–broker-list 192.168.91.180:9092
运行结果: