11月19日
先祭出原创的博客:https://blog.csdn.net/liyiming2017/article/details/82805479
1.一些概念:
a.kafka是一个分布式流处理平台,特性如下:
(1)可以让你分布和订阅流式信息。
(2)可以存储流式信息。
(3)可以再流式信息产生时就进行处理。
2.构成:
Producer:生产者
Brouker:代理,由一个leader代理和若干follower代理组成kafka集群。
leader代理负责与外部的通讯。
当leader代理死掉后,follower代理们会通过选举,选出新的leader。
Consumer:消费者,若干个消费者组成ConsumerGroup(消费群组)。
同一个组里的消费者可以并行消费同一个topic(主题)的消息。
若同一个主题需要被多次消费,可以设立多个消费群组来实现。
topic:主题,消息分类箱。生产者往里丢,消费者取走(消息订阅和发送都是基于某个topic)。
Kafka核心概念简介
a.分区:把topic分成若干个小队列。
每个分区都是有序且顺序不可变的记录集。
分区中的每一个记录都回分配一个id号来表示顺序。这个id叫offset,offset用来唯一标识分区中的每一条记录。
无分区时,一个topic只能一个消费者消费。
有分区时,有几个分区可以几个消费者同时消费。(n=n)
分区设计提升了kafka的吞吐量。
1.一个分区只能被同组的一个消费者消费。
2.同组的一个消费者可以消费多个分区。
3.消费效率最高的情况是:分区数=消费者数。
4.消费者数不能大于分区数。
5.消费者群可以认为是一个订阅者集群,其中每个消费者负责自己所消费的分区。
b.副本:每个分区的数据有多份副本,以此来保证kafka的高可用。
活跃的一个称为leader,其他的为follower。
1.topic下会划分多个分区,每个分区都有自己的副本,其中只有一个是leader副本,其他未follower副本。
2.消息进来时,会先存到leader副本里,然后再从leader副本复制到follower副本。只有复制全部完成时,消费者才可以消费此条消息。消费者的消费也是从leader副本里读取的。
3.若不同的分区的leader副本再kafka集群的代理上分布不均,就会造成负载不均衡。
而kafka通过轮算法保证leader副本时均匀分布在多个代理上。
轮询算法:把来自用户的请求轮流分配给内部的服务器,从服务器1开始,直到服务器N,然后重新开始循环。