本博文主要包括以下内容:
1、技术分析
2、实现实战
package com.dt.spark.SparkApps.cores;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Random;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
/**
*
* 论坛数据自动生成代码,该生成数据回座位Producer的方式发送给Kafka,然后通过SparkStreaming程序会从
* Kafka中在线Pull到论坛或者网站的用户在线行为信息,进而进行多维度的在线分析
* data: 日期,格式为yyyy-MM-dd
* timestamp:时间戳
* userID:用户ID
* pageID:页面ID
* ChanelID:板块的ID
* action:点击和注册
*
*/
public class SparkStreamingDataManuallyProducerForKafka extends Thread
{
//具体的论坛频道
static String[] channelNames = new String[]{
"Spark","Scala","Kafka","Flink","Hadoop","Storm",
"Hive","Impala","HBase","ML"
};
//用户的两种行为模式
static String[] actionNames = new String[]{
"View", "Register"};
private String topic; //发送给Kafka的数据的类别
private Producer<Integer, String> producerForKafka;//他这个是索引加内容
private static String dateToday;
private static Random random;
public SparkStreamingDataManuallyProducerForKafka(String topic){
// 格式 化器
dateToday = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
this.topic = topic;
random = new Random();
// 设置参数
Properties conf = new Properties();
conf.put("metadata.broker.list","Master:9092,Worker1:9092,Worker2:9092");
// Kafka在生成的时候有个key,key的序列化器,这是默认的方式
conf.put("serializer.class", "kafka.serializer.StringEncoder");
// 基于这些内容,创建构造器Produce
producerForKafka = new Producer<Integer, String>(new ProducerConfig(conf)) ;
}
//对于线程而言得有run方法,我们得复写这个run方法
@Override
public