学习笔记
还是对蔡老师的课程知识点进行巩固~
指的是将多个不同的处理模块连接在一起,最后得出一个自己需要的结果的有向无环图(Directed Acyclic Graph/DAG)的系统。
这个是流数据处理中很流行的设计模式,也经常被成为 Pub/Sub。
消息: 在分布式架构中,各个组件(Component)需要相互联系沟通,组件可以是后台的数据库,也可以是前端的浏览器,而各个组件之间就是依靠消息来相互通讯的,消息可以是任意格式。消息队列: 消息队列在Pub/Sub中起到的作用就是一个持久化缓冲(Durable Buffer)的作用。消息的发送方可以发送任意消息到这个消息队列中,消息队列在接受到消息之后就会将消息保存好,知道消息的接收方确认自己收到消息了,才删除。
基础概念: 发布/订阅模式指的是消息的发送方可以将消息异步地发送给一个系统中不同的组件,而无需知道接收方是谁。发送方被称之为发布者(Publisher),接收方则称作订阅者(Subscriber)。
优点:
缺点:
适用场景:
CAP这个概念是由埃里克·布鲁尔博士在2000年的ACM年度学术研讨会上提出的,发布了论文《Brewer's conjecture and the Feasibility of Consistent,Available,Partition-Tolerant Web Services》。
简单来说,论文中证明了:
在任意的分布式系统中,一致性(Consistency),可用性(Availability)和分区容错性(Partition-tolerance)这3种属性最多只能同时存在两个属性。
下面简单介绍一下这3个属性:
Kafka0.8版本引入了Replication,它通过将数据复制到不同的节点上,从而增强了数据在系统中的持久性(Durability)和可用性(Availability),系统设计所有的数据日志存储在同一个数据中心,也就是说出现网络分区错误的可能性很小。
在具体的架构中,中Kafka数据副本(Data Replication)的设计中,先通过Zookeeper选举出一个领导者节点(Leader)。这个领导者节点负责维护一组被称作同步数据副本(In-sync-replica)的节点,所有的数据写入都必须在这个领导者节点中记录。
正常情况下,领导者节点在收到请求后先本地保存好,然后发消息通知副本进行存储,并回复用户写入成功,即便所有的Replication都挂了,也还有领导者节点可以用,万一连领导者节点都挂了,这个时候Zookeeper会重新区寻找健康的服务器节点当选新的领导者节点。
Lambda架构可以使得开发人员构建大规模分布式数据处理系统,它具有很好的饿灵活性和可扩展性,对硬件故障和人为失误有很好的容错性。
Lambda架构总共由三层系统组成:批处理层(Batch Layer)、速度处理层(Speed Layer)、服务层(Serving Layer)。
不同的系统层都有着自己的"职责":
Smart Parking是一个智能的停车APP,它通过大规模数据所构建的视图推荐最近的车位给用户,如何应用Lambda架构呢?
批处理层: 把停车场的历史数据或者每隔半小时拿到的停车位数据,构建一个预测模式,预测剩余车位。
速度处理层: 聚集所有用户的GPS数据,再次建立一套预测模型来预测附近停车场位置的拥挤程度。
服务层: 将批处理层和速度处理层得到的预测分数进行结合,并将最高分数的停车场推荐给用户,从而提高推荐的准确率。
为什么会存在Kappa架构呢,是因为Lambda架构也有不足之处,简单来说就是维护复杂,因为Lambda架构中有两个完全不同的分布式系统,一个是批处理一个是流处理的,所以它们的语法不一样,但又得保证它们的逻辑上要产生相同的结果输出给服务层(比如部署Apache Hadoop到批处理层,部署Apache Flink到速度层)。
Kappa架构就是改进了其中某一层的架构,让它具有另外一层架构的特性。
下面用Apache Kafka流处理平台来讲解:
先前我们有说过,Apache Kafka平台具有永久保存数据日志的功能,所以我们可以删除批处理层,只是保留流处理层。
Step1: 部署Apache Kafka,并设置数据日志的保留期(Retention Period),一般可以设置为Forever;
Step2: 重新启动一个Apache Kafka作业实例,这个实例重头开始计算保存好的历史数据,并将结果输出到一个新的数据视图中;
Step3: 当这个心的数据视图处理过的数据进度赶上了旧的数据视图时,我们的应用便可以切换到从新的数据视图中读取;
Step4: 停止旧版本的作业实例,并删除旧的数据视图。
其架构如下图所示: