day3:【flink消费kafka从文件中读取的数据输入的数据】

一、创建kafka_producer文件,生成一个kafka的生产者,用于将读到的数据投放到生产中供flink消费。

步骤:
1、引入环境
2、读取文件
3、生成一个kafka生产者
4、把数据放进生产者
5、先运行消费者,再运行生产者

import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.api.scala._
import org.apache.flink.connector.kafka.sink.{KafkaRecordSerializationSchema, KafkaSink}
import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}

//【生成一个kafka的生产者,用于将读到的数据投放到生产中。】
object kafka_producer {
  def main(args: Array[String]): Unit = {

    //1-> 引入环境
    val env = StreamExecutionEnvironment
      .getExecutionEnvironment

    //2-> 读取文件
        //写出文件地址(相对地址)
    val value: DataStream[String] = env.readTextFile("data/data.csv")

    //3-> 【生成一个kafka的生产者,用于将读到的数据投放到生产中。】
        // 定义了一个名为kafka_producer的"KafkaSink"对象,
        // KafkaSink[String]表示这个生产者将处理String类型的数据。
    val kafka_producer: KafkaSink[String] = KafkaSink.builder[String]()
        //设置kafka的集群地址
          //这些地址是Kafka broker的地址和端口,用于生产者建立连接并发送数据。
      .setBootstrapServers("192.168.126.51:9092,192.168.126.52:9092,192.168.126.53:9092")
        //设置序列化
      .setRecordSerializer(
          //指定要序列化的数据类型为String。
        KafkaRecordSerializationSchema.builder[String]()
          //对string类型的value值进行序列化
          .setValueSerializationSchema(new SimpleStringSchema())
          //设置主题
          .setTopic("flink")
          .build()
      )
      .build()

    //4-> 把数据放进生产者
    value
      //设置放入数据的速度
      .map(x=>{
        Thread.sleep(100)
        x
      })
      //sinkTo()方法:用于将数据流的最终结果输出到外部目标,比如文件、数据库或消息队列等。
        //使用.sinkTo()将处理后的数据发送到之前定义的 kafka_producer。
        //这意味着数据流中的每个元素都将被 序列化 为 Kafka 记录,并发送到之前指定的 Kafka 主题中。
      .sinkTo(kafka_producer)
    //    value.print()

    env.execute()    //启动流式环境代码!别忘了写!
  }
}

 二、创建read_kafka文件,消费kafka从文件中读取的数据


import org.apache.flink.api.common.eventtime.WatermarkStrategy
import org.apache.flink.api.scala._
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.connector.kafka.source.KafkaSource
import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
 
object read_kafka {
  def main(args: Array[String]): Unit = {
//【读 kafka 数据】
//    1-> 引入流式环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
//    2-> 读kafka数据
    //生成一个kafka的消费者
    val kafkaConsumer = KafkaSource.builder[String]()
      //设置kafka的地址
      .setBootstrapServers("192.168.126.51:9092,192.168.126.52:9092,192.168.126.53:9092")
      //设置组别,用来区分不同的人消费同一个主题的数据
      .setGroupId("paipai")
      //设置消费的主题
      .setTopics("flink")
      //设置是从头消费还是从最新位置开始消费
      .setStartingOffsets(OffsetsInitializer.earliest())
      //对value进行反序列化
      .setValueOnlyDeserializer(new SimpleStringSchema())
      //这个不能丢
      .build()
 
    //3-> 开始读数据
     val value = env
      .fromSource(kafkaConsumer, WatermarkStrategy.noWatermarks(), "kafka")
     value.print()
    //1-> 启动流式环境代码
    env.execute()
  }
}

  • 17
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值