前言
1、kafka是什么呢?
kafka传统定义:kafka是一个分布式的基于 发布/订阅模式 的 消息队列(Message Queue),主要应用于大数据实时处理领域。
Kafka最新定义:Kafka是一个开源的分布式事件流平台,用于高性能数据管道、流分析、数据集成和关键任务应用。
2、消息队列是什么呢?
消息队列是作为一个单独的中间件产品存在的,独立部署,当有大量数据集中访问服务器时,服务器无法同时受理,此时消息队列作为一个中间产品,进行一个负载,给这些消息排队,然后服务器再获取能够处理的消息进行处理,大大减轻了服务器的压力。
3、消息队列的应用场景
传统的消息队列的主要应用场景包括:缓存/消峰、解耦和异步通信。
缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况,就是服务器处理速度不够,通过中间的消息队列来降低服务器的压力。
解耦:允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。降低了代码的耦合性。
异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。就是执行过程不按照标准顺序来进行,而是类似于工厂,一个工人做完一部分后交给下面的工人,下面的工人不一定立刻对该产品进行再加工。
一、消息队列的两种模式
1、点对点模式
生产者生产消息,生产消息后传递到消息队列中。
消费者主动从消息队列中拉取消息,收到消息后主动删除消息队列中的消息。
producer:消息生产者,就是向消息队列发送消息的客户端。
consumer:消息消费者,向消息队列取消息的客户端。
Message Queue:消息队列,将生产者产生的消息进行排队,供给消费者取。
2、发布/订阅模式
发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类型,订阅者只接收感兴趣的消息。
1)消息队列不再局限于只有一个队列,而是可以有多个主题,每个主题对应了一个队列,消费者可以通过获取不同的主题的消息。
2)消费者消费数据后,不删除数据。
3)每个消费者相互独立,都可以消费到数据。
Topic:消息队列中的主题,就是一个队列,生产者和消费者面向的都是一个Topic。在发布/订阅模式中,我们将消息队列划分为了多个主题,每个主题也是一个队列,每个主题可以负责处理不同的数据,例如:点赞、收藏、打赏,每个对应了一个独立的主题,即独立的队列。
二、kafka的架构
Kafka是基于 发布/订阅模式 的消息队列,他在原本的发布/订阅模式的基础上新增了很多模型,让其结构更为健壮。所以我们在理解时要基于 发布/订阅模式 进行理解。
通过观察Kafka的基本架构图我们发现其本质结构是符合 发布/订阅模式 的结构的,在其原有的基础上进行了整合。
1、新增了broker的概念,每个broker就是一个Kafka的服务器。一个集群由多个broker组成。一个broker可以容纳多个topic。
2、为了方便扩展,并提高吞吐量,每个topic可以分为多个partition,每个partition可以放在不同的服务器上。
3、为了配合分区的设计,Kafka提出了消费者组的概念,组内每个消费者并行消费。
4、为了提高可用性,为每个partition增加了若干副本(follower),将副本放在其他的服务器中,当某个服务器宕机后不会导致其分区的不可用,此时启用其副本内容。
Kafka的分区实际上是存在于系统的不同存储位置,在应用时需要通过设置来进行分区调配。
总结
Kafka是作为中间件的存在,主要作用就是为服务器分担压力,在使用时通常考虑是否需要相应的分担,如果需要消息队列作为中间件分摊压力,都包含哪些类型,为其分配哪些主题,哪些分区,设置多少副本,要分别存储于哪些服务器中,服务器连接位置是否需要设置等等。