Kafka生产者API

Kafka生产者API,用于将数据发送到 Kafka 集群

代码逻辑:
1. 创建一个KafkaProducer对象
2. 调用KafkaProducer对象的send()方法,将数据发送到Kafka集群
3. 调用KafkaProducer对象的close()方法,关闭KafkaProducer对象

一。从把hdfs文件读取数据
object Test04KafkaProducer {
  def main(args: Array[String]): Unit = {
    val prop = InitKafkaUtil.initPros()
    val producer = new KafkaProducer[Integer, String](prop)
    val path = "hdfs://hacluster/test/ypg/test.txt"
    val fs: FileSystem = HDFSUtil.getHdfs(path)
    val in = fs.open(new Path(path))
    val bufferedReader = new BufferedReader(new InputStreamReader(in))
    var lineTxt: String = bufferedReader.readLine()
    var i = 1
    while (lineTxt != null) {
      println(lineTxt)
      producer.send(new ProducerRecord[Integer, String]("ypg_test", i, lineTxt))
      i += 1
      lineTxt = bufferedReader.readLine()
    }
    bufferedReader.close()
    in.close()
    fs.close()
    producer.close()
  }
}

二.从数据库读取数据
import java.sql.{Connection, DriverManager, ResultSet}

object Test04KafkaProducer {
  def main(args: Array[String]): Unit = {
    val prop = InitKafkaUtil.initPros()
    val producer = new KafkaProducer[Integer, String](prop)

    val url = "jdbc:mysql://localhost:3306/mydb"
    val username = "user"
    val password = "password"
    val connection: Connection = DriverManager.getConnection(url, username, password)
    val statement = connection.createStatement()
    val resultSet: ResultSet = statement.executeQuery("SELECT * FROM mytable")

    var i = 1
    while (resultSet.next()) {
      val data = resultSet.getString("column_name")
      println(data)
      producer.send(new ProducerRecord[Integer, String]("ypg_test", i, data))
      i += 1
    }

    resultSet.close()
    statement.close()
    connection.close()
    producer.close()
  }
}

三。从 API 读取数据
import scala.io.Source
import org.apache.kafka.clients.producer.{KafkaProducer, ProducerRecord}

object Test04KafkaProducer {
  def main(args: Array[String]): Unit = {
    val prop = InitKafkaUtil.initPros()
    val producer = new KafkaProducer[Integer, String](prop)

    val url = "https://api.example.com/data"
    val source = Source.fromURL(url)
    val lines = source.getLines()

    var i = 1
    for (line <- lines) {
      println(line)
      producer.send(new ProducerRecord[Integer, String]("ypg_test", i, line))
      i += 1
    }

    source.close()
    producer.close()
  }
}

四。 自定义数据源
object Test04KafkaProducer {
  def main(args: Array[String]): Unit = {
    val prop = new Properties()
    prop.put("bootstrap.servers", "localhost:9092")
    prop.put("key.serializer", "org.apache.kafka.common.serialization.IntegerSerializer")
    prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")

    val producer = new KafkaProducer[Long, Long](prop)
    val running = true
    val random = new Random()
    var i = 1

    while (running) {
      val randomNum = random.nextInt(100) + 1
      println(randomNum)
      producer.send(new ProducerRecord[Long,Long]("ypg_test", i, randomNum))
      Thread.sleep(1000)
      i += 1
    }

  }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值