Broker(server)
一台Kafka服务器就是一个booker,一个集群由多个broker组成
Topic(主题)
topic就是数据主题,Kafka建议根据业务系统将不同的数据存放到不同的topic中,Kafka中的topic总是多订阅者模式,一个topic可以拥有多个消费者来订阅它的数据,一个大的topic可以分布存储在多个Kafka broker中。topic可以类比为数据库中的库。
Partition(分区)
每个topic可以有多个分区,通过分区的设计,topic可以不断进行扩展。即一个topic的多个分区分布式存储在多个broker
此外通过分区还可以让一个topic被多个cinsumer进行消费。以达到并行处理,分区类似于数据库中的表。
Kafka只保证按一个partition中的顺序将消息发给consuner,不保证一个topic的整体(多个partition间)的顺序。
Offset (偏移量)
数据会按照时间顺序被不断的追加到分区的一个结构化的commit log中,每个分区中存储的记录都是有序的,且顺序不可变。
这个顺序是通过一个称之为offset的id来唯一标识,因此可以认为offset是有序且不可变的
在每一个消费者端,会唯一保存的元数据是offset(偏移量),即消费在log中的位置,偏移量由消费者所控制,通常在读取记录后,消费者会以线性的方式增加偏移量,但是实际上,由于这个位置由消费者所控制,所以消费者可以采用任何顺序来消费记录。(例如,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从‘现在’开始消费)。
Kafka的消费者是非常廉价的,消费者的增加减少,对集群和其他消费者都没有多大的影响。
持久化
Kafka集群保留所有发布的记录,无论是否已被消费,并配置一个可配置参数保留期限来控制
副本机制
日志的分区partition(分布)在Kafka集群的服务器上。每个服务器在处理数据和请求时共享这些分区,每一个分区
都会在已配置的服务器上进行备份,确保容错性。
每一台分区都有一个server作为leadre,零台或多台server作为follwers。leaderserver处理一切对partition分区的读写请求,而follwers只需被动的同步leader上的数据。当leader宕机了,followers中的一台服务器会自动成为新的leader。通过这种机制,既可以保证数据有多个副本,也实现了一个高可用机制。
每个分区的leader和follower一般会错在不同的brokeer
Producer
消息生产者,就是向Kafka broder发消息的客户端,生产者负责将记录分配到topic的指定partition(分区)中。
Consumer
消息消费者,向Kafka broker取消息的客户端。每个消费者都要维护自己读取数据的offset。
Consumer Group
每个消费者都会使用一个消费组名称来进行标识。同一组中的不同消费者实例,可以分布在多个进程或多个机器上。
如果所有的消费者在同一消费组中,消息记录会负载平衡到每一个消费者实例(单播),及每个消费者可以读取一个topic的不同分区。
如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程(广播)
如果要实现广播,只要每个consumer有一个独立的组就可以了,要实现单播只要所有的consumer在同一个组
一个topic可以有多个consumer group。topic的消息会复制(概念)到所有的GG,但每个partition 只会把消息发给该GG中的一个consumer。