kafaka主要的功能就是提供一套完备的消息发布与订阅的解决方案。
主题(Topic):发布订阅的对象是主题。每个业务,每个消息或者是每类数据都能创建专属的主题。
生产者(Producer):向主题发布消息的客户端叫做生产者。生产者程序通常持续不断的向一个或者多个主题发送消息。
消费者(Consumer):订阅这些主题的客户端程序叫做消费者。消费者可以同时订阅多个主题的消息。
客户端(Client):生产者消费者都被称为客户端。
服务端:kafaka的服务端由被称为Broker的的服务进程构成。一个集群由多个Broker组成。
Broker:负责处理客户端发过来的请求,以及对消息进行持久化。多个Broker可以放在同一台机器上,但是更常见的做法是将不同的Broker分散运行在不同的机器上,这样做的主要目的就是,如果集群中有一台机器宕机,即使它上面的所有Broker进程都挂掉了,其他机器上的Broker也依然可以正常的向外提供服务,这就是kafaka高可用的手段之一。
分区(Partitioning):将每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志。生产者生产的每条消息只会被发送到一个分区中,也就是说如果向一个双分区的主题中发送一条消息,那么这条消息要么在0区,要么在1区。所以kafaka的分区编号是从0开始的。
副本(Replication):副本实在分区这个层级定义的,意思就是说副本是对每个分区的备份。备份的思想很简单,就是把相同的数据拷贝到多台机器上,而这些数据相同拷贝在kafaka中就被称为副本(Replica)。副本的数量是可配置的。副本有不同的角色,分为:领导者读本(Leader Replica)和追随者副本(Follow Replica)。领导者副本对外提供服务,领导者服务只是被动的追随领导者副本而已,不能与外界进行交互。[副本的工作机制:生产者向领导者副本写消息;消费者从领导者副本读取消息。至于追随者所作的事情就是:向领导者副本发送请求看,请求领导者把最新生产的消息发送给它,这样它就能保证与领导者的同步]
消息位移(offset):生产者向分区写入消息,每个消息在分区中的位置信息有一个叫(Offset)的数据来表征。分区位移总是从0开始,依次累加。
kafaka的三层消息架构:
1:第一层是主题层,一个主题可以配置多个分区,一个分区可以配置多个副本
2:第二层是分区层,每个分区可以有多个副本,只有一个副本充当领导者副本的角色,对外提供服务。其它副本都是追随者副本,只提供数据的冗余只用。
3:第三层是消息层。分区中包含消息,每条消息在分区中都有对应的位移,位移从0开始,一次递增,一个消息只能存在于一个分区中。
4:客户端只能和分区中的领导者副本进行交互
消费者组:多个消费者实例组成一个消费者组来消费一组主题。这组主题中的每个分区都只会被一个消费者实例消费,其他消费者实例不能消费它。[引入消费者组的意义:主要是提升消费者的吞吐量,多个消费者实例同时消费,加速整个消费者端的吞吐量(TPS:每秒钟request/事务 数量)]
重平衡(Rebalance):消费者组内的实例不仅可以“瓜分”主题中的消息,而且还可以彼此协助。假如组内有一个消费者实例挂了,那么kafaka能够自动检测到,并将这个实例之前负责的分区分配给其他的消费者,这就是重平衡。
消费者位移(Consumer Offset):每个消费者都要记录在消费过程中,消费到那个分区中的哪个位置(一个消费者可能会消费一个或者多个分片)。