当前位置: 首页 > ds >正文

【kafka】消息模型与工作原理详解

Kafka 技术介绍

1.1 概述

Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,最初由 LinkedIn 公司开发,并于 2011 年开源。它以高吞吐量、可扩展性、持久性和容错性著称,被广泛应用于日志收集、消息系统、用户活动跟踪、运营指标监控、流式处理等场景。Kafka 能够处理海量数据,并使数据能够被多个消费者同时读取,在大数据生态系统中占据着重要地位。

1.2 消息系统

消息系统是一种通信机制,允许不同的应用程序之间进行异步通信,通过消息队列实现消息的发送和接收。消息系统主要有两种消息传递模式:

1.2.1 点对点消息传递模式

在点对点模式中,消息生产者发送消息到一个特定的队列,消息消费者从该队列中获取消息。每个消息只能被一个消费者消费,当一个消费者读取消息后,该消息就从队列中移除。这种模式适用于任务分配、请求响应等场景,确保消息的唯一处理。

1.2.2 发布 - 订阅消息传递模式

发布 - 订阅模式下,消息生产者(发布者)将消息发送到主题(Topic),多个消息消费者(订阅者)可以订阅同一个主题。每个发布到主题的消息都会被发送给所有订阅该主题的消费者,支持一对多的通信,常用于实时数据推送、事件通知等场景。

1.3 Kafka 的消息模型

Kafka 采用基于主题(Topic)的发布 - 订阅消息模型。主题是 Kafka 中消息的逻辑分类,消息生产者将消息发布到特定的主题,而消息消费者则通过订阅主题来获取消息。每个主题可以有多个分区(Partition),分区是物理上的概念,它将主题的数据进行分布式存储,提高了 Kafka 的并发处理能力和可扩展性。消费者组(Consumer Group)是 Kafka 消费者的逻辑分组,同一消费者组内的多个消费者共同消费一个主题的消息,每个分区只能被组内的一个消费者消费,从而实现负载均衡;不同消费者组之间互不影响,可以同时消费同一个主题的消息,满足不同的业务需求。

1.4 Kafka 的存储模型

Kafka 的消息以日志的形式存储在磁盘上,每个分区对应一个日志文件。日志文件被划分为多个大小固定的段(Segment),每个段包含一定数量的消息。这种分段存储方式便于消息的追加写入和查询,同时也有利于日志文件的管理和清理。Kafka 采用顺序写入磁盘的方式,极大地提高了写入性能;对于读取操作,通过索引文件快速定位消息位置,保证了高效的读取效率。此外,Kafka 还支持消息的持久化存储和副本机制,通过配置副本因子,可以将消息复制到多个 Broker 节点上,提高数据的可靠性和容错性。

1.5 Kafka 的架构原理

Kafka 架构主要由生产者(Producer)、消费者(Consumer)、Broker(代理节点)和 Zookeeper 组成。Producer 负责将消息发送到 Kafka 集群的指定主题;Consumer 通过订阅主题来消费消息;Broker 是 Kafka 集群的核心节点,负责存储和管理消息,处理生产者和消费者的请求;Zookeeper 则用于管理 Kafka 集群的元数据,如 Broker 节点的注册与发现、主题和分区的管理、消费者组的协调等,保证了集群的高可用性和一致性。多个 Broker 节点可以组成一个 Kafka 集群,通过分布式存储和处理,实现高吞吐量和水平扩展能力。

1.6 Kafka 工作流程分析

1.6.1 发送数据

生产者首先将消息进行序列化处理,然后根据消息的分区策略(如默认的轮询策略、基于消息键的哈希策略等)确定消息要发送到的分区。接着,生产者将消息发送到对应分区所在的 Broker 节点,Broker 接收到消息后,将其追加到分区对应的日志文件末尾,并向生产者返回确认信息,告知消息是否成功接收。

1.6.2 保存数据

Broker 接收到消息后,按照存储模型将消息持久化到磁盘的日志文件中。通过分段存储和索引机制,快速定位和管理消息。同时,根据配置的副本策略,将消息复制到其他 Broker 节点的副本分区上,保证数据的可靠性和容错性。在这个过程中,Kafka 会定期对日志文件进行清理和压缩,删除过期或已被消费的消息,释放磁盘空间。

