这里模拟生成 登录数据和付费数据
效果:
代码
LoginBean
import scala.beans.BeanProperty
case class LoginBean() extends Serializable {
// BeanProperty 自动加载 get set 方法
@BeanProperty var event_name : String = _ //事件名
@BeanProperty var event_time : String = _ //事件时间
@BeanProperty var uid : Int = _
@BeanProperty var city : String = _ //城市
}
PayBean
import scala.beans.BeanProperty
case class PayBean() extends Serializable {
// BeanProperty 自动加载 get set 方法
@BeanProperty var event_name : String = _ //事件名
@BeanProperty var event_time : String = _ //事件时间
@BeanProperty var uid : Int = _
@BeanProperty var city : String = _ //城市
@BeanProperty var state : String = _ //是否付费成功
@BeanProperty var money : Double = _ //金额
}
主函数
package com.sm.job
import java.util.Properties
import com.alibaba.fastjson.{JSON, JSONArray, JSONObject}
import com.sm.conf.LocalConfig
import com.sm.entity.{EventBean, LoginBean, PayBean}
import org.apache.kafka.clients.producer.{KafkaProducer, ProducerConfig, ProducerRecord}
import scala.util.Random
object MockCollector {
private val rand = new Random()
val prop = new Properties()
//添加配置
prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, LocalConfig.KAFKA_BOOTSTRAP_SERVERS)
prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer")
val producer = new KafkaProducer[String, String](prop)
def main(args: Array[String]): Unit = {
// 参数一:控制生成每条数据的延迟,默认0
val delay = if (args.length > 0) args(0).toLong else 0L
// 参数二:循环遍历次数
val loop_len = if (args.length > 1) args(1).toInt else 40
// 生成数据
generateLog(delay, loop_len)
}
def generateLog(delay: Long, loop_len: Int): Unit = {
for (i <- 0 to loop_len) {
print(i + "======>")
val flag = rand.nextInt(2)
flag match {
case 0 =>
val record = new ProducerRecord[String, String]("login", loginData.toString())
producer.send(record)
println("打印数据" + loginData)
case 1 =>
val record = new ProducerRecord[String, String]("pay", payData.toString())
println("打印数据" + payData)
producer.send(record)
}
}
}
/** *
* 登录数据生成
*/
def loginData: JSONObject = {
val loginData = LoginBean()
loginData.event_name = "login"
loginData.event_time = System.currentTimeMillis - rand.nextInt(99999999) + ""
loginData.uid = rand.nextInt(100000)
loginData.city = getCity
val loginJson = JSON.toJSON(loginData).asInstanceOf[JSONObject]
loginJson
}
/** *
* 付费数据生成
*/
def payData: JSONObject = {
val payData = PayBean()
payData.event_name = "pay"
payData.event_time = System.currentTimeMillis - rand.nextInt(99999999) + ""
payData.uid = rand.nextInt(100000)
payData.city = getCity
payData.money = rand.nextInt(100000)
val payJson = JSON.toJSON(payData).asInstanceOf[JSONObject]
payJson
}
/** *
* 生成城市模拟数据
*/
def getCity: String = {
var city: String = ""
val array = Array("北京", "上海", "深圳", "华北", "华东", "华南")
city = array(rand.nextInt(6))
city
}
}