zoukankan      html  css  js  c++  java
  • 四、(项目架构的过去与现在)亿级用户行为之大数据实时分析

     

    一、数据采集设计与要求

    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数据进入到不同分区,

    使用拦截器

  • 相关阅读:
    http uri唯一标识
    http协议
    python模块 sys
    file 文件的操作
    库的介绍及使用
    python os模块
    python的序列化与反序列化
    python 字典的定义以及方法
    python字符串的常用方法
    在Windows下使用adb logcat grep
  • 原文地址:https://www.cnblogs.com/hanchaoyue/p/13289729.html
Copyright © 2011-2022 走看看