【Kafka学习笔记3】Kafka的基本概念
来源:
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
。