四、(项目架构的过去与现在)亿级用户行为之大数据实时分析

 

一、数据采集设计与要求

1、 数据采集设计与要求

1)彻底跟业务系统解耦:服务端数据落盘,然后通过flume采集,最后发送到kafka

2)采集架构采用两层,第一层采集层,第二层聚合层

3)采集需要有负载均衡的功能。充分利用资源

4)第一层agent挂掉后,重启采集不能丢失数据

5)第二层某个agent挂掉之后,系统要求仍然可以继续运行,不丢失数据,不能影响结果

6)同一个用户上报的数据,需要进入同一个kafka分区

 

2、 数据采集为什么要分层?

1)根本原因:日志服务器跟大数据平台不在同一个机房,有防火墙,无法直接通信

2)第一层专注于数据采集(采集速度快),第二层可以做ETL(简单ETL,过滤清洗,分区优化)

3)数据中间需要缓冲,聚合,减少IO

二、日志采集拓扑结构-数据高峰处理

1. 用户行为日志采集拓扑

 

 

1)高可用如何保证?

第一层flume部署采集数据,如果挂掉了,可以通过脚本重新启动,重新采集数据,数据不会丢失,

因为日志服务器日志会先落盘。第一个层会有很多个日志服务器和flume刺激,整体看起来仍然在运行。

第二层flume聚合层有多个聚合节点,第一层每个flume节点采集的数据都可以负载均衡到聚合层的

每个节点。当其中一个聚合节点挂掉之后,采集层的数据可以发送到其他聚合节点,而且数据

不会丢失。

2)数据流向如何?出现数据积压如何处理?

手机客户端产生数据===》服务端,数据落盘===》flume采集(source,Channel缓存数据,

sink拉取channel数据发送给聚合节点)===》flume聚合(source,channel,sink发送给kafka)

===》kafka集群===》SparkStreaming===》HBase===》web服务器,数据落盘,===》flume采集

3)出现积压可能的原因:kafka下线升级

flume采集层和聚合层仍然可以采集数据,数据现在聚合层channel积压,当塞满之后,数据又会在

采集层channel积压,当数据塞满之后,整个采集就会停止,日志服务器产生数据直接落盘。

当kafka上线之后,解压情况会快速消失。

 

2.Nginx日志采集拓扑

 

 

1)如何应对高峰数据请求(二八)?

一般情况下,我们的数据产生有一个二八原则:80%数据产生在20%的时间内

低峰时期有固定的Nginx服务器,高峰时期动态增加Nginx服务器。

既可以应对数据高峰时期,又减少服务器资源的浪费

2)如何低侵入动态增加采集节点?

逐个的上下线flume采集节点

新增聚合节点之后:

之前的采集配置不动,新增的采集配置增加,新增的flume聚合配置。

支队新增的采集和聚合配置做改动,对之前的采集架构不影响。

三、集群资源规划部署

1. 软件版本选择

apache+cdh+hdp

1)Zookeeper3.4.6

2)Hadoop2.6x 2.7x 2.8x 2.9x

3)HBase 1.x

4)flume 1.8

5)kafka1.0

6)Spark2.3x

7)Tomcat7/8

8)JDK1.8 

9)scala2.11.8

2.线上集群规划

1)Hadoop 150节点左右:实时计算队列和离线计算队列

2)kafka 18台

3)Spark 跳板机/客户端 on yarn

4)HBase 与HDFS共用节点

5)flume多层级如何部署:flume采集节点与日志服务器节点共用

6)每个节点内存:64G、128G、256G ,4T磁盘;当前存储不要超过总磁盘70%

7)Zookeeper 单独搭建:5、7

 

3.实验环境集群规划

1)3个节点 

2)内存16G

3)1T

 

项目开发流程:

  数据从手机客户端到服务端

  flume数据采集

  kafka消息队列

  hbase数据库

  spark streaming实时业务开发

  项目测试运行

  用户行为接口开发

四、数据从手机客户端到服务器

1. 数据格式

{
    "userId": 1000,
    "day": "2020-09-05",
    "begintime": 1546654200000,
    "endtime": 1546654800000,
    "data": [
        {
            "package": "com.browser1",
            "activetime": 60000
        },
        {
            "package": "com.browser3",
            "activetime": 120000
        }
    ]
}

 

 

2. 模拟手机客户端产生数据

 见项目代码

3. 服务端web项目打包部署

好吧,我绝望了,这块真的不懂,tomcat起来了,但是始终404

下一小节

五、flume数据采集

1. Flume TailDirSource断点续传

1.1 断点续传原理

TailDir Source可实时监控一批文件,并记录每个文件最新消费位置,agent进程重启后不会

有重复消费的问题

遗留问题:文件回滚会造成数据重复采集

2. Flume TailDirSource重复采集bug修复

修改ReliableTaildirEventReader中的源码,进行bug修改

3. flume高可用分布式集群构建

4. flume集群采集上报数据

六、kafka集群可用性测试

1. kafka集群常用命令使用

2. flume与kafka整合

kafkasink

3. flume与kafka实现分区优化

1)正常情况flume发送数据到kafka集群,数据随机发送到kafka每个分区(3)

uid=1001

p0  1

p1  1

p2  1

同一id数据进入到不同分区,

 

使用拦截器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-07-12 20:30  起始的地方  阅读(409)  评论(0编辑  收藏  举报