一、简介
(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接受数据。