消息队列及Kafka简介

本文介绍了消息队列的基本概念、应用场景和两种模式,包括点对点和发布订阅模式。重点讲解了Kafka作为分布式消息队列的特点,如高吞吐量、低延迟和分布式存储,并列举了其在大数据实时处理领域的常见应用。此外,对比了Kafka与其他消息队列的优劣势,强调了消息队列在系统解耦、可恢复性和异步处理等方面的重要作用。
摘要由CSDN通过智能技术生成



原文地址:https://program-park.github.io/2021/09/08/kafka_3/

前言

本文记录消息队列基本概念、使用场景,以及Kafka的简介,仅供学习参考。
文章部分内容来自黑马课件。

消息队列简介

消息队列(Message Queue),也就是我们常说的 MQ。从字面上来理解,消息队列是一种用来存储消息的队列。

消息队列中间件就是用来存储消息的软件(组件)。举个例子来理解,为了分析网站的用户行为,我们需要记录用户的访问日志。这些一条条的日志,可以看成是一条条的消息,我们可以将它们保存到消息队列中。将来有一些应用程序需要处理这些日志,就可以随时将这些消息取出来处理。
目前市面上的消息队列有很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ 等。

消息队列的应用场景

  • 异步处理

    • 电商网站中,新的用户注册时,需要将用户的信息保存到数据库中,同时还需要额外发送注册的邮件通知、以及短信注册码给用户。但因为发送邮件、发送注册短信需要连接外部的服务器,需要额外等待一段时间,此时,就可以使用消息队列来进行异步处理,从而实现快速响应。

    在这里插入图片描述

  • 系统解耦
    在这里插入图片描述

  • 流量削峰
    在这里插入图片描述

  • 日志处理
    在这里插入图片描述

生产者、消费者模型

Java服务器端开发的交互模型是这样的:
在这里插入图片描述
使用Java JDBC来访问操作 MySQL 数据库的交互模型是这样的:
在这里插入图片描述
这也是一种请求响应模型,只不过它不再是基于 http 协议,而是基于 MySQL 数据库的通信协议。
而如果我们基于消息队列来编程,此时的交互模式成为:生产者、消费者模型:
在这里插入图片描述

消息队列的两种模式

1. 点对点模式

在这里插入图片描述
消息发送者生产消息发送到消息队列中,然后消息接收者从消息队列中取出并且消费消息。消息被消费以后,消息队列中不再有存储,所以消息接收者不可能消费到已经被消费的消息。
消息队列支持存在多个消费者, 但是对一个消息而言, 只会有一个消费者可以消费。

点对点模式的特点:

  • 每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中)
  • 发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息
  • 接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息

2. 发布订阅模式

在这里插入图片描述
消息生产者(发布)将消息发布到消息队列中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到消息队列的消息会被所有订阅者消费。

发布/订阅模式特点:

  • 每个消息可以有多个订阅者
  • 发布者和订阅者之间有时间上的依赖性,针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息
  • 为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行

使用消息队列的好处

  • 解耦
    • 允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束
  • 可恢复性
    • 系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理
  • 缓冲
    • 有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
  • 灵活性、峰值处理能力
    • 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃
  • 异步通信
    • 很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

Kafka简介

Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),由 Scala 和 Java 编写,主要应用于大数据实时处理领域。

Apache Kafka是一个分布式流平台。一个分布式的流平台应该包含3点关键的能力(官网介绍):

  1. 发布和订阅流数据流,类似于消息队列或者是企业消息传递系统
  2. 以容错的持久化方式存储数据流
  3. 处理数据流

Kafka的应用场景

Kafka通常用在两类程序中:

  1. 建立实时数据管道,以可靠地在系统或应用程序之间获取数据
  2. 构建实时流应用程序,以转换或响应数据流

在这里插入图片描述
从上图可以看到:

  1. Producers:可以有很多的应用程序,将消息数据放入到Kafka集群中。
  2. Consumers:可以有很多的应用程序,将消息数据从Kafka集群中拉取出来。
  3. Connectors:Kafka的连接器可以将数据库中的数据导入到Kafka,也可以将Kafka的数据导出到
    数据库中。
  4. Stream Processors:流处理器可以Kafka中拉取数据,也可以将数据写入到Kafka中。

Kafka的优势

特性ActiveMQRabbitMQKafkaRocketMQ
所属社区/公司ApacheMozilla Public LicenseApacheApache/Ali
成熟度成熟成熟成熟比较成熟
生产者-消费者模式支持支持支持支持
发布-订阅支持支持支持支持
REQUEST-REPLY支持支持-支持
API完备性低(静态配置)
多语言支持支持,JAVA优先语言无关支持,JAVA优先支持
单机呑吐量万级(最差)万级十万级十万级(最高)
消息延迟-微秒级毫秒级-
可用性高(主从)高(主从)非常高(分布式)
消息丢失-理论上不会丢失-
消息重复-可控制理论上会有重复-
事务支持不支持支持支持
文档的完备性
提供快速入门
首次部署难度-
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大Null

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值