IDEA+JAVA+KAFKA数据采集案例

1 实验目的

基于前期对用户行为日志数据的理解,熟悉并练习真实企业中数据的采集流程。主要实验目标有:

  1. 业务背景问题领域 ER 模型设计;
  2. 选择合适的技术,设计并实现原始日志数据的实时增量收集(包括单数据源和多数据源、多粒度增量收集;
  3. 设计并实现原始日志数据的实时解析与结构化存储

2 实验环境和数据集

个人笔记本电脑、虚拟机软件:vmware 15 、putty、psftp、IDEA IDE
安装三台虚拟机,操作系统为centos7,均安装了kafka,Zookeeper,在cluster2上安装了MYSQL

软件包名 软件名称 版本 安装目录
jdk-7u80-linux-x64.tar.gz java软件开发工具包 1.7.80 /usr/local/jdk1.7.0_80
mysql-5.6.37-linux-glibc2.12-x86_64.tar.gz MySQL 5.6.37 /usr/local/mysql
zookeeper-3.4.6.tar.gz Zookeeper 3.4.6 /usr/local/zookeeper-3.4.6
kafka_2.10-0.8.2.1.tgz Kafka 2.10.-0.8.2.1 /usr/local/kafka_2.10.-0.8.2.1
mysql-connector-java-5.1.43-bin.jar MySQL JDBC驱动 5.1.43 /usr/local/apache-hive-1.1.0-bin/lib/

数据集某中文 IT 技术社区用户行为日志数据

本课程所使用的数据集一由某中文 IT 技术社区提供,共包含 157,427 位用户在2015 年期间产生的多种类型的行为数据。 数据集基本统计信息如下:

1587045080251

数据集中用户编号为U0000001至U0157247,文档 编号为D0000001至D1000000。原始行为日志数据以文本文件的形式存储,其记录格式为:每一行代表一条日志记录,包含四个字段,依次为用户行为类型、用户编号、博客编号和行为产生时间,用\001 分开。其中用户行为类型包括:用户发表博客、用户浏览博客、用户评论博客用户对博客点赞、用户对博客点踩、用户收藏博客等六种用户行为。

3实验步骤

.31 设计用于存储结构化的用户行为日志数据的 MySQL ER 模型

下载的数据集中,数据库表模式已经设计好,包含六张表。本机使用navicat在cluster2上建表

create TABLE userbasic(Uid VARCHAR(10) not NULL PRIMARY key, Gender VARCHAR(10) not null,Status VARCHAR(10) not null,FollowNum VARCHAR(10) not null,FansNum VARCHAR(10) not null,FriendNum VARCHAR(10) not null);

create TABLE useredu(Uid VARCHAR(10) not NULL PRIMARY key, Degree VARCHAR(10),SchoolName VARCHAR(50),MajorStr VARCHAR(50),FOREIGN KEY(Uid) REFERENCES userbasic(Uid));

create TABLE userskill(Uid VARCHAR(10) not NULL PRIMARY key, SkillName VARCHAR(255) ,FOREIGN KEY(Uid) REFERENCES userbasic(Uid));

create TABLE userinterest(Uid VARCHAR(10) not NULL PRIMARY key, InterestName VARCHAR(255),FOREIGN KEY(Uid) REFERENCES userbasic(Uid));

create TABLE articleinfo(Aid VARCHAR(10) not NULL PRIMARY key, DiggCount VARCHAR(10) not null,BuryCount VARCHAR(10) not null,ViewCount VARCHAR(10) not null,CommentCount VARCHAR(10) not null,Type VARCHAR(10) not null,IsTop VARCHAR(10) not null,Status VARCHAR(10) not null);


create TABLE userbehavior(Uid VARCHAR(10) not NULL,Behavior VARCHAR(10) not NULL,Aid VARCHAR(10) not null,BehaviorTime VARCHAR(30) not null,PRIMARY KEY(Uid,Behavior,Aid,BehaviorTime),FOREIGN key(Uid) REFERENCES userbasic(Uid),FOREIGN key(Aid) REFERENCES articleinfo(Aid));

3.2 创建Kafka话题并尝试设置不同的分区数目

启动zookeeper集群,kafka集群

#在三台机器上分别
$ zkServer.sh start
$ kafka-server-start.sh /usr/local/kafka_2.10-0.8.2.1/config/server.properties &

kafka使用分区将topic的消息打散到多个分区分布保存在不同的broker上,实现了producer和consumer消息处理的高吞吐量。这里我们为每一个表创建一个 topic,设置不同的分区数

$ kafka-topics.sh --create --zookeeper cluster1:2181,cluster2:2181,cluster3:2181 --replication-factor 3 --partitions 3 --topic userbasic

$ kafka-topics.sh --create --zookeeper cluster1:2181,cluster2:2181,cluster3:2181 --replication-factor 3 --partitions 1 --topic useredu
	
$ kafka-topics.sh --create --zookeeper cluster1:2181,cluster2:2181,cluster3:2181 --replication-factor 3 --partitions 2 --topic userinterest
	
$ kafka-topics.sh --create --zookeeper cluster1:2181,cluster2:2181,cluster3:2181 --replication-factor 3 --partitions 1 --topic userskill
	
$ kafka-topics.sh --create --zookeeper cluster1:2181,cluster2:2181,cluster3:2181 --replication-factor 3 --partitions 2 --topic userbehavior
	
$ kafka-topics.sh --create --zookeeper cluster1:2181,cluster2:2181,cluster3:2181 --replication-factor 3 --partitions 3 --topic articleinfo

#查看topic列表	
$ kafka-topics.sh --list --zookeeper cluster1:2181,cluster2:2181,cluster3:2181
#查看topic详细信息
$ kafka-topics.sh --describe --zookeeper cluster1:2181,cluster2:2181,cluster3:2181

3.3 kafka生产者

接下来在IDEA中进行编程,创建java工程。因为不知道具体用到哪些jar包,这里导入了kafka/lib目录下的所有jar包。三种生产者使用多线程thread类,来实现抓取时间间隔、数据源的设置。

3.3.1 模拟单数据源秒级(每秒一次)抓取的 Kafka 生产者

以userbasic topic为例,程序每秒读取一行源文件中的数据,并每秒给userbasic中发送一次消息
注意start()是Thread类中的,线程start()的入口就是run()

import java.util.Properties;
import java.util.concurrent.TimeUnit;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
import kafka.serializer.StringEncoder;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class kafkaProducer extends Thread{
   
    private String topic;
    public kafkaProducer(String topic){
   
        super();
        this.topic = topic;
    }
    
	//线程入口
    public void run() {
   
        Producer producer = createProducer();
        int i=0;
        String str = null;
        FileInputStream inputStream = null;
        try {
   
            inputStream = new FileInputStream("D:\\files\\2019-2020\\11数据仓库与大数据工程\\实验\\Datasets_1\\userBasic\\userBasic");
        } catch (FileNotFoundException e1) {
   
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        //BufferedReader可以按行读取文件
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        try {
   
            while((str = bufferedReader.readLine()) != null){
   
                i++;
                System.out.println(str+"-------"+i);
                producer.send(new KeyedMessage<String, String>(topic, str));
                try {
   
                    //这里控制读取文件的间隔
                    TimeUnit.SECONDS.sleep(1
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、项目简介 本项目是一套基于JavaWeb的业务信息采集分析系统,主要针对计算机相关专业的正在做毕设的学生和需要项目练习Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 项目都经过严格调试,确保可以运行! 二、技术现 ​后台框架:JSP、Servlet、JDBC ​数据库:MySQL 开发环境:JDK、Eclipse、Tomcat 三、系统功能 该超市业务信息采集分析系统采用B/S结构,使用JAVA开发语言,以MySQL作为后台数据库。该系统共包含两种角色:员工和管理员。 系统的主要功能模块如下: 1.系统管理 系统登陆、系统退出、修改密码 2.员工信息管理 员工用户管理、增加员工用户、员工用户查询 3.商品信息管理 商品信息管理、增加商品信息、商品信息查询 4.货架信息管理 货架信息管理、增加货架信息、货架信息查询 5.商品类型管理 商品类型管理、增加商品类型 6.进货信息管理 进货信息管理、增加进货信息、进货信息查询 7.销售信息管理 销售信息管理、增加销售信息、销售信息查询 8.库存信息管理 库存信息盘点、库存信息查询、缺货信息提醒 9.盈利信息管理 盈利信息查询、盈利信息统计、盈利信息分析 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的际应用价值。
flume是一个分布式、可靠、高可用的数据采集、聚合和传输系统。在数据采集方面,flume可以很好地与nginx、kafka、mongodb等常见的数据处理工具和数据库进行集成。下面介绍一下基于nginx+flume+kafka+mongodb现埋点数据采集的步骤: 1. 配置nginx服务器,将所有的http请求都转发到flume服务器上。可以使用nginx的proxy_pass指令来现。 2. 在flume服务器上,配置flume agent来接收nginx服务器转发过来的http请求,并将请求数据转发给kafka服务器。flume的配置文件需要设置source、channel和sink三个部分,具体配置可以参考flume官方文档。 3. 在kafka服务器上,创建一个topic来存储flume发送过来的http请求数据。可以使用kafka的命令行工具kafka-topics来创建topic。 4. 在flume服务器上,配置一个kafka sink来将http请求数据发送到kafka服务器上的指定topic。 5. 在mongodb数据创建一个collection来存储http请求数据。可以使用mongodb的命令行工具mongo来创建collection。 6. 在flume服务器上,配置一个mongodb sink来将http请求数据kafka服务器消费,并将其存储到mongodb数据的指定collection。 7. 启动nginx、flume、kafka和mongodb服务,并进行测试。可以使用curl等工具模拟http请求,并查看数据是否能够被成功采集、存储到mongodb。 以上就是基于nginx+flume+kafka+mongodb现埋点数据采集的基本步骤。需要注意的是,具体的配置和现过可能会因为不同的业务需求而有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值