sparkStream中作为kafka的生产者

大家好:

  sparkStream中作为kafka的生产者,将某个文件中的数据打到kafka中。

package Traffic

import java.util.Properties
import kafka.producer.{KeyedMessage, Producer, ProducerConfig}
import org.apache.spark.{SparkConf, SparkContext}
import org.codehaus.jettison.json.JSONObject


/**
  * Created by Administrator on 2017/10/14.
  * 功能:SparkStream作为kafka的生产者,将制定文件数据打到kafka中
  *
  */
object KafkaEventProducer {
  def main(args: Array[String]): Unit = {


    //创建topic
    val topic="car_event"
    val brokers="192.168.17.108:9092"
    val props=new Properties()
    //把broker put进去
    props.put("metadata.broker.list",brokers)
    //把kafka编译器放进去
    props.put("serializer.class","kafka.serializer.StringEncoder")
   //配置kafka的config(配置)
    val kafkaconfig=new ProducerConfig(props)
    val producer=new Producer[String,String](kafkaconfig)
   //配置spark的config
    val conf=new SparkConf().setAppName("KafkaEventProducer").setMaster("local[2]")
    val sc=new SparkContext(conf)
    //从path中加载数据
//    val filePath="data/shuju.txt"
    val filePath="c://test//shuju.txt"
    //加载数据并进行切分
    val records=sc.textFile(filePath)
       .filter(!_.startsWith(";"))
          .map(_.split(",")).collect()
    //对数据进行预处理形成Json形式
    for(temp <-records)
      {
        val event=new JSONObject()
        //因为要put很多数据,这样看起来很规范
        event
          .put("camer_id",temp(0))    //相机编号
          .put("car_id",temp(2))      //车牌号
          .put("event_time",temp(4))  //时间
          .put("car_speed",temp(6))   //速度
          .put("car_speed",temp(13))  //车道编号
        //生产event信息 topic 是往哪个topic中生产数据 event.toString是生产的真正的内容
        producer.send(new KeyedMessage[String,String](topic,event.toString))
        println("Message Sent:  "+event)
        Thread.sleep(200) //休息200微秒
      }


  sc.stop()
  }
}

说明: 需要三个jar  commons-pool2-2.2.jar,jedis-2.6.1.jar和json-lib-2.3-jdk15.jar

----样例数据以下所示: 仅仅5行数据

'310999003001', '3109990030010220140820141230292','00000000','','2017-08-20 14:09:35','0',255,'SN',  0.00,'4','','310999','310999003001','02','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999003102', '3109990031020220140820141230266','粤BT96V3','','2017-08-20 14:09:35','0',21,'NS',  0.00,'2','','310999','310999003102','02','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999000106', '3109990001060120140820141230316','沪F35253','','2017-08-20 14:09:35','0',57,'OR',  0.00,'2','','310999','310999000106','01','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999000205', '3109990002050220140820141230954','沪FN0708','','2017-08-20 14:09:35','0',33,'IR',  0.00,'2','','310999','310999000205','02','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '
'310999000205', '3109990002050120140820141230975','皖N94028','','2017-08-20 14:09:35','0',40,'IR',  0.00,'2','','310999','310999000205','01','','','2','','','2017-08-20 14:12:30','2017-08-20 14:16:13',0,0,'2017-08-21 18:50:05','','',' '

样例数据中的各个字段释义以下所示:

sjkk_gcjl 所有字段名称解释:
    
    kkbh   卡口编号                     
    jlbh   记录编号                     
    hphm   号牌号码                     
    hpzl   号牌种类                     
    jgsj   经过时间                     
    xszt   行驶状态                     
    clsd   车辆速度                     
    cdfx   车道方向                     
    cwkc   车身长度                     
    hpys   号牌颜色                     
    cllx   车辆类型                     
    xzqh   行政区号                     
    sbbh   设备编号                     
    cdbh   车道编号                     
    csys   车身颜色                     
    clpp   车辆品牌                     
    tplx   图片类型                     
    tztp   特征图片                     
    qjtp   全景图片                     
    rksj   入库时间                     
    yzsj   //这个字段暂时没用           
    sjcz   时间差值                     
    ylzd1  预留字段1                    
    ylzd2  预留字段2                    
    ylzd3  预留字段3                    
    ylzd4  预留字段4                    
    ylzd5  预留字段5                    

启动kafka,以及创建car_event的topic

[root@hadoop ~]# start-kafka.sh 
[root@hadoop ~]# kafka-topics.sh --create --zookeeper hadoop:2181 --topic car_event --partitions 1 --replication-factor 1
Created topic "car_event".

启动car_event的topic的消费者,此步仅仅是为了验证数据的,截图以下所示:

说明: 鼠标显示是一直等待状态,这是因为SparkSteam还没有往kafka中打数据,topic中无数据,消费者当然为空

idea中启动ss的程序,后台截图如下所示:

说明: 可以看到,数据显示出来了。运行的按钮显示绿色是因为文件中就5条数据,已经全部打入kafka中了。如果数据量大,运行的按钮应该是红色(一直运行)。

查看kafka的消费者,截图如下所示:

说明: 可以看到, kafka的消费者已经显示出了topic中的数据

猜你喜欢

转载自blog.csdn.net/zhaoxiangchong/article/details/78379927