来源:
1、《Apache Kafka实战》胡夕 著
2、Kafka官方文档
1、kafka
是什么
kafka
既是消息引擎,也是一个分布式流式处理平台。
kafka
的处理流程概括起来如下图:
kafka
是一个集群- 依托
zookeeper
进行服务的协调管理 kafka
能够接收生产者发布的消息到topic
中,并由多个消费者订阅这些topic
kafka
集群将流数据存储在一群叫做topic
的结构中,每个记录由一个键、一个值、一个时间戳组成kafka
能够对流数据进行处理kafka
能够以容错、持久化的方式储存流式数据- 官方采用
broker
代表Kafka
服务器
2、消息
Kafka
中的消息是一个结构化的数据,有很多字段,包括管理消息的元数据、消息键、消息体。
Kafka
使用紧凑的 **二进制字节数组 ** 保存消息,没有多余的比特位浪费。
Kafka
的消息格式经历了V0
、V1
、V2
三个版本的演变。
…待补充
3、topic
topic
—— 主题。
topic
只是一个逻辑概念,代表了一类消息,也可以理解为消息发送的目的地。
一个topic
可以被多个消费者订阅。
4、partition
partition
—— 分区。
Kafka
通过partition
来分散负载。
一个topic
由多个partition
组成,每个partition
都有自己的序列号,从0
开始。
只能在每个partition
的尾部追加新的消息,每条消息都会被分配一个唯一的序号,叫做offset
,值是从0
递增的整数。
5、offset
offset
—— 位移。
partition
下的每条消息都会被分配一个唯一的offset
值。
因此,Kafka
中的每一条消息的位置其实就是一个<topic, partition, offset>
三元组,通过这个三元组,我们可以在Kafka
集群中找到唯一的那条消息。
6、replica
replica
—— 副本。
Kafka
集群是分布式的系统,为了实现高可靠性,采用冗余机制,保存一条消息为多个副本。
replica
存在的唯一目的就是防止数据丢失。
replica
分为两类:(1)leader replica
(领导者副本)、(2)follower replica
(追随者副本)。
7、leader和follower
Kafka
的副本分为leader
和follower
两类。
只有leader
对外提供服务,所有的follower
只是被动地从leader
获取数据,保持和leader
同步。
一旦leader
宕机,立即会有一个follower
被选举为leader
接替它的工作。
Kafka
会保证同一个partition
下的多个replica
不会分配到同一个broker
上面。
8、ISR
ISR
—— in-sync replica
,也就是和leader
保持同步的replica
集合,通常情况下是包含leader
在内的。
Kafka
为partition
动态维护一个replica
集合。该集合中的所有replica
保存的消息日志都与leader
保持同步状态。只有这个集合中的replica
才能被选举为leader
,也只有该集合中的所有replica
都接收到了同一条消息,Kafka
才会将该消息置为 “已提交” 状态,即认为这条消息发送成功。
Kafka
会保证:如果这个集合中至少存活一个replica
,那么那些 “已提交” 的消息就不会丢失。
Kafka
会动态地维护该集合。当其中一些replica
滞后于leader
状态一定程度之后,会被 “踢出” 这个ISR
;而当这些replica
的状态重新 “追上” leader
之后,由会被 “加入” 这个ISR
。