1. Kafka基本概念
- broker
- topic
- partitions
- topic
- client
- producer
- customer
- customer group
kafka系统 = M*producer + N*broker + K*customer + ZK集群
1.1. broker
1.1.1. log(消息最小单位)
broker是kafka队列服务,client是连接器。
kafka内部最小单位是使用log写入所有的消息,也就是有保存消息的功能。
并且一直保存,就算是消费了还是在kafka中,有些会将kafka作为存储来使用。
1.1.2. topic(主题)
Broker中还有一个概念topic(主题)。
所有的操作都基于topic来完成,发送者发送消息到topic,消费者从topic下消费消息。
1.1.2.1. partitions(分区)
Topic还有一个概念,partitions(分区)。
将topic下消息按照一定的分配方式,分配到不通的partition(从 0 开始标识partition)下。
一般默认是轮询的方式,也可以自定义分区方式。
因为broker可以多实例部署,多个broker可以分担同一个topic不同patition的内容,做到生产者的高吞吐。
1.1.2.2. replica
另外相同patition还可以有备份,实现高可用。(todo这里的概念还不是特别清晰,接下来需要进一步研究)
每个partition有多个replica复制份,做到消息的容灾能力。
leader replica- 提供服务
follower replica- 只备份不提供服务
- 故障转移使用
1.2. client
连接器。
Client连接后,可以生产数据,也可以消费数据。
1.2.1. producer生产者
通过创建topic时的分区,分区实现了生产者的高吞吐。
1.2.2. customer消费者
1.2.2.1. customer group
消费者是跟customer group走的。
一个customer group可以有多个customer,也可以只有一个。
customer group可以实现,并发消费,实现消费者,高吞吐。
customer group中的每个customer只能消费一个topic -> partition
1.2.2.2. Rebalance
当customer如果有一个消费实例挂掉后,kafka会自动的将其分配到活着的customer上。
也就是大名鼎鼎的Rebalance。看起来非常智能,但是其中还有很多BUG。
1.2.2.3. customer offset(消费者位移)
kafka消息是存储起来的,消费时有一个offset指针位移,一直往前推进。