大数据架构入门总结(Flume + Kafka + ZooKeeper + Spark Streaming + Drools + ELK)

这两天学习了Flume + Kafka + ZooKeeper + Spark Streaming + Drools + ELK进行大数据架构,有很多的体会和总结。这边将我的总结记录下来给感兴趣的同学提供参考参考,帮助大家可以更快的入门。


架构的数据流转

1、首先flume从日志中采集数据,这个日志可以是各种来源,比如说日志文件或者Socket通信。
2、然后flume将采集的数据推送到Kafka中,这个时候flume作为kafka的一个生产者。
3、在Kafka的模型中,ZooKeeper作为一个分布式的状态管理系统,监控着Kafka的Topic和Topic的partition分区,监控生成者和消费者状态。保证整个生产和消费的高可用。
4、然后就是Spark部分,Spark这边提交一个处理函数的jar包,然后Spark将数据处理方法传递到数据服务器上进行计算,就是方法跟着数据动。
5、在Spark提交的处理数据函数里面,主要是连接kafka获取数据然后进行规则过滤。
6、Drools的规则过滤阶段主要是加载Drl规则文件,然后Drl规则文件对传递到WorkingMemory的Fact对象进行任意的读写操作,然后通过Fact对象将结果记录到ELK中。
7、然后可以通过ELK进行数据进行搜索。
8、ELK作为一个公共的搜索系统,可以为很多系统提供服务,然后ELK本身提供很多的API,可以通过API对规则处理过的数据进行监控和报警。

因为之前没有接触过大数据的开发,现在通过这两天对整个框架的熟悉,感觉以前有些业务都通过大数据框架去处理


【优化场景】

活动页面大数据风险控制
之前我们为网站的各种促销系统、专题活动页面提供领券、抽奖API。
在使用的过程中我们发现总有人恶意的刷接口。然后我们就根据具体的刷数据的指纹特征进行逻辑优化和防护,上线升级。
但是通过这个框架可以很方便的进行处理和监控,并且不需要对业务逻辑进行修改。
实现的方法:
(1)将用户领券或者抽奖的所有的浏览器,ip,cookie等信息传给接口;
(2)接口启动异步线程进行日志记录;
(3)然后通过以上框架进行风险控制,通过设备指纹规则进行过滤;
(4)匹配到疑似不合法的请求则加入Redis黑名单列表中阻断一段时间,然后将数据都插入ELK,将正常情况和非法请求通过一个字段区分出来,后面可以通过字段在ELK中搜索。


接下来说一下我对框架个各个模块的理解

Flume

(1)flume的核心就是agent,是一个事件的概念,代表数据的一个最小处理单元。
(2)flume从source中采集数据,然后放入缓存channel中,然后推送到sink后,将缓存清空。
(3)source支持各种各样的日志格式:avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。
(4)channel缓存数据的方式可以是:memory、jdbc、file;
(5)sink的目标组件可以是:hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定义
(6)flume支持多级的agent,还支持扇入,扇出。扇入:source可以接受多个输入;扇出:sink可以将数据输出到多个目的地中。
(7)根据flume的多级agent和扇出功能,可以实现flume的负载均衡。

Kafka和ZooKeeper

(1)Kafka是一个高吞吐量的分布式的发布和订阅消息的基于文件存储的系统,就跟activemq是相类似的。
(2)高版本的kafka中包含zookeeper
(3)kafka集群,生成者,消费者都依赖zookeeper来保证系统的可用性
(4)Topics是一类消息,相当于activemq的Queue,每个topic都被分为多个partition(分区),每个partition存储的是Log文件,可以分散到多个server上。
(5)发布到这个partition的消息是以追加的方式写入到Log文件的尾部,然后每条消息有一个位置标识,称为offset,偏移量。offset是一个long型数字。这个offset唯一标识一条消息,因此kafka是不能随机读写的。
(6)kafka在消息消费后不会立刻清理log文件,而是等到配置文件中配置的时间到了,进行日志清理,不管消息是否被消费,这样有利于减少磁盘IO。
(7)消费者根据offset消费消息,消费后,offset向前移动,当然也可以设置offset为任意值以此来任意顺序消费消息,offset将会保存在zookeeper中。kafka的生产者和消费者的状态信息也是保存在zookeeper中的。
(8)kafka可以配置partitions需要备份的个数,每个partition将会被备份到多台机器上,提高可用性。
(9)每个partition都有一个Server作为生产和消费的leader。
(10)Producer端使用zookeeper用来发现broker列表,以及和Topic下每个partition leader建立连接,并发送消息
(11)Broker端使用zookeeper用来注册broker信息,以及检测partition leader的存货性。
(12)Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表,同时也用来发现broker列表并且和partition leader建立连接获取信息。

Spark Streaming

(1)MapReduce是批处理方式处理数据,启动后,需要等待比较长的时间获取结果,主要用于离线计算。
(2)Spark是基于内存计算实现,加快了处理的速度。
(3)Spark是计算跟着数据移动的。这样就减少了大量的IO操作。
(4)Spark可以支持JAVA,Scale和Python等语言。
(5)在我们这个框架中,我们通过JAVA实现kafka消息的获取,然后进行规则滤过,然后打包成jar包提交给Spark进行计算。

Spark框架比较复杂,后面专门写一篇来描述Spark的系统流程。

Drools

Drools是一个JAVA的规则引擎,主要的作用是在需要频繁更改规则的使用场景下,不修改代码逻辑,提高系统的稳定性(防止修改引入BUG或者频繁上线)。
这个规则引擎主要分为:规则编写,规则编译,规则收集,规则执行这四个阶段。
(1)规则处理的对象是一个普通的JavaBean,在插入到规则的WorkingMemory中后变成Fact对象。
(2)Fact对象只是JavaBean的引用
(3)规则的过滤其实就是对Fact对象数据的读写和逻辑操作部分
(4)规则可以设置优先级,如果不设置优先级的话,将会随机执行
(5)Fact对象是规则和应用系统之间的交互通道,所以在规则进行处理后,可以将结果按照应用系统的需求写到指定的地方

ELK

ELK由Elasticsearch、Logstash和Kibana三部分组件组成
(1)Elasticsearch是个开源分布式搜索引擎
(2)Logstash可以对你的日志进行收集、分析,并将其存储供以后使用
(3)kibana为Logstash 和 ElasticSearch 提供的日志分析的Web界面,可以进行汇总、分析和搜索数据日志

ELK用的人应该是很多的,就算不接触大数据,ELK也是一个很常用的工具,用来查日志,技术支持等等。


对于整个框架目前是在本机搭建环境,通过VirtualBox,虽然比VM要轻量很多,但是对本机还是会造成一定的负载,后面打算使用Docker在本机搭建整个环境。

以上是我边学习边总结的一些内容,感觉把自己学习的东西写下来,会领悟的更多一点。后面再继续深入研究大数据架构,然后跟大家分享。

你可能感兴趣的:(大数据架构入门总结(Flume + Kafka + ZooKeeper + Spark Streaming + Drools + ELK))