【中间件】 Kafka

1.先导知识:

  • 消息队列MQ(Message Queue): 将需要传输的数据临时(设置有效期)存放在队列中,进行存取消息
  • 消息队列中间件: 用来存储消息的中间件(组件)

2.消息队列的应用场景

异步处理

##### 为什么要使用消息队列?

* 比较耗时的操作放在其他系统中,通过消息队列将需要处理的消息进行存储,其他系统可以消费消息队列中的数据
###### 案例: 用户注册,后端一方面需要保存用户信息;另一方面需要发送短信,发送邮箱等需要连接第三方服务,需要额外等待一段时间

* ![](https://i-blog.csdnimg.cn/direct/487dae602fad4e049d6e386c1b47bd33.png)
##### 常见的异步处理:

* 下载报表

系统解耦

##### 为什么要使用消息队列?

* 原先一个微服务调用接口去调用另一个微服务,耦合比较严重,只要接口发生变化就会导致系统不可用。使用消息队列可以进行解耦,第一个微服务可以将消息放入到消息队列,另外一个微服务去处理。
  • 案例:系统之间的依赖即耦合度

流量削峰

##### 为什么要使用消息队列?
    • 因为消息队列是低延迟,高可靠,高吞吐,可以应对大量并发。先接收大量用户的请求放到消息队列,再使用业务处理程序进行处理。

日志处理

##### 为什么要使用消息队列?

* 临时存储大量用户信息
  • 案例: 记录分析用户行为,手机大量的用户访问信息

3.生产者,消费者模型

1.点对点模式
###### 步骤:

* 消息生产者发送消息-\> MQ
* 消费者从MQ取出并消费
* MQ删除消息,不再存储
###### 特点:

* 单个消息只有一个消费者
* 生产者和消费者之间无依赖性。生产者发送消息之后,不管消费者是否在允许,都不影响发送者下次发送消息
* 消费者消费之后需要向MQ应答,方便队列删除消息
2.发布订阅模式
###### 步骤:

* 单个消息可以有多个订阅者
* 发布者和订阅者之间有时间依赖性。针对某个topic的订阅者,它必须创建一个订阅者之后,才能消费消息。
* 订阅者需要提前订阅该topic,并保持在线运行

4.Kafka

是什么?
  • Apache 软件基金会开发的一个开源流,分布式流平台。
    • 分布式的流平台的3个关键能力:发布和订阅数据流;以容错的持久化方式存储数据流;处理数据流
为什么用Kafka?
  • 支持生产者,消费者模型
  • 单机吞吐量是十万级
  • 消息延迟是毫秒级
  • 分布式可用型性高
  • 消息理论不会丢失
  • 支持事务
应用场景:
  • 建立实时数据管道,在系统/应用程序之间获取数据。
  • 构建实时流应用程序,转换/响应数据流
KafkaTool 图形界面工具
  • 是一个用于管理和监控 Apache Kafka 集群的图形界面工具
  • 官方网站: Offset Explorer
基本操作
  • 创建主题topic(实际工作中给开发要topic)类似Mysql的表
  • 生产者生产消息(以key,value键值对)到Kafka的topic中
  • 从Kafka topic取消息进行消费
    • 一个消费组中包含多个消费者,可以共同消费topic中的数据
    • 一个分区只能被一个消费者消费
Kafka幂等性
Kafkas生产者的分区写入策略
###### 轮询分区(默认)

* ![](https://i-blog.csdnimg.cn/direct/1cbee190efcf4eedb2c7b093bf57607f.png)
* **触发条件** : 生产消息时key为null
  * 
###### 按key分区

* ![](https://i-blog.csdnimg.cn/direct/b56e697b34eb4884b443468e1d628787.png)
* 触发条件: 生产消息时有key会根据分区数 按模运算
###### 自定义分区
###### 写入策略会存在乱序问题:

* 生产者是有写入策略,如果topic有多个分区,就会根据策略分配到不同partiton中存储,全局是乱序的;如果topic只有一个分区,消息是有序的。
Kafka消费者的分区分配策略:
###### Range范围分配策略(默认)

* 按照topic维度,确保每个消费者消费的分区数量是均衡的

* ![](https://i-blog.csdnimg.cn/direct/ac36755f38484a019f568e45f80e72c5.png)
*

5.如何测试消息队列?

https://blog.csdn.net/weixin_46697247/article/details/144804334

相关推荐
道法自然,人法天1 小时前
分布式事务管理:使用Seata简化微服务事务处理
分布式·微服务·架构
m0_748245922 小时前
RabbitMQ高级特性----生产者确认机制
分布式·rabbitmq
千羽星弦3 小时前
kafka zookeeper 集群搭建
kafka
追风林3 小时前
mac 本地 docker 安装 kafka
macos·docker·kafka
austin流川枫7 小时前
Kafka如何配置确保dev开发不要消费test环境的消息
kafka
心存の思念8 小时前
分布式系统中分布式ID生成方案的技术详解
分布式
Double Point10 小时前
Java中LinkedBlockingQueue在异步处理Kafka数据中的应用
java·kafka·linq
青云交11 小时前
Java 大视界 -- 基于 Java 的大数据分布式数据库架构设计与实践(125)
java·大数据·分布式·分布式数据库·架构设计·数据处理·高可用性
biubiubiu070611 小时前
SpringBoot基础Kafka示例
spring boot·kafka·linq
AugustShuai11 小时前
阿里云Kafka分区清理
阿里云·kafka·云计算