一、创建kafka的工具类
import org.apache.kafka.clients.producer.KafkaProducer
import java.util.Properties
/**
* @ Author: mashenmemei
* @ Date: 20:52 2020/6/6
* @ version: v1.0.0
* @ description:
*/
object Properties2Kafka {
def properties2Kafka: KafkaProducer[String, String] = {
val prop = new Properties
//指定请求的Kafka集群列表
prop.put("bootstrap.servers", "192.168.10.102:9092,192.168.10.103:9092,192.168.10.104:9092")
//指定响应方式 all 是 -1
prop.put("acks", "all")
//请求失败重试次数
prop.put("retries", "3")
//对发送消息进行序列化
// 指定key的序列化方式,key是用于存放数据对应offset使用
prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
//指定value的序列化 消息是存储在value中
prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
//创建生产者(需要指定key和value的数据类型,必须和序列化的数据一致)
// 构建参数是 当前配置properties对象
val producer = new KafkaProducer[String, String](prop)
producer
}
}
二、发送遍历文件并向kafka指定topic发送数据
import com.tct.utils.Properties2Kafka
import org.apache.commons.lang3.StringUtils
import org.apache.kafka.clients.producer.ProducerRecord
import java.io._
/**
* @ Author: mashenmemei
* @ Date: 20:52 2020/6/6
* @ version: v1.0.0
* @ description:
*/
object ConstructDataTrain2 {
val topic="ods_log_passenger"
def main(args: Array[String]): Unit = {
var dirPath = new File("D:\\other\\data\\source\\0203")
ergodic(dirPath)
println("结束任务")
}
/**
* 获取目录下的所有文件
* @param file
*/
def ergodic(file: File): Unit = {
val files = file.listFiles
files.foreach(f => {
// println(f.getAbsolutePath)
largeFile(f.getAbsolutePath)
})
}
/**
* 读取单个文件内容并发送
* @param inputFile
*/
def largeFile(inputFile: String): Unit = {
val file: File = new File(inputFile)
var fileName=file.getName
val bis = new BufferedInputStream(new FileInputStream(inputFile))
val in = new BufferedReader(new InputStreamReader(bis, "gb2312"), 10 * 1024 * 1024) // 10M缓存
var line: String = null;
val pro = Properties2Kafka.properties2Kafka
while ((line = in.readLine()) != null && StringUtils.isNotEmpty(line)) {
val fieldArr: Array[String] = line.split(",")
println(line)
if(fieldArr.length==9){
//对每行数据进行截取
line=line.substring(0,line.lastIndexOf(",")+1)
pro.send(new ProducerRecord[String, String](topic, line))
}
}
pro.close()
}
}
有收获?希望烙铁们来个三连击,让更多的同学看到这篇文章
1、烙铁们,关注我看完保证有所收获,不信你打我。
2、点个赞呗,可以让更多的人看到这篇文章,后续还会有很哇塞的产出。
本文章仅供学习及个人复习使用,如需转载请标明转载出处,如有错漏欢迎指出
务必注明来源(注明: 来源:csdn , 作者:-马什么梅-)