《Spark大数据分析:核心概念、技术及实践》一1.4 消息系统

简介:
  本节书摘来自华章出版社《Spark大数据分析:核心概念、技术及实践》一书中的第1章,第1.4节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问云栖社区“华章计算机”公众号查看。


1.4 消息系统

数据通常从一个应用流向另一个。一个应用产生数据,而后被一个或多个其他应用使用。一般来讲,生成或发送数据的应用叫作生产者,接收数据的则叫作消费者。

有时候,产生数据的应用数量和使用数据的应用数量会出现不对称。比如,一个应用可以产生数据,而后被多个消费者使用。同样地,一个应用也可以使用来自多个生产者的数据。

有时候应用产生数据的速率和另一个应用使用数据的速率也会出现不对称。一个应用可能产生数据的速率快于消费者使用数据的速率。

4d76447e9e868561e7ace5aaab481fea6773de4a

从一个应用向另一个应用发送数据的简单方法就是把它们直接互连。然而,当生产者和消费者数量或数据生成速率和使用速率之间存在不对称时,这个方法就行不通了。另一个挑战是生产者和消费者之间的强耦合要求它们同时运行,或实现一个复杂的缓冲机制。因此,生产者和消费者之间直连无法扩展。

一个灵活且可扩展的解决方法是用一个消息代理或消息系统。应用无须直接互联,而是连接到消息代理或消息系统。这样的架构使在数据管道上添加生产者或消费者变得容易,也允许应用以不同速率来生成和使用数据。

本节讨论几个大数据应用广泛使用的消息系统。

1.4.1 Kafka

Kafka是一个分布式的消息系统或消息代理。准确来讲,它是一个分布式的、分块的、重复的提交日志服务,可以用来作为发布-订阅式消息系统。

Kafka的关键特性包括:高吞吐量、可扩展性和持久性。单个代理可以处理来自数以千计应用的每秒几百兆字节的读和写。可以通过向集群中增加更多节点来轻松扩容。关于持久性,它在硬盘上保存消息。

基于Kafka的架构中的关键实体包括:代理、生产者、消费者、主题和消息(见图1-6)。Kafka作为节点的集群来运行,每个节点叫作代理。通过Kafka发送的消息属于主题。把消息发布到Kafka主题的应用叫作生产者。消费者指的是订阅Kafka主题并处理消息的应用。

b11e54a21342b4c3d6d0626d873fac8791fa55b4

Kafka把一个主题分割为多个分块。每个分块是消息的一个有序而不可变的序列。新消息被追加到一个分块。给一个分块中的每一条消息指定一个唯一的连续标识符(叫作偏移量)。各个分块分布在Kafka集群的各个节点。另外,也复制它们以提供容错功能。主题的分割有助于扩展性和并行性。一个主题不需要限制于单台机器,它可以增长到任意大小。主题大小的增长可以通过向Kafka集群中添加更多节点来解决。

发布到Kafka集群的消息中,一个重要的属性是:它在一个可配置的周期内保留所有消息。即使消费者使用了一条消息,在所配置的间隔内消息依然可以获取它。更重要的是,Kafka的性能对于数据大小实际上保持恒定。

Kafka使用一个叫作消费者组的机制来同时支持队列和发布-订阅消息模型。把发布到一个主题的每条消息发送到每一个订阅的消费者组内的一个消费者。因此,如果订阅一个主题的所有消费者属于同一个消费者组,则Kafka作为一个队列消息系统而工作,每条消息只发送到一个消费者。另一方面,如果订阅一个主题的每一个消费者属于不同的消费者组,则Kafka作为一个发布-订阅消息系统而工作,把每条消息都广播到所有订阅某主题的消费者。

1.4.2 ZeroMQ

ZeroMQ是一个轻量级的高性能消息库。它用来实现消息队列和构建可扩展的并发和分布式消息驱动的应用。它没有利用以代理为中心的架构,尽管根据需要也可以用它来构建一个消息代理。它支持大多数现代语言和操作系统。

ZeroMQ的API仿效了标准的UNIX Socket API。应用之间通过套接字互相通信。不像标准的套接字,它支持N对N连接。一个ZeroMQ套接字代表一个异步的消息队列。它用一个简单的框架在线缆上传输离散消息。消息长度可以是0字节到数吉字节。