1.6.3 消费数据

消费者通过向 Zookeeper 注册,获取所订阅主题的分区信息和消费者组的相关元数据。然后,消费者根据分区分配策略(如 RangeAssignor、RoundRobinAssignor 等)确定自己要消费的分区。消费者从分配到的分区中拉取消息进行消费,并定期向 Zookeeper 提交消费偏移量(Offset),记录自己已经消费到的位置。当消费者出现故障或重启时,可以根据消费偏移量继续从上次消费的位置恢复消费,保证消息消费的连续性和准确性。

1.7 Kafka 与其他主流消息中间件对比

对比维度

Kafka

RabbitMQ

ActiveMQ

RocketMQ

吞吐量

高,适合处理大规模消息流

相对较低

相对较低

较高

扩展性

良好,支持水平扩展

较好,但扩展性略逊于 Kafka

一般,扩展性有限

良好,可通过集群扩展

功能丰富性

侧重于消息流处理

功能丰富,支持多种消息协议和复杂路由策略

功能较为传统

支持分布式事务、消息顺序性等高级功能

消息传递模式

基于主题的发布 - 订阅模式

支持点对点和发布 - 订阅模式,路由灵活

支持多种消息传递模式

支持发布 - 订阅模式,可保证消息顺序

性能优势

顺序写入磁盘,读写性能高效

灵活性高,但性能受复杂配置影响

性能一般,适用于小型项目

在事务和顺序消息处理上性能突出

架构特点

分布式架构,依赖 Zookeeper 管理元数据

支持分布式,架构相对复杂

支持多种部署方式,架构较传统

分布式架构,高可用设计

容错性

通过副本机制保证数据可靠性

具备一定容错能力

容错性一般

高可用架构,容错性强

应用场景

日志收集、实时数据处理、流式计算

企业级应用,对消息处理逻辑要求高的场景

传统企业消息传递,小型项目

金融领域等对消息可靠性和顺序性要求严格的场景

开源社区生态

活跃,生态丰富

较活跃

活跃度一般

活跃,有阿里等大厂支持

http://www.xdnf.cn/news/13734.html

相关文章:

  • 如何抓取DP_AUX辅助通道数据
  • 在代码中使用uView里calendar中的Slot, tooltip 插槽
  • SQL 注入(SQL Injection)
  • UE5 学习系类(七)导入bridge资产包
  • CodeForces 228D. Zigzag
  • Master PDF Editor:全能PDF编辑工具
  • ElasticSearch聚合查询从15秒到1.2秒的深度优化实践
  • MySQL表的增删改查(基础)
  • 最新华为 HCIP-Datacom(H12-821)
  • ONLYOFFICE 协作空间 企业版使用秘籍-1.如何使用外部存储
  • 大疆相机元数据说明
  • CLIP多模态模型详解
  • Golang SSH握手过程中,报错跟客户端在算法签名上不匹配
  • 3-16单元格区域尺寸调整(发货单记录保存-方法2)学习笔记
  • 金蝶云星空·旗舰版与领星:赋能跨境电商的业财一体化解决方案
  • 麒麟系统自定义快捷键关机
  • day6补 cpp:c++输入输出流,流的四种状态,标准输入输出流
  • DeepSpeed 是一个深度学习优化库,使分布式训练和推理变得简单、高效和有效
  • 黑马python(五)
  • Java项目:基于SSM框架实现的劳务外包管理系统【ssm+B/S架构+源码+数据库+毕业论文】
  • 芯片金属层M1、M2区别
  • 一站式二维码解决方案:解析其生成+解码+个性化定制的技术实现路径
  • 【Dv3Admin】系统视图用户登录API文件解析
  • 【Axure高保真原型】中继器表格更多操作
  • C#winform多选框代码
  • 现代数据工程实践:基于Dagster的ETL架构设计与实现
  • 进程信号之sigaction系统调用
  • 【技术支持】Android11 中获取应用列表
  • 商城系统源码加密与不加密(开源)的区别
  • JavaEE-Maven