【kafka】kafka介绍 kafka和消息队列的区别 & kafka的系统架构

本文介绍了Kafka的基本概念,与ActiveMQ的区别,以及Kafka的高吞吐量和O(1)复杂度。Kafka作为一个分布式消息队列,采用Producer、Broker、Consumer结构,强调以Consumer为中心的消费模式。与ActiveMQ不同,Kafka不支持JMS标准,而是提供高效的批量处理和zero-copy机制。同时,文章还探讨了消息队列在解耦、异步和并行处理中的核心作用,以及Kafka的架构组件,包括Producer、Broker、Partition、Replication和Zookeeper的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka介绍

Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高吞吐量、低延迟的平台。

Kafka是一个分布式消息队列:生产者、消费者的功能。 它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。

Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。

无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性

kafka与ActiveMQ区别
  • activeMQ是一个标准的JMS(java message)java消息队列实现

    • 它是一个发布和订阅过程
      • 服务端主动把数据推送给消费者
  • kafka不是一个标准的JMS(java message)java消息队列实现,它是一个类似于JMS框架

    • 它是一个发布和拉取过程
      • 服务端不会主动把数据推送给消费者,需要消费者自己主动把数据拉取过来

    在这里插入图片描述

  • 架构模型方面

RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。

kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。

  • 吞吐量

kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。

rabbitMQ在吞吐量方面稍逊于kafka,他们的出发点不一样,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。

  • 可用性方面

rabbitMQ支持miror的queue,主queue失效,miror queue接管。kafka的broker支持主备模式。

  • 集群负载均衡方面

kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。

消息队列的作用

消息系统的核心作用就是三点:解耦,异步和并行
以用户注册的案列来说明消息系统的作用
用户注册的一般流程
在这里插入图片描述

问题:随着后端流程越来越多,每步流程都需要额外的耗费很多时间,从而会导致用户更长的等待延迟。

用户注册的并行执行

在这里插入图片描述
问题:系统并行的发起了4个请求,4个请求中,如果某一个环节执行1分钟,其他环节再快,用户也需要等待1分钟。如果其中一个环节异常之后,整个服务挂掉了。
在这里插入图片描述

用户注册的最终一致
在这里插入图片描述

  1. 保证主流程的正常执行、执行成功之后,发送MQ消息出去。
  2. 需要这个destination的其他系统通过消费数据再执行,最终一致。

在这里插入图片描述

kafka的架构模型

基于producer consumer topic broker 等的一个基本架构

在这里插入图片描述

  1. producer
    - 生产者,它会把数据源写入到kafka集群中
  2. broker
    - 一个broker就是kafka集群的节点,可以存放数据
  3. topic
    - 消息的主题,它是一类消息的集合
  4. partition
    - 分区概念
    - 也就是说一个topic有多个分区
  5. replication
    - 副本
    - 一个分区可以设置多个副本,副本保证数据的安全性
  6. segment
    - 每一个分区数据都很多segment,一个segment里面有2个文件,一个是.log文件,它是topic数据存储的文件,还有一个文件叫.index文件,它是.log文件索引文件。
  7. zookeeper
    - 通过zk保存kafka集群元数据信息,这些元数据信息包括:kafka集群地址、有哪些topic,以及每一个topic的分区数等等信息
  8. consumer
    - 消费者
    - 消费者去kafka集群中拉取数据然后进行消费
  9. offset
    - 消息的偏移量
    - 保存消息消费到哪里了,它会把消息消费的数据记录,当前这个记录信息叫做offset偏移量
    - 消息偏移量的保存有2种方式
    - 第一种: 可以kafka自己去保存(这个偏移量由整个kafka集群自带一个topic:__consumer_offsets)
    - 第二种:由zookeeper保存
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值