ZeroMQ不会对消息强加任何格式,而将消息当作二进制大对象blob。可以通过序列化协议来结合它,比如用Google的Protocol Buffers来发送和接收复杂的对象。

ZeroMQ在后台线程中异步实现I/O。它会自动处理物理连接设置、重连、消息传送重试和连接清除。另外,如果接收者不可达,它会将消息排队。当队列满额时,可以将其配置为阻止发送者或丢弃消息。因此,ZeroMQ提供了一个比标准套接字更高级的抽象来发送和接收消息,使创建消息分发应用更加简单,也使得应用间发送和接收消息的松耦合成为可能。

ZeroMQ库支持多个传输协议来进行线程间、进程间和跨网络的消息传递。对于相同进程内线程间的消息传递,它支持一种不涉及任何I/O的基于内存的消息传递机制。对于运行在相同机器上的进程之间的消息传统,它使用UNIX域或IPC套接字。这种情况下,所有通信都在操作系统内核中发生,而不会使用任何网络协议。ZeroMQ支持TCP协议来实现应用间通过网络进行通信。最后,它还支持PGM来多播消息。

ZeroMQ可用来实现不同的消息传递模式,包括:请求-应答、Router-Dealer、客户端-服务器、发布-订阅和管道。比如,可以用ZeroMQ创建一个发布-订阅模式的消息传递系统来从多个发布者发送数据到多个订阅者(见图1-7)。要实现这个模式,发布者应用会创建一个ZMQ_PUB类型的套接字。在这样的套接字上发送的消息以扇出(fan-out)的方式分布到所有已连接的订阅者。订阅者应用创建一个ZMQ_SUB类型的套接字来订阅来自发布者的数据,可以指定一个过滤器来获取想要的消息。同样地,也可以用ZeroMQ创建一个管道模式来分发数据到管道上排列的各个节点。应用创建ZMQ_PUSH类型的套接字来发送消息到下游应用,下游应用则需创建ZMQ_PULL类型的套接字。

fde66bc59f52f2c4df04ceab97420edb766a7c00


 

相关文章
|
12月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
数据可视化 搜索推荐 大数据
基于python大数据的北京旅游可视化及分析系统
本文深入探讨智慧旅游系统的背景、意义及研究现状,分析其在旅游业中的作用与发展潜力,介绍平台架构、技术创新、数据挖掘与服务优化等核心内容,并展示系统实现界面。
|
分布式计算 运维 搜索推荐
立马耀:通过阿里云 Serverless Spark 和 Milvus 构建高效向量检索系统,驱动个性化推荐业务
蝉妈妈旗下蝉选通过迁移到阿里云 Serverless Spark 及 Milvus,解决传统架构性能瓶颈与运维复杂性问题。新方案实现离线任务耗时减少40%、失败率降80%,Milvus 向量检索成本降低75%,支持更大规模数据处理,查询响应提速。
856 57
|
存储 数据可视化 数据挖掘
基于大数据的电影可视化、推荐与票房预测系统
本系统基于Python与Flask框架,结合Echarts等技术,实现电影数据的采集、存储与可视化展示。通过对票房、评分、评论等数据的分析,生成图表与词云,帮助用户直观理解电影市场趋势,支持决策制定与观影推荐,提升电影行业的数据分析能力与用户体验。
|
机器学习/深度学习 存储 分布式计算
ODPS驱动电商仓储革命:动态需求预测系统的落地实践
本方案基于ODPS构建“预测-仿真-决策”闭环系统,解决传统仓储中滞销积压与爆款缺货问题。通过动态特征工程、时空融合模型与库存仿真引擎,实现库存周转天数下降42%,缺货率下降65%,年损减少5000万以上,显著提升运营效率与GMV。
1244 1
|
数据采集 搜索推荐 算法
大数据信息SEO优化系统软件
大数据信息SEO优化系统软件(V1.0)是公司基于“驱动企业价值持续增长”战略,针对企业网站、电商平台及内容营销场景深度定制的智能化搜索引擎优化解决方案。该软件以“提升搜索排名、精准引流获客”为核心目标,通过整合全网数据采集、智能关键词挖掘、内容质量分析、外链健康度监测等功能模块,为企业构建从数据洞察到策略落地的全链路SEO优化体系,助力品牌高效提升搜索引擎曝光度,实现从流量获取到商业转化的价值升级。
377 2
|
12月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。