第四章、分布式消息队列
4.1 开源消息队列对比与分析
目前市面上存在 ZeroMQ ActiveMQ RockeMQ Kafka 等消息中间件,本人在工作中接触到比较多的是ActiveMQ和Kafka。
4.1.1 ZeroMQ
ZeroMQ 一种基于消息队列的多线程网络库,其对套接字类型 、连接处理、帧甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。
4.1.2 ActiveMQ
ActiveMQ 是开源的消息队列,实现了 JMS 1.1 规范的面向消息的中间件 MOM ),为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。 ActiveMQ 设计目的是提供标准的 、面向消息的、能够跨越多语言和多系统的应用集成消息通信中间件。
ActiveMQ 实现了JMS 标准并提供了很多附加特性,包括JMX管理、主从管理、消息通信组、消息有限级、订阅消息的延迟接收、接收者处理过慢、虚拟接收者、成熟的消息持久化技术、支持游标操作、支持消息转换、通过Apache的Camel支持EIP、使用镜像队列的形式轻松地对消息队列进行监控等。
4.1.3 RocketMQ
RocketMQ 是一种纯 Java 的、分布式的、队列模型的开源消息中间件,其前身是MetaQ,MetaQ 3.0发布时, 产品名称改为 RocketMQ,RocketMQ 能够保证严格的消息顺序,提供丰富的消息拉取模式、高效的订阅者水平扩展能力、实时的消息订阅机制、亿级消息堆积能力。
其具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。
RocketMQ 在阿里巴巴集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、 binglog 发等场景。
4.1.4 Kafka
组件概念:
- Broker:缓存代理, Kafka 集群中的一台或多台服务器统称为 Broker
- Topic:区分 Kafka 的消息类型,将不同的消息写到不同的 Kafka Topic中
- Partition:Topic物理上的分组,一个Topic可以分为多个 Partition ,每个Partition 都是一个有序的队列。 Partition中的每条消息都会被分配一个有序的 id(offset)
- Producer:消息的生产者
- Consumer:消息的消费者
- Consume Group:每一组消费者都有相同的 Group id这样可以保证多个消费者不重复消费同一条消息。
基本特性
- 高吞吐量、低延迟:Kafka 每秒可以处理几卡万条消息,它的延迟时间最低只有几毫秒。每个Topic都可以分多个Partition,Comsumer Group对Partition 进行消费操作。
- 可扩展性:Kafka集群支持热扩展,在消费能力不足的情况下可以增加分区。
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份,防止数据丢失。
- 容错性:允许集群中节点失败,若副本数为n,允许n-1个节点失败
- 高并发性:由于Kafka是顺序读/写磁盘的,使用NIO的网络模型支持数千个客户端同时读/写。
4.2 安装与使用
另外记录安装和使用
4.3 案例分析
4.3.1 曰志采集
投放引擎进行日志的记录,采集工具进行日志的实时采集,然后实时地将日志写入 Kafka。目前微博广告存在多个 Kafka 消息队列集群,针对不同的业务日志划分为不同的集群。日志收集使用了上百个 Kafka Topic。
4.3.2 实时结算
消息队列的作用是:当系统处理消费能力不足时,可以通过增加分区、增加部署节点来提高系统吞吐量。当由于流量增加造成系统故障时,上游的数据可以写入 Kafka 集群,这样即使下游的服务者机也不会造成结算数据的丢失,避免了对公司的收入造成 定的损失。 Kafka 让系统与系统之间大大降低了相合性。 Kafka 支持同步和异步的消息写入,并且可以配置消息写入模式来降低丢失消息的风险,因为对于结算系统来说,消息丢失率高就会造成收入的减少。
4.3.3 实时计算
大量的数据需要实时地通过消息队列传输 实时计算引擎通过实时消费 Kafka的数据进行计算。投放效果评估平台、微博广告实验平台同样需要实时地消费数据,进行投放算法的分析和反馈。
第五章、大数据存储技术
5.1 传统数据存储
2010 年以前的互联网公司的大型论坛、 SNS 、博客等互动产品的技术架构如下图所示:
其主要逻辑是: LVS 负责负载均衡;SquidNamish 承担图片、静态页的缓存功能; Nginx 用来做反向代理;Web 服务器处理业务逻辑:数据库存储业务数据; Cache 服务器主要用作对象缓存和列表缓存。其中存在大 能产生 access 日志的服务器,有效存储这些日志是一个难题。
5.1.2 传统存储的运行机制
日志接收服务器通过网络共享、rsy、网络传输等技术,将日志集中到几台磁盘容很大的大型主机上,大型主机上可能安装有 Oracle 或者 MySQL 关系型数据库,用 Python, Perl,shell 来处理这些日志,然后输出计算结果。
为了解决单点问题,通常的做法是使用 台具有相同配置的机器作为冷备,将两台机器相合在 起,如果其中一台机器发生了故障,则可以快速地使用另 台机器顶替,维持业务的连 性,这就是最简单的集群形式。
5.1.3 传统存储带来的问题
性能问题、成本激增、单点问题、数据准确性等四大问题
5.2 基于HDFS的分布式存储
5.2.1 分布式存储的定义
分布式存储就是指通过网络连接每台机器 使这些分散的存储资源构成一个虚拟的存储设备,数据分散在每台机器上的各个角落。与集中式存储技术不同,分布式存储技术并不是将数据存储在某个或多个特定节点上的。
5.3 HDFS分布式存储原理
请查看之前文章:HDFS技术原理
5.4 大数据环境下的数据仓库和分层存储技术
5.4.1 数据仓库
1. 数据仓库的特点
面向主题、集成、相对稳定、反映历史变化
2.数据仓库的组成
- 数据仓库数据库
- 数据抽取工具
- 元数据
元数据包括 数据源信息、数据转换的描述、数据仓库 对象 数据结构的定义、数据清理和数据更新使用的规则、源数据到目的数据的映射、用户访问权限、数据备份历史记录、数据导入历史记录、信息发布历史记录等。
商业元数据从商业业务的角度描述了数据仓库中的数据。商业元数据包括:业务问题的描述,以及所包含的数据、查询、报表。
元数据为访问数据仓库提供了一个信息目录,这个目录全面描述了数据仓库中都有什么数据、这些数据是怎么得到的,以及怎么访问这些数据 。它是数据 库运行和维护的中心, 数据仓库服务器利用它来存储和更新数据,用户通过它来了解和访问数据 - 访问工具
访问工具为用户访问数据仓库提供手段 访问工具有数据查询和报表工具、应用开发工具、联机分析处理( LAP )工具、数据挖掘工具。 - 数据集市( Data Market)
数据集市是为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据 ,也可称为部门数据或主题数据 。
5.4.2 数据仓库分层架构
数据仓库采用分层架构,分为缓冲层、操作数据层、明细数据层、汇总数据层和数据集市层。
- 数据缓冲层
概念: 用于存储每天的增量数据和变更数据
数据生成方式: 直接 Kafka 接收源数据或从业务库抽取,需要业务表每天生成 update、delete、insert 数据,只生成 insert 数据的业务表,数据直接接入操作数据层。
讨论方案: 只把 Kafka 消息直接接入缓冲层,对于其他有拉链数据的业务,也接入缓冲层。
日志删除方式: 只存储最近 天的数据。
表的Schema: 一般按天创建分区。 - 操作数据层( ODS, Operational Data Store )
概念: 数据仓库的细节数据层,对缓冲层数据进行沉淀,减小了抽取的复杂性。同时ODS的信息模型组织主要遵循企业业务事务处理的形式,将各种专业数据进行集中,操作数据层的粒度跟缓冲层一致。
数据生成方式: 部分数据直接来自 Kafka ,部分数据为缓冲层数据与历史数据的合成。
讨论方案: 每天把操作数据层的前天全量数据和缓冲层的昨天新数据合成一个新的数据表,覆盖旧表。
日志删除方式: 长久存储
表的Schema: 一般按天创建分区,没有时间概念的按具体业务选择分区字段。 - 明细数据层( DWD, Data Warehouse Detail )
概念: 数据仓库的明细数据层,同 的信息模型组织主要遵循企业业务事务处理的形式,将各种专业数据进行集中 明细数据层的粒度跟操作数据层一致,属于分析的公共资源。
数据生成方式: 在操作数据层清洗或 JO时维度表之后生成。
日志删除方式: 长久存储。
表Schema : 一般按天创建分区,没有时间概念的按具体业务选择分区宇段。
库与表命名: 库名为 dwd 表名, 初步考虑格式为 dwd 业务表名。
旧数据更新方式: 直接覆盖。 - 汇总数据层( DWS, Data Warehouse Summary )
概念: 在数据仓库中明细数据层和数据集市层之间的一个过渡层次,对明细数据层的生产数据进行轻度综合和汇总统计。汇总数据层与明细数据层的主要区别在于二者的应用领域不同,明细数据层的数据来源于生产型系统,并为满意一些不可预见的需求而进行沉淀;汇总数据层则面向分析型应用进行细粒度的统计和沉淀。
数据生成方式: 由明细数据层按照-定的业务需求生成轻度汇总表。明细数据层需要复杂清洗的数据 需要 MR 处理的数据也经过处理后接入汇总数据层。
日志、删除方式: 长久存储。
表Schema: 一般按天创建分区,没有时间概念的按具体业务选择分区字段。
库与表命名: 库名为 dws ;表名,初步考虑格式为 dws 日期业务表名。
旧数据更新方式: 直接覆盖。 - 数据集市层( DM, Data Market )
概念: 数据集市层又称为数据集市或宽表。按照业务划分,如流量、订单、用户等,生成宇段比较多的宽表,用于提供后续的业务查询、 OLAP 分析、数据分发等。
数据生成方式: 由汇总数据层和明细数据层的数据计算生成。
日志删除方式: 长久存储
表Schema: 一般按天创建分区,没有时间概念的按具体业务选择分区字段。
库与表命名: 库名为 dm;表名,初步考虑格式为 dm 业务表名。
旧数据更新方式: 直接覆盖。
5.4.3 分层存储的好处
- 数据结构更明确
- 数据血缘追踪 ,便于管理
- 复杂问题简单化
- 表共用,减少了重复计算
- 屏蔽原始数据的异常和业务变更的影响
智能运维从0搭建大规模分布式AIOps系统