来源:
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。