Kafka入门


文章目录

  • Kafka入门
  • 一、简介
  • 1.1 消息队列简介
  • 1.1.1 什么是消息队列
  • 1.1.2 消息队列中间件
  • 1.1.3 消息队列应用场景
  • 1.1.3.1 异步处理
  • 1.1.3.2 系统解耦
  • 1.1.3.3 流量削峰
  • 1.1.3.4 日志处理(大数据领域)
  • 1.1.4 生产者、消费者模型
  • 1.1.5 消息队列的两种模式
  • 1.1.5.1 点对点模式
  • 1.1.5.2 发布订阅模式



一、简介

1.1 消息队列简介

1.1.1 什么是消息队列

消息队列:缩写:MQ,一中用来存储消息的队列;

代码如下(示例):

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

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

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

上述代码,创建了一个队列,往队列中添加了消息,然后又从队列中取出了一个消息;我们可简单将消息队列理解为将需要传输的数据保存在队列中

1.1.2 消息队列中间件

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

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

1.1.3 消息队列应用场景

1.1.3.1 异步处理

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

消息队列写入数据库 将消息写入消息队列_消息队列

1.1.3.2 系统解耦

消息队列写入数据库 将消息写入消息队列_消息队列_02

1.1.3.3 流量削峰

消息队列写入数据库 将消息写入消息队列_消息队列_03

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

大型电商网站,App等需要去分析用户的行为,要根据用户的行为来发现用户 喜好和活跃情况,需要在页面中收集大量的用户访问信息;

消息队列写入数据库 将消息写入消息队列_消息队列_04

1.1.4 生产者、消费者模型

java服务器武器开发,交互模型

消息队列写入数据库 将消息写入消息队列_中间件_05


JDBC访问Mysql 数据库,其交互模型:

消息队列写入数据库 将消息写入消息队列_消息队列写入数据库_06


它也是一种请求响应模型,只不过他不再是基于http协议,而是基于Mysql数据库通信协议;而我们如果基于消息中间件来编程,此时的交互模式:生产者,消费者;

消息队列写入数据库 将消息写入消息队列_中间件_07

1.1.5 消息队列的两种模式

1.1.5.1 点对点模式

消息队列写入数据库 将消息写入消息队列_分布式_08


消息发送者生产消息发送到队列中,然后接收者从消息队列中取出消息并且消费,消息被消费之后,队列中不再有存储;

点对点模式的特点:
每个消息只有一个生产者和接收者(消息一旦被消费,消息将不会在队列中);
发送者和接收者之间没有依赖性,发送者发送消息之后,不管有没接收者在运行,都不会影响到发送者下次发送消息;
接收者在接收消息之后需要队列成功应答,已方便队列删除消息;

1.1.5.2 发布订阅模式

消息队列写入数据库 将消息写入消息队列_分布式_09


发布/订阅模式特点:

每个消息可以有多个订阅者;

发布者和订阅者在时间上依赖性,针对某个主题的订阅者,他必须创建一个订阅者之后,才可以消费发布者的消息;

为了消费消息,订阅者需要提前订阅该主角,并且保持在线运行;