day23 日志流分析

1、我们的用户
产品线的产品专员和负责人
2、用户的需求
多维度的分析各项业务指标
需要实时
3、以往的模式
业务人员向数据部的数据接口人提交需求,接口人将需求转给hive工程师,hive工程师写sql实现指标,并专门的人员生成报表。
4、现在的模式
业务人员直接使用实时流量指标产品
根据判断的规则,输入多个条件,组成一个Job,该Job对应一个指标。
5、程序解放出来,做运营


-------------------------------------


推广统计:
1、某活动页来自百度的流量统计
数据分析:目标,数据,清洗,计算
来源url 
来源url 中包含 推广
请求url 中包含 活动页
select count() form 表 where refurl = 百度 and refur参数 = 推广 and requrl = 活动页

2、某活动页来自百度的流量统计,各个省市的流量占比
select count() form 表 where refurl = 百度 and refur参数 = 推广 and requrl = 活动页 
……………………………………
3、某活动页来自百度的流量统计,各个省市的流量占比中各个操作系统的占比
select count() form 表 where refurl = 百度 and refur参数 = 推广 and requrl = 活动页 
……………………………………

问题: 

1.kafka+storm 如何保证完整消息处理

一条消息产生----

Kafka--KafkaSpout-Storm--->Redis


附6.Storm的面试题目答疑

kafka+storm 如何保证消息完整处理

一条消息产生------》kafka --->kafkaSpout-Storm---->Redis

 问题1: kafka 数据生产消费如何保证消息的完整处理

Producer 发送时缓存,需要阀值设定(数量阀值,时间阀值)

Producer-batch(缓存机制queue)--重试机制---->ack(-1,1,0)---Broker(partition leader/slave)------>KafkaConsumer(内存中,new offset)---->zk( old offset)


kafkaConsumer  消费数据时,由于offset 是周期性更新,导致zk 上的offset 数值必然小鱼内存中的数值。

当KafkaConsumer挂掉后重启,必然会导致数据重复。

如何解决重复消费:

1,技术方法(不可取),

2,业务方法(标识数据:找到消息中的唯一标识 <messageTag,isProcess>)


问题2:Storm中如何保证消息的完整处理  ack - fail 
自己定义 缓存Map<msgid,messageObj>
Spout---->nextTuple----Tuple---Bolt(ack(tuple))
Bolt1-----Tuple1-1
Bolt1-----Tuple1-2
Bolt1-----Tuple1-3
Bolt1-----Tuple1-4
Bolt2(ack(Tuple1-1))
Bolt2(ack(Tuple1-2))
Bolt2(ack(Tuple1-3))
Bolt2(ack(Tuple1-4))


 如果成功(spout.ack(msg))
map.remove(msgid)

 如果失败(spout.fail(msg))

messageObj = map.get(msgid)
collector.emit(messageObj,msgid)


问题3:如何保证一条消息路过各个组件时保证全局的完整处理


问题4:在storm环节中自定义的map如何存储,在KafkaConsumer如何处理重复消费的问题?

 标识数据<Set>  缓存Map<Map> 
问题:请问存储redis时,由于网络原因或其他异常导致数据不能成功存储 怎么办?
重试机制,保存3次,打印log日志,redis存储失败。


2.数据量大如何保证到kafka 中,Storm如何消费,解决延迟。

问题1: 请问Kafka如何处理海量数据 -----整体数据:100G

 数据保存在哪里: broker 集群 
topic ---partition  10   -------------->每个分片保存10G 

数据保存如何快:pageCache 600M/S的磁盘写入速度  sendfile技术

数据计算:  数据计算是根据数据处理业务的业务复杂度来说的,越复杂对应的复杂度越高。

                      如何bolt 的并发读要设置成1 万个,才能提高处理的速度,需要将bolt中的代码逻辑分解出来,形成多个bolt组合。


3.Flume监控文件,异常之后重启,如何避免重复的读取。

异常的范围是 flumeNg的异常。

log文件,读取文件,保存记录的行号,

如何保存行号:

command.type=exec shell<tail -F xxx.log>  自定义shell 脚本,保存消费的行号到工作目录的某个文件里。

当下次启动后,从行号记录文件中拿去上次读到的行数。


思考题:

1.如何保证一条数据在经过kafka 和storm 之时,消息被完整处理。

kafka,生产和消费 storm,ackfail

producer--<同步、异步(缓冲区)>---------->broker------------->zk-------->KafkaSpout------------------------------->Bolt(订单ID,去重)

缓冲区的时间阈值和数量阈值 partition的目录         offset=1w          ack fail(重发)Redis Set

消息响应机制:ack (0,1,-1)   自定义的Spout需要Map或外部存储保存数据


nginx 日志配置文件






猜你喜欢

转载自blog.csdn.net/xiamaocheng/article/details/60574152
今日推荐