文章目录
一、DELETED
1-1 业务背景、业务场景、业务模式
背景: 为了更好的做到个性化服务、用户体验提升、智能分析、风险控制,在大数据离线(批)处理之外,搭建实时(流式)处理平台迫在眉睫。比如说对实时性要求较高。。。。。。
[批流统一,业界暂时还没有成熟方案以及技术。]
场景:
模式:
1-2 数据峰值、需求
暂略
二、难点
2-1 数据孤岛
。。。。。。各部门的数据保存在不同的业务库当中,跨部门数据共享非常困难的问题。
2-2 不同数据的定制化数据抽取方案
解决各业务抽取自己所需要的数据,抽取时间不同,互相拿到的数据版本不一致的问题。
2-3 数据完整性、安全性
如何保证数据总线获取各业务数据不丢失、不重复,并且安全。
2-4 单点故障
物理环境、系统、实时处理平台、网络、应用等任何一个环节的不稳定,最终都可能对整体可用性造成影响。
2-5 其他
三、架构(粗略)
3-1 架构图总览
3-2 数据采集
数据采集作为大数据系统体系的第一环节尤为重要。有效的正确的收集数据才能最大限度的避免信息孤岛,让数据产出更多的价值。
相关图片已删除
我行的数据极其的多样化,首先得建立一套标准的数据采集方案,面向各个业务场景的埋点规范;建立一套高性能、高可靠性的传输系统,将数据从生产业务端传输到大数据系统;数据可以增量同步也可全量同步。
3-2-1 分布式消息队列
消息队列的两种模式:
\ | 点对点-Queue | 发布/订阅:Topic |
---|---|---|
概念 | 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息 | 消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息 |
最主要区别 | 消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。 | 和点对点方式不同,发布到topic的消息会可以被多个订阅者消费。(可持久化——解耦消息的发送者和消费者;kafka中,可以通过参数配置保留期限) |
Kafka
稳定版本:2.0.0 2018年7月28
1.简介
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统(还有一种消息中间件是点对点),它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
2.使用的公司
[见参考3]
- 应用场景:
-
考虑数据丢失。比如我们从某个数据源接受数据,但是数据从数据源流出的速度大于我们接受数据组件的处理速度,那么这种情况,就很有可能出现数据丢失;还有就是网络阻塞,机器宕机,也可能会造成数据丢失。而kafka处理数据的策略可以很好的解决这个问题
-
多订阅数据分发,kafka的消费者组,kafka的某个主题,可以让多个组件去订阅。比如我们某个系统出来的数据,可能多个子系统都会使用这些数据,那么使用kafka是个很不错的选择【比如对于同一份数据,我们需要有不同的动作,比如对该数据进行数据清洗挖掘信息,或者将该数据发往别的界面进行展示,等等。】(Kafka支持多个消费者从一个消息流上读取数据,而且消费者之间直不影响)
-
实时处理:收集处理流式数据(我们可以把数据库的更新发布到 Kafka 上,应用程序通过监控事件流来接收数据库的实时更新。)
-
日志收集: kafka可将多个日志服务器的数据聚合到一起,比如说文件服务器,hdfs。之后再对这些日志数据进行离线分析,或者放入全文检索系统中进行数据挖掘
-
应用程序指标,跟踪 CPU 使用率和应用性能等指标
-
行为跟踪:跟踪用户浏览页面、搜索及其他行为,以发布-订阅的模式实时记录到对应的topic里。那么这些结果被订阅者拿到后,就可以做进一步的实时处理,或实时监控,或放到hadoop/离线数据仓库里处理。(在领英,Kafka 最初的使用场景是跟踪用户的活动。这样一来就可以生成报告,为机器学习系统提供数据,更新搜索结果等)
RabbitMQ
稳定版本:3.7.7 2018年6月20日
1.简介
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议(Advanced Message Queue,高级消息队列协议)来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
RabbitMQ 最初起源于金融系统。
2.使用RabbitMQ的公司
[见参考4]
RocketMQ
【RocketMQ社区活跃度,我感觉远不如前两位】
稳定版本:4.3.1 2018年8月29日
1.简介
RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。
几种消息中间件的比较
[参考1]
3-2-2 日志收集
flume + kafka
1.flume简介
稳定版本:1.8.0 2017年8月4日
flume是一个高效的实时的分布式文件收集框架,也是apache的一个顶级项目,最初由Cloudera开发,生产中主要用来收集存入文件中的日志数据,数据源源不断的来,源源不断的处理。与kafka、Spark streaming、Storm联系比较紧密。三大组件,Source、Chanael、Sink。它的分布式不是传统的主从架构,而是说,它的分布式概念是说,它可以收集多台机器上的日志数据,每一台机器上,都可以部署一个flume客户端进行数据收集。收集数据后聚集数据、移动数据。Flume也是java编写的。服务器的数据,经过每一个Flume-agent收集数据到Source(从源端拿数据),封装到Event中,Event是Flume数据传输的基本单元。然后将数据放到Chanael(管道队列)的,然后数据放入Slink中,Sink