大数据流式分析系统框架(日志处理系统)

来源:互联网 发布:js遍历json对象数组 编辑:程序博客网 时间:2024/04/30 18:48
Flume+Kafka+Storm+Redis


Flume(日志收集系统)可以理解为一个日志系统与消息组件之间的过渡端。负责日志数据埋点。




Flume的核心本质一定要结合Log4j和消息组件使用,由于其会产生大规模的日志数据,所以能够承受flume的消息组件,首选kafka。
那么现在就把flume的sink设置为kafka。
考虑到一个问题是kafka采用了kerberos认证,所以要想在flume中使用kafka操作,首先要将kafka的开发包放到flume的lib中,还要考虑到jaas的配置问题。
此时,通过log4j采集到的信息通过flume将采集到的消息数据发送到kafka处理,而这些消息就成为了kafka的生产者(provider)。

KAFKA可以说是现在消息组件中性能最高的一款产品,是分布式——订阅消息系统,主要用与处理活跃的流式数据。
使用消息队列最大的功能就是进行数据的缓冲操作。相对于RabbitMQ,ActiveMQ,kafka的特点是:所有的消息会自动保存两天的时间,而其余两个消息消费完就会自动被删除。

Kafka为了保证数据的完整性,所有的数据都负责保存在Zookeeper服务器上。zookeeper最大的特点就是可以有效的进行集群数据的一致性管理。其中broker主要作为中间缓冲,消息分发。

总结:
Producer发送一个(topic)主题消息,broker(zookeeper)负责topic的接受和储存和传输。broker会将topic以offset(节点1234..)的顺序保存在不同的partitions之中。同时broker 用主从关系(leader,follower)实现分布式集群。Consumers从breaker中取的消息。consumers以分组的形式存在,每个consumer只能同时消费一个partition。如果只有一个组,那么就是传统的P2P(点对点)的消息队列模式,如果有不同的分组,就是"发布-订阅"一对多的广播模式。因为有offset的机制,所以可以接收到历史消息。
kafka的特点就是快:
采用零拷贝技术,数据的消费能力得到了提升。
采用了数据的压缩,减少了网络带宽占用。
采用了多分区多副本的机制,保证了数据的可靠性。
使用了offset可以实现历史消息的读取,同时也可以保证信息读取的速度。
kafka一直缺少一个可靠的安全认证方式,SSL认证太麻烦,直到退出了Kerberos认证,才让kafka由试验阶段变为实际的生产环境。在实际的开发之中,更多的开发者会选择利用kerberos这种认证机制同时结合jaas配置文件进行更加有效的安全认证处理。


Strom可以实现流式分析,这就解决了原来Hadoop只能进行离线分析的缺陷。storm是一个免费开源,分布式,高容错的实时计算系统。经常用于实时分析,在线机器学习,持续计算,分布式远程调用和ETL等领域。
Storm的工作原理:

如果要使用storm分析工具,必须是在集群环境下使用。Nimbus相当于工头,supervisor可以理解为干活的工人。在storm中所有的主机都可以进行动态的扩容,只需要设置好nimbus节点的名字就可以进行新主机的注册。
在storm中用一个Topology(拓扑)的概念描述任务的处理过程。可以把它理解为一个永远不会停歇的作业。


在整个storm处理中,每一个spouts或者是bolts都是一个单独的task对象,而这些对象运行在executor线程之中。
spouts可以理解为处理的起点,每一个worker只为一个topology服务,根据业务的需求,进行bolts业务点的分步接连处理。一直到finleBolts。
在storm中也是使用zookeeper来实现supervisor主机的高可用。

storm处理的数据量是非常庞大的,而且处理的速度也非常快,对于处理完成后进行数据储存,允许你将数据存到HDFS,Hbase,SQL数据库,Redis缓存数据库。一般使用Redis储存storm数据分析结果。
可以使用Jedis连接Redis。
其实在storm中考虑到可能会与Redis整合,所以专门提供了一些方便处理的类和方法。
使用RedisStorBolt储存。

在实际的项目中,真正作为Spout的数据发出类,往往都是Kafka的消费者。但是鉴于kafka的kerberos认证的局限性,一般我们还会为Kafka设置多端口访问。


案例:热词搜索

原创粉丝点击