Kafka从入门到精通(一)简介

配套视频https://www.bilibili.com/video/BV19y4y1b7Uo?p=1

1. 简介

1.1 消息队列简介

1.1.1 什么是消息队列

消息队列,英文名:Message Queue,经常缩写为MQ。从字面上来理解,消息队列是一种用来存储消息的队列。来看一下下面的代码:

// 1. 创建一个保存字符串的队列
Queue<String> stringQueue = new LinkedList<String>();

// 2. 往消息队列中放入消息
stringQueue.offer("hello");

// 3. 从消息队列中取出消息并打印
System.out.println(stringQueue.poll());

上述代码,创建了一个队列,先往队列中添加了一个消息,然后又从队列中取出了一个消息。这说明了队列是可以用来存取消息的。

我们可以简单理解消息队列就是将需要传输的数据存放在队列中。很多时候消息队列不是一个永久性的存储,是作为临时存储存在的(设定一个期限:设置消息在MQ中保存10天)

1.1.2 消息队列中间件

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

目前市面上的消息队列有很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ等。

1.1.3 消息队列的应用场景

1.1.3.1 异步处理

可以将一些比较耗时的操作放在其他系统中,通过消息队列将需要进行处理的消息进行存储,其他系统可以消费消息队列中的数据

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

1.1.3.2 系统解耦

原先一个微服务是通过接口(HTTP)调用另一个微服务,这时候耦合很严重,只要接口发生变化就会导致系统不可用

使用消息队列可以将系统进行解耦合,现在第一个微服务可以将消息放入到消息队列中,另一个微服务可以从消息队列中把消息取出来进行处理。进行系统解耦
在这里插入图片描述

1.1.3.3 流量削峰

因为消息队列是低延迟、高可靠、高吞吐的,可以应对大量并发
在这里插入图片描述

1.1.3.4 日志处理(大数据领域常见)

可以使用消息队列作为临时存储,或者一种通信管道
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4k0bfTOS-1651996972747)(https://img-blog.csdnimg.c/838162e4847e4d5691de54717f5fc0a9.png)]

1.1.4 生产者、消费者模型

我们之前学习过Java的服务器开发,Java服务器端开发的交互模型是这样的:
在这里插入图片描述
我们之前也学习过使用Java JDBC来访问操作MySQL数据库,它的交互模型是这样的:
在这里插入图片描述

它也是一种请求响应模型,只不过它不再是基于http协议,而是基于MySQL数据库的通信协议。

而如果我们基于消息队列来编程,此时的交互模式成为:生产者、消费者模型。
在这里插入图片描述

生产者、消费者模型:

  1. 生产者负责将消息生产到MQ中
  2. 消费者负责从MQ中获取消息
  3. 生产者和消费者是解耦的,可能是生产者一个程序、消费者是另外一个程序

1.1.5 消息队列的两种模式

1.1.5.1 点对点模式

在这里插入图片描述

消息发送者生产消息发送到消息队列中,然后消息接收者从消息队列中取出并且消费消息。消息被消费以后,消息队列中不再有存储,所以消息接收者不可能消费到已经被消费的消息。

点对点模式特点:

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

在这里插入图片描述
发布/订阅模式特点:

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

发布订阅模式下,当发布者消息量很大时,显然单个订阅者的处理能力是不足的。实际上现实场景中是多个订阅者节点组成一个订阅组负载均衡消费topic消息即分组订阅,这样订阅者很容易实现消费能力线性扩展。可以看成是一个消费组是点对点的方式,多个消费组之间是发布订阅方式。kafka就是采用的这种模式。

1.2 Kafka简介

1.2.1 什么是Kafka

在这里插入图片描述

Kafka是由Apache软件基金会开发的一个开源流平台,由Scala和Java编写。Kafka的Apache官网是这样介绍Kakfa的。

Apache Kafka是一个分布式流平台。一个分布式的流平台应该包含3点关键的能力:
1.发布和订阅流数据流,类似于消息队列或者是企业消息传递系统
2.以容错的持久化方式存储数据流
处理数据流

我们重点关键三个部分的关键词:

  1. Publish and subscribe:发布与订阅
  2. Store:存储
  3. Process:处理

1.2.2 Kafka的应用场景

我们通常将Apache Kafka用在两类程序(没太懂):

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

在这里插入图片描述
上图,我们可以看到:

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

1.2.3 Kafka诞生背景

kafka的诞生,是为了解决linkedin的数据管道问题,起初linkedin采用了ActiveMQ来进行数据交换,大约是在2010年前后,那时的ActiveMQ还远远无法满足linkedin对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,linkedin决定研发自己的消息传递系统,当时linkedin的首席架构师jay kreps便开始组织团队进行消息传递系统的研发。

提示:
1.Linkedin还是挺牛逼的
2.Kafka比ActiveMQ牛逼得多

1.3 Kafka的优势

在这里插入图片描述
在大数据技术领域,一些重要的组件、框架都支持Apache Kafka,不论成成熟度、社区、性能、可靠性,Kafka都是非常有竞争力的一款产品。

1.4 哪些公司在使用Kafka

1.5 Kafka生态圈介绍

1.6 Kafka版本

可以注意到Kafka的版本号为:kafka_2.12-2.4.1,因为kafka主要是使用scala语言开发的,2.12为scala的版本号,Kafka版本为2.4.1。http://kafka.apache.org/downloads可以查看到每个版本的发布时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值