有兴趣想学习国内整套Spark+Spark Streaming+Machine learning顶级课程的,可加我qq 471186150。共享视频,性价比超高!
1:kafka直接也可以监控一个文件夹,但是为什么我们采用flume的方式,通过flume把文件传给kafka,而不直接通过kafka去监控一个文件夹呢?
1)flume可以搜集分布式的日志
2)kafka直接读取文件,默认情况下,kafka要求文件格式是json格式。而数据很多情况下都不是json格式。这样就会崩溃。当然自定义一个读取器。所以kafka生产环境下很少去读文件,它就是直接收放消息的。
2:企业实际生产环境下初步架构图如下:
1)下图是描述数据来源,如前端有高并发,每秒访问一百万,一千万之类的,用Nginx接收请求后,在后端用Tomcat或者apache之类的做负载均衡。
2)Server中接收到请求路由后一般都会对每个请求在文件中写一条Log:
可以自动配置Server写日志;
也可以通过执行业务逻辑的过程来写日志
3)用户生成的日志或者不同服务器生成的日志一般是比较零散的,企业中一般都会有Crontab等定时工具来通过日志整理工具来把当天的日志采集、合并和初步的处理成为一份日志文件,当然可以多份,分布式建议1份,然后发送到Flume监控目录中!!!当Flume发现有新的日志文件进来的时候,会按照配置把数据通过Channel来Sink到目的地,这里是Sink到Kafka集群中
6)上面kafka的方式是在线数据分析,下面是离线数据分析。日志上的数据当然可以如下图,直接放在hdfs上,但是实际生产环境下基本没有人直接把server上传的日志放在hdfs上。假设放在hdfs上,因为hdfs不断的收到数据,可以对数据进行如下初步的清洗:下面的分区表:每隔一小时或者一天一个目录。下面第3步,在已有表的基础上产生很多表,然后公司的业务人员分析人员基于这些目标表去写sql。执行他相应的分析需要
上面数据仓库进行了多维度的ETL分析后,下面交给spark集群去处理。在企业生产环境下,大多数如果是离线数据分析,Spark处理数据都是基于Hive的,分析后的结果用于提升营业额,利润和市场占有率。而kafka则是在线数据分析