精华内容
下载资源
问答
  • Flink 计算 PV UV

    2020-12-28 14:31:41
    使用 flink 很长一段时间了,突然发现竟然没有计算过 pv uv,这可是 flink 常见的计算场景了,面试时也是常问题之一。故自己想了一个场景来计算一下。 基于 Flink 1.12 场景 外卖员听单的信息会发到单独一个 topic ...

    前言

    使用 flink 很长一段时间了,突然发现竟然没有计算过 pv uv,这可是 flink 常见的计算场景了,面试时也是常问题之一。故自己想了一个场景来计算一下。
    基于 Flink 1.12

    场景

    外卖员听单的信息会发到单独一个 topic 中,计算一个每天有多少个 外卖员听单以及总共的听单次数。

    kafka 中消息类型

    {"locTime":"2020-12-28 12:32:23","courierId":12,"other":"aaa"}
    

    locTime:事件发生的时间,courierId 外卖员id

    计算一天有多少个外卖员听单( UV ),总共听单多少次( PV )

    代码

    FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<String>(topics, new SimpleStringSchema(), properties);
    		FlinkHelp.setOffset(parameter, consumer);
    		consumer.assignTimestampsAndWatermarks(
    				WatermarkStrategy.<String>forMonotonousTimestamps()
    						.withTimestampAssigner(new SerializableTimestampAssigner<String>() {
    							@Override
    							public long extractTimestamp(String element, long recordTimestamp) {
    								String locTime = "";
    								try {
    									Map<String, Object> map = Json2Others.json2map(element);
    									locTime = map.get("locTime").toString();
    								} catch (IOException e) {
    								}
    								LocalDateTime startDateTime =
    										LocalDateTime.parse(locTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    								long milli = startDateTime.toInstant(OffsetDateTime.now().getOffset()).toEpochMilli();
    								return milli;
    							}
    						}).withIdleness(Duration.ofSeconds(1)));
    
    		env.addSource(consumer).filter(new FilterFunction<String>() {
    			@Override
    			public boolean filter(String value) throws Exception {
    				return true;
    			}
    		}).windowAll(TumblingEventTimeWindows.of(Time.days(1), Time.hours(-8)))
    				.allowedLateness(Time.minutes(1))
    //				.trigger(CountTrigger.of(5))// 其实多个 trigger 就是下一个 trigger 覆盖上一个 trigger
    				//用 event time 可能会导致 window 延迟触发,最好的解决办法是在 processingTime 的基础上添加对窗口的判断
    				// watermark 不会回退,所以如果消息早到的话( 乱序了,该相对来说晚到的消息早到了),可能会导致窗口延迟触发
    				// 夸张一点的话,窗口不触发了,直到有大于等于 watermark + triggerTime 的消息到达
    				// ContinuousProcessingTimeTrigger 一样
    				.trigger(ContinuousEventTimeTrigger.of(Time.seconds(30)))
    				//追历史数据的时候会有问题,可能历史数据不足 10s 就全部消费完毕,导致窗口不会被触发而被跳过,消费同理
    //				.trigger(ContinuousProcessingTimeTrigger.of(Time.seconds(10)))
    				//处理完毕后将 window state 中的数据清除掉
    				// 其实完全可以通过自定义 trigger 来达到 clear windowState 的目的 (Purge)
    				.evictor(TimeEvictor.of(Time.seconds(0), true))
    				.process(new ProcessAllWindowFunction<String, String, TimeWindow>() {
    					private JedisCluster jedisCluster;
    					private MapState<String, String> courierInfoMapState;
    					private MapStateDescriptor<String, String> mapStateDescriptor;
    					private MapStateDescriptor<String, Long> mapStateUVDescriptor;
    					private MapState<String, Long> courierInfoUVMapState;
    					private MapStateDescriptor<String, Long> mapStatePVDescriptor;
    					private MapState<String, Long> courierInfoPVMapState;
    					private String beforeDay = "";
    					private String currentDay = "";
    
    					@Override
    					public void open(Configuration parameters) throws Exception {
    						StateTtlConfig ttlConfig = StateTtlConfig
    								.newBuilder(org.apache.flink.api.common.time.Time.hours(25))
    								//default,不支持 eventTime 1.12.0
    								.setTtlTimeCharacteristic(StateTtlConfig.TtlTimeCharacteristic.ProcessingTime)
    								.cleanupInRocksdbCompactFilter(1000)
    								.setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite)//default
    								.setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)
    								.build();
    
    						mapStateDescriptor =
    								new MapStateDescriptor<String, String>("courierInfos", TypeInformation.of(String.class), TypeInformation.of(String.class));
    						mapStateDescriptor.enableTimeToLive(ttlConfig);
    						courierInfoMapState = getRuntimeContext().getMapState(mapStateDescriptor);
    
    						mapStateUVDescriptor =
    								new MapStateDescriptor<String, Long>("courierUVStateDesc", TypeInformation.of(String.class), TypeInformation.of(Long.class));
    						mapStateUVDescriptor.enableTimeToLive(ttlConfig);
    						courierInfoUVMapState = getRuntimeContext().getMapState(mapStateUVDescriptor);
    
    						mapStatePVDescriptor =
    								new MapStateDescriptor<String, Long>("courierPVStateDesc", TypeInformation.of(String.class), TypeInformation.of(Long.class));
    						mapStatePVDescriptor.enableTimeToLive(ttlConfig);
    						courierInfoPVMapState = getRuntimeContext().getMapState(mapStatePVDescriptor);
    
    
    						jedisCluster = RedisUtil.getJedisCluster(redisHp);
    					}
    
    					@Override
    					public void close() throws Exception {
    						RedisUtil.closeConn(jedisCluster);
    					}
    
    					@Override
    					public void process(Context context, Iterable<String> elements, Collector<String> out) throws Exception {
    						Iterator<String> iterator = elements.iterator();
    						TimeWindow window = context.window();
    						System.out.println(" window = "
    								+ DateUtils.millisecondsToDateStr(window.getStart(), "yyyy-MM-dd HH:mm:ss")
    								+ "-" + DateUtils.millisecondsToDateStr(window.getEnd(), "yyyy-MM-dd HH:mm:ss"));
    						while (iterator.hasNext()) {
    							Map<String, Object> map = Json2Others.json2map(iterator.next());
    							String courierId = map.get("courierId").toString();
    							String day = map.get("locTime").toString().split(" ")[0].replace("-", "");
    							if (courierInfoPVMapState.contains(day)) {
    								courierInfoPVMapState.put(day, courierInfoPVMapState.get(day) + 1);
    							} else {
    								courierInfoPVMapState.put(day, 1L);
    							}
    							if (!courierInfoMapState.contains(day + "-" + courierId)) {
    								if (courierInfoUVMapState.contains(day)) {
    									courierInfoUVMapState.put(day, courierInfoUVMapState.get(day) + 1);
    								} else {
    									courierInfoUVMapState.put(day, 1L);
    								}
    								courierInfoMapState.put(day + "-" + courierId, "");
    							}
    							currentDay = day;
    						}
    
    						HashMap<String, String> map = new HashMap<String, String>();
    						if (currentDay.equals(beforeDay)) {
    							map.put(currentDay + "-pv", courierInfoPVMapState.get(currentDay).toString());
    							map.put(currentDay + "-uv", courierInfoUVMapState.get(currentDay).toString());
    
    						} else {
    							map.put(currentDay + "-pv", courierInfoPVMapState.get(currentDay).toString());
    							map.put(currentDay + "-uv", courierInfoUVMapState.get(currentDay).toString());
    							//超过25个小时,昨天的数据就不对了
    							if (!beforeDay.isEmpty()) {
    								map.put(beforeDay + "-pv", courierInfoPVMapState.get(beforeDay).toString());
    								map.put(beforeDay + "-uv", courierInfoUVMapState.get(beforeDay).toString());
    							}
    						}
    						map.forEach((k, v) -> {
    							System.out.println(k + ":" + v);
    						});
    						jedisCluster.hmset("test_courier_puv:", map);
    						jedisCluster.expire("test_courier_puv:", 3 * 24 * 60 * 60);
    
    						beforeDay = currentDay;
    
    					}
    				});
    

    结果样例

    20201227-pv:1111111
    20201227-uv:111

    展开全文
  • PV UV QPS 并发数

    2021-03-02 11:03:03
    TPS(Transactions Per Second):每秒事务数QPS(Query Per Second):每秒请求数,QPS其实是衡量吞吐量的一个常用...峰值QPS:- 原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间公式:( 总PV数 * 80% ) ...

    TPS(Transactions Per Second):每秒事务数QPS(Query Per Second):每秒请求数,QPS其实是衡量吞吐量的一个常用指标,就是说服务器在一秒的时间内处理了多少个请求。并发数:并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。峰值QPS:- 原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间

    公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

    PV(Page View):页面访问量,即页面浏览量或点击量,用户每次刷新即被计算一次UV(Unique Visitor):独立访客,统计1天内访问某站点的用户数(以cookie为依据)吐吞量:吞吐量是指系统在单位时间内处理请求的数量响应时间(RT):响应时间是指系统对请求作出响应的时间,一般取平均响应时间

    QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常用量化指标,另外还有HPS(每秒HTTP请求数)。QPS(TPS)、并发数、响应时间它们三者之间的关系是:- QPS(TPS)= 并发数 / 平均响应时间

    并发数 = QPS * 平均响应时间

    举例说明:例1:  假设1秒钟100个请求,处理每个请求需要花2秒,  那么 50(每秒可以处理50个请求,即QPS使50) = 100(每秒并发数) / 2 (每个请求的平均处理时间)  这是一台机器的QPS,如有每秒并发数为1000,那么就需要10台这样的机器才扛得住:例2:  每天200万PV,那么它的QPS = (2000000 * 0.8)/ (246060*0.2)≈ 93  假设按照上面那样一台机器的QPS是50,那么抗住每天200万PV的访问量需要2台这样的机器

    性能测试工具:- apache ab

    http_load

    关于Nginx访问量统计:

    展开全文
  • 模拟生产大量数据,还可以建立PVUV,模拟的数据包括ip地址、用户、访问网站
  • JAVA 统计网站的访问量PV,UVJAVA 统计网站的访问量PV,UVJAVA 统计网站的访问量PV,UVJAVA 统计网站的访问量PV,UVJAVA 统计网站的访问量PVUV
  • vue 项目统计网站pv uv

    2020-11-18 15:18:29
    router.afterEach((to, from, next) => { setTimeout(() => { var _hmt = _hmt || [] ;(function() { var hm = document.createElement('script') ... var s = document.getElementsByTagName
    router.afterEach((to, from, next) => {
      setTimeout(() => {
        var _hmt = _hmt || []
        ;(function() {
          var hm = document.createElement('script')
          hm.src = 'https://hm.baidu.com.............地址'
          var s = document.getElementsByTagName('script')[0]
          s.parentNode.insertBefore(hm, s)
        })()
      }, 0)
    })
    
    https://blog.csdn.net/aijiagui7454/article/details/101134330?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
    
    展开全文
  • python 统计pvuv

    2021-01-12 01:29:08
    数据格式: 2015-04-10 15:32:54 udid:user1 setKey:flag1 2015-04-10 15:33:00 udid:user2 setKey:flag2 ... #!/usr/bin/python import os import sys def run(num=1): ...) run(num) 用dict()存储统计,set([])统计uv

    数据格式:

    2015-04-10 15:32:54

    udid:user1

    setKey:flag1

    2015-04-10 15:33:00

    udid:user2

    setKey:flag2

    ...

    #!/usr/bin/python

    import os

    import sys

    def run(num=1):

    #file param

    filePrefix='icap/flowtips'

    fileEx='.txt'

    '''

    input

    '''

    records=list()

    for i in range(num + 1):

    filePath=''.join([filePrefix,str(i),fileEx])

    if not os.path.exists(filePath):

    continue

    f=open(filePath,'r')

    line=f.readline()

    record=list()#record=''

    while line:

    #print line

    if not len(line.strip()):

    records.append('\t'.join(record))

    record=list()#record=''

    else:

    record.append(line.strip()) #+= line.strip() + '\t'

    line=f.readline()

    f.close()

    '''

    analysis

    '''

    data=dict()

    for s in records:

    #print s

    arr = s.split('\t')

    if len(arr) < 3:

    continue

    #key

    key = arr[0].strip()[0:10]# + '\t' + arr[2].strip()[7:]

    #value

    val = data.get(key, -1)

    if -1 == val:

    #create a new dict as value assosition to the key

    val = {'pv':0, 'uvSet':set([])}

    data[key] = val

    #pv++

    val['pv'] = val['pv'] + 1

    #add item to set

    val['uvSet'].add(arr[1])

    '''

    output

    '''

    for key in data:

    val = data[key]

    print ( '%s\t%d\t%d' % ( key, val['pv'], len(val['uvSet']) ) )

    if '__main__' == __name__:

    num = 20

    if len(sys.argv) > 1:

    num = int(sys.argv[1])

    run(num) 用dict()存储统计,set([])统计uv

    展开全文
  • 拦截器 @Configuration public class PvuvInterceptorConfig implements WebMvcConfigurer { @Resource private PvuvInterceptor pvuvInterceptor; ... public void addInterceptors(InterceptorRegistry re
  • ip pv uv及相应统计shell

    2021-05-15 20:31:12
    ip 独立ip 特定时间内统计到的不通ip squid统计方法 [root@localhost etc]...fg time sh pv_test.sh real 1m40.616s user 1m37.560s sys 0m1.807s uv 统计不通客服端个数 squid的log信息占时没有相关数据,故不做研究了
  • 最近在优化博客呀,想做一个统计网站 pv uv 的功能,虽然有第三的统计平台再用,但还是想自己写一个啊。其实统计的数据非常简单,就是网站的访问量丶访客量。public function __construct(){Funcs::setUV();DB::...
  • 使用Linux命令分析Nginx日志中的PVUV

    千次阅读 2020-05-27 12:28:55
    近期,公司有统计网站PVUV的想法,巧合的是,公司网站上已经安装了Nginx,分析Nginx的日志来统计PVUV简直是再简单不过了。所谓PV(访问量),即Page View,它是页面浏览量或点击量,用户每次刷新即被计算一次。UV(独立...
  • QPS、TPS、PVUV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上每个程序员都是必懂知识点。下面我来一一解释一下。 QPS Queries Per Second,每秒查询数。每秒能够响应的查询次数。 QPS是对一个特定的查询...
  • PV UV IP的意义

    2020-04-16 09:28:10
    PV是网站分析的一个术语,用以衡量网站用户访问的网页的数量。... PVUV、IP之间的区别与联系  1、什么是PV值  PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量。具体的说...
  • tail -100f test.log #实时监控100行日志 ...1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print $7}' access.log|wc -l 3.查询访问最频繁的URL awk...
  • go pv uv 统计

    千次阅读 2018-07-13 17:44:52
    go pv uv 统计 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联网企业架构(干货) ...
  • 封装PVUV统计方法下面康康我在不同的情况下在页面的使用下面就是我们的最后一步,如何在axios的config.headers添加自字段 领导提出了一个需求,写pvuv要统计用户的访问量和喜好,俺也没写过,但是我们组的后台非常的...
  • pvuv统计设计

    千次阅读 2018-04-29 23:28:42
    一、背景在考拉先生公司做的第一个项目是进行统计pvuv。通过一定的规则提取nginx日志文件来进行统计。二、第一个版本一开始做的是统计唯品会的pvuv统计,观察流量。主要设计图如下:很简单,将每天唯品会的广告的pv...
  • 使用Redis 哈希(Hash)统计pv uv

    千次阅读 2019-04-03 19:04:04
    需求:要统计每天有多个用户访问这个渠道的H5页面,计算PV UV 废话少说,直接上代码: (1)这个是渠道H5的index方法,利用Redis hash里的下面三个方法 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在...
  • 一,统计1.27日到2.2日的日志?蛋疼点:1,天数多,机器多先想办法列出所有要统计...pv:bzcat node{1,2,3,4}/ access_log.2017-02-0{1,2}*.bz2 node{1,2,3,4}/access_log.2017-01-{27,28,29,30,31}.txt.bz2|grep "your ke...
  • PV UV 日活 月活

    千次阅读 2020-02-04 10:02:17
    PV,即Page View,表示页面浏览量或者点击量,每当一个页面被打开或者被刷新,都会产生一次PV,只要这个请求从浏览器端发送到了服务器端 UV,即Unique Visitor,表示独立访客数 日活:(DAU)日活跃用户Daily Active...
  • nginx 日志pv uv统计

    千次阅读 2017-08-17 11:16:12
    linux服务器上nginx日志访问量统计命令 日志文件所在地方: /var/log/nginx/access_iqueendress.com.log /var/log/nginx/access_m.iqueendress.... -------------------------- ...1.根据访问IP统计UV awk '{print
  • 网站统计IP PV UV实现原理

    千次阅读 2018-04-29 23:29:29
    原来是一样的,这次先实现了PVUV,IP三个重要指标的统计。 PV(访问量):Page View, 即页面浏览量或点击量,用户每次刷新即被计算一次。 UV(独立访客):Unique Visitor,一般使用cookie标记,访问您...
  • 做网站的都知道,平常经常要查询下网站PVUV等网站的访问数据,这篇文章主要介绍了详解NGINX如何统计网站的PVUV、独立IP ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • pv uv vv cv 的区别

    千次阅读 2018-03-27 11:15:11
    1. 播放类指标VV(Video View,播放数),是指在一个统计周期内,视频被打开的次数之和。CV(Content Views,...2. 浏览类指标PV(Page View,浏览量),是指在一个统计周期内,浏览页面的数之和。UV(Unique Visitor,...
  • mongodb pv uv ip 统计

    千次阅读 2017-05-15 19:14:00
    reduced = {pv:0,ip:0,uv:0,se:0,st:0}; values.forEach(function (val) { if (val.cookie) { reduced.pv += 1; reduced.st += val.standingTime; uvkey = val.cookie + '_' + val.ip; if(!uvMap[keystr]...
  • 如何用百度统计页面中多个链接的pvuv,并且页面还不需要跳转铁子,我只想说去搜-->百度统计的[事件跟踪]{https://tongji.baidu.com/open/api/more?p=guide_trackEvent} 铁子,我只想说去搜–>百度统计的[事件...
  • zabbix监控pv uv

    2020-12-02 20:18:00
    zabbix监控pv uv pv:访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计。 uv:独立访客,统计1天内访问某站点的...
  • 微网站想要统计浏览量和访问量,有哪位大神知道,请指教下。。。。。
  • 下面我们举一个网络日志计算pv uv的实例,通过代码打成jar包的方式在 spark-submit执行,代码 具体实现以下功能: 1. 数据清洗,只保留date url 和guid 2.创建spark schema ,将rdd转换成dataframe,并创建临时表 3....
  • pv一般都是统计指定页面的点击量,这里用首页来计算 1 grep"/index.php"/var/log/nginx/access.log|wc-l uv是统计指定页面上真是访问的用户,也就是说同一ip 不管点击多少次都算一个uv 1 grep...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,898
精华内容 7,559
关键字:

pvuv