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指针位移,一直往前推进。