一、简介

(1)定义:Kafka是一种高吞吐量的分布式发布订阅消息系统,被设计成能高效处理大量实时数据,其特点是快速的、可拓展的、分布式的、分区的和可复制的
(2)消息系统作用:

  • 削峰 :用于承接超出业务系统处理能力的请求,使业务平稳运行。这能够大量节约成本,比如某些秒杀活动,并不是针对峰值设计容量。
  • 缓冲 :在服务层和缓慢的落地层作为缓冲层存在,作用与削峰类似,但主要用于服务内数据流转。比如批量短信发送。
  • 解耦 :项目尹始,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。
  • 冗余 :消息数据能够采用一对多的方式,供多个毫无关联的业务使用。
  • 健壮性 :消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。

在这里插入图片描述
(3)功能:

1)kafka不仅可以发布-订阅信息,还可以用于日志收集。
2)允许发布和记录数据流,可用于在不同系统之间传递数据。

(4)三层架构:Producer、Broker、Consumer
1)Producers:消息发布者,发布消息到Topics进程上。
2)Broker:服务代理,组成Kafka集群。
3)Consumers:订阅一个或多个话题,接受Broke发送的数据
4)Topics:消息的分类名
在这里插入图片描述

二、Topic

在这里插入图片描述

(1)消息的分类名
(2)Broker为每一个Topic维护一个分区日志(Partition)。
(3)每一个分区日志是一个有序的消息队列,消息连续的追加到分区日志上,这些消息是不能更改的。
(4)每个消息会分配一个ID号。
(5)Kafka集群保留所有发布消息,直到该消息过期。
(6)一个topics可以有多个分区,这些分区可以作为并行处理单元,这些分区日志被分配到多个服务器上处理。
(7)每个分区也会备份到多个Kafka集群的服务器上。
(8)Kafka为每个分区分配一个服务器作为Leader,处理分区的读写,为每个分区分配0个或多个服务器作为Follower,Follower为Leader中的服务区进行备份,一旦Leader宕机,其他某个Follower作为Leader。

三、Producers

(1)Producer直接发消息到Broker上的Leader Partition,不需要经过任何中介一系列的路由转发。
(2)Producer客户端控制消息被推送到哪些分区。方式:随机分配、随即负载均衡算法、指定一些分区算法。
(3)Kafka提供接口让用户实现自定义的分区。
(4)以Batch方式推送数据。Producer将消息在内存中累积到一定数量发送一个Batch请求。
(5)Producer可以异步、并行向Kafka发送数据,发送完消息后要返回一个Future响应,返回参数其中最重要的是Acks
(6)参数Acks代表Producer要求Leader分区收到确认的副本个数。Acks为0表示Producer不会等待Broker响应,Acks为1表示Producer等待Broker一个响应,Acks为-1表示Producer等待Broker全部响应。

四、Consumers

(1)消费者抽象有两种:Queuing、Publish-SubScribe。
(2)消费者使用相同的消费组名标识。
(3)每个主题的每条消息都会发送到某个实例消费者实例上,但是消费者实例需要订阅才能获取
(4)如果Consumers有同一个组名,那么Kafka相当于一个队列消息服务,各个Consumers均衡的消费响应分区上的数据。
(5)如果Consumers有不同的组名,那么Kafka相当于一个广播服务,他会把Topics中所有消息广播到每个Consumers。
在这里插入图片描述

五、push and pull

(1)Push:Priducer到Broker的过程,有数据就Push
(2)Pull:Consumer到Broker的过程,通过Consumer主动索取数据的。
(3)Broker决定消息推送速率,Consumer决定是否批量从Broker接受数据。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