1.什么是Kafka?
- Kafka作为消息系统,是基于发布-订阅模型的消息系统;
-
Kafka 作为存储系统,能够存储和持续处理大型数据流;
- Kafka用做流处理,实时数据流平台;
2.总体架构
3.基本概念
3.1生产者Producer
生产者可以将数据发布到所选择的topic(主题)中。生产者负责将记录分配到topic的哪一个 partition(分区)中。可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数(例如:记录中的key)来完成。
3.2消费者Consumer
消费者使用一个 消费组 名称来进行标识,发布到topic中的每条记录被分配给订阅消费组中的一个消费者实例.消费者实例可以分布在多个进程中或者多个机器上。
3.3消费者组 ConsumerGroup
如果所有的消费者实例在同一消费组中,消息记录会负载平衡到每一个消费者实例.
如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程.
如图,这个 Kafka 集群有两台 server 的,四个分区(p0-p3)和两个消费者组。消费组A有两个消费者,消费组B有四个消费者。
3.3Broker
KafKa集群就是由一个或者多个KafKa实例构成,每一个KafKa实例称为代理(Broker),通常也称代理为KafKa服务器(KafKaServer)
3.4主题 Topic
Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
对于每一个topic, Kafka集群都会维持一个分区日志,如下所示:
3.5分区和副本(Partition&Replica)
KafKa将一组消息归纳为一个主题,而每个主题又被分为一个或者多个分区(Partition)。每个分区有一系列有序、不可变的消息组成,是一个有序队列;
每个分区在物理上对应一个文件夹,分区命令规则:主题名称—分区编号
分区编号从0开始。每个分区又有一至多个副本(Replica),分区的副本分布在集群的不同代理上,以提高可用性。
注意:
1.KafKa只能保证一个分区之内的消息的有序性,并不能保证跨分区消息的有序性。每条消息被追加到相应的分区中,是顺序写磁盘,效率非常高,这是KafKa高吞吐率的一个重要保证。
2.理论上,分区个数越多则吞吐量越高,但是这需要根据实际的环境和业务场景来决定。
3.kafka分区数存在着默认的上限值10000,超过此值会报错:“Too many open files”