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

kafka、RabbitMQ结构

Kafka 实现结构

Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流式应用程序。以下是 Kafka 的主要实现结构:

Producer
  • 生产者将消息发送到指定Topic中或指定Partition。

Broker
  • Kafka 集群由多个 Broker 组成,每个 Broker 是一个 Kafka 服务节点。

  • 一个Topic有多个Partition,每个Partition有多个副本,存储在不同的 Broker 上。

Consumer
  • 消费者可以组成消费者组,从 Kafka 的主题中读取消息,每个某分区仅能由消费者组中的一个消费者消费,防止重复消费并保证消息有序性。

  • 消费者通过Offset来记录消费进度,确保消息的顺序消费。

Topic
  • 主题是 Kafka 中消息的分类单位,生产者将消息发送到特定的主题。

  • 每个主题可以有多个分区,分区是 Kafka 实现高吞吐量和可扩展性的关键。

Partition
  • 分区是主题的逻辑分片,每个分区是一个有序的、不可变的消息序列。

  • 分区提高了 Kafka 的并发能力和数据存储能力,因为多个分区可以分布在不同的 Broker 上。

Offset
  • 偏移量是消费者在分区中读取消息的位置标记。

  • 消费者通过提交偏移量来记录消费进度,确保在故障恢复时能够从上次消费的位置继续消费。

Zookeeper
  • Kafka 使用 Zookeeper 来管理集群元数据,如主题、分区、Broker 的状态等。

  • Zookeeper 用于协调 Kafka 集群中的各个节点,确保集群的高可用性和一致性。

RabbitMQ 实现结构

RabbitMQ 基于 AMQP 协议实现。以下是 RabbitMQ 的主要实现结构:

Producer
  • 生产者是消息的发送方,负责将消息发送到 RabbitMQ 的交换器(Exchange)。

  • 生产者在发送消息时,通常会指定一个路由键(Routing Key)。

Exchange

交换器是消息的分发中心,负责将消息路由到一个或多个队列。RabbitMQ 提供了四种类型的交换器:

  • Direct Exchange:将消息路由到与路由键完全匹配的队列。

  • Fanout Exchange:将消息广播到所有与交换器绑定的队列,忽略路由键。

  • Topic Exchange:根据通配符匹配路由键,将消息路由到一个或多个队列。

  • Headers Exchange:根据消息头中的属性进行匹配,将消息路由到与消息头匹配的队列。

Queue
  • 队列是消息的存储区,用于存储生产者发送的消息。

  • 消费者从队列中读取消息并处理。

  • 队列可以绑定到一个或多个交换器,通过绑定键(Binding Key)来指定消息的路由规则。

Consumer
  • 消费者从队列中读取消息并处理。

  • 消费者可以通过手动或自动确认机制(ACK)来确认消息的处理结果。

Binding
  • 绑定是交换器和队列之间的关联关系,通过绑定键(Binding Key)来指定消息的路由规则。

  • 一个交换器可以绑定到多个队列,一个队列也可以绑定到多个交换器。

Routing Key
  • 路由键是生产者在发送消息时指定的字符串,用于交换器确定消息的路由规则。

  • 路由键需要与交换器类型和绑定键联合使用才能最终生效。

Virtual Host
  • 虚拟主机是 RabbitMQ 中的逻辑隔离单元,每个虚拟主机都有一套自己的交换器和队列。

  • 不同的用户可以在同一个 RabbitMQ 实例中创建自己的虚拟主机,实现资源隔离。

Connection 和 Channel
  • Connection:客户端与 RabbitMQ 服务器之间的 TCP 连接。

  • Channel:在 Connection 上创建的虚拟连接,用于减少创建 TCP 连接的数量。

  • 一个 Connection 可以创建多个 Channel,每个 Channel 都是独立的双向数据流通道。

总结

  • Kafka 主要用于高吞吐量、分布式的消息处理,适合大规模数据流的实时处理。

  • RabbitMQ 提供了丰富的消息路由功能,适合复杂的业务逻辑和多种消息分发模式。

http://www.dtcms.com/a/360535.html

相关文章:

  • Qt QNetworkAccessManager 简述及例程
  • 畅问AI-AI机器人对话平台
  • dayjs ​JavaScript 时间日期处理库
  • 力扣hot100:轮转数组(常规思路与三步反转讲解)(189)
  • C#基础(②音乐播发器MCI(Media Control Interface))
  • CMake⼯程指南-3
  • 手写MyBatis第45弹:动态代理在MyBatis插件内核是如何织入扩展逻辑的
  • Linux软件升级方法总结
  • CF每日3题(1500-1600)
  • 在windows系统下安装Docker Desktop后迁移镜像位置
  • 科普:requirements.txt 和 environment.yml
  • 【系统分析师】高分论文:论面向服务方法在信息系统开发中的应用
  • 一些八股总结
  • Langflow Agents 技术深度分析
  • OpenCL C 平台与设备
  • (附源码)基于Vue的教师档案管理系统的设计与实现
  • 【开题答辩全过程】以 基于Java的网络购物平台设计与实现为例,包含答辩的问题和答案
  • LeetCode 3665. 统计镜子反射路径数目
  • react-virtualized React 应用中高效渲染大型列表和表格数据的库
  • Synchronized 概述
  • 【LeetCode】18、四数之和
  • LeeCode 37. 解数独
  • 并发编程——10 CyclicBarrier的源码分析
  • Selenium 等待机制:编写稳定可靠的自动化脚本
  • spi总线
  • 7.2elementplus的表单布局与模式
  • MCP SDK 学习二
  • 艾体宝案例 | 数据驱动破局:DOMO 如何重塑宠物零售门店的生存法则
  • Python 2025:AI代理、Rust与异步编程的新时代
  • 张柏芝亮相林家谦演唱会 再次演绎《任何天气》