什么是Kafka(基本概念)
Kafka起初是一个LinkedIn公司采用Scala语言开发的一个多分区、多副本且基于ZooKeeper协调的分布式消息系统。
特点:
- 高吞吐;
- 可持久化;
- 可水平扩展;
- 支持流数据处理。
Kafka扮演的角色
消息系统:(Kafka提供了大多数消息系统难以实现的消息顺序性保障及回溯消费的功能)
-
存储系统:
Kafka把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效地降低了数据丢失的风险,也正是得益于Kafka的消息持久化功能和多副本机制。我们可以把Kfaka作为长期的数据存储系统来使用,只需要把对应的数据保留策略设置为”永久“或者启用主题的日志压缩功能即可。
流式处理平台:提供了完善的流式处理类库。
主题和分区
主题(Topic)和分区(Partition)是Kafka中很重要的两个概念。
- 消息根据主题归类,生产者负责将消息发送到特定的主题,消费者订阅主题并进行消费。
- 主题是逻辑概念,可以细分为多个分区。一个分区只属于单个主题,分区又称为主题-分区(Topic-Partition)。
- 分区在存储层面可以看做一个可追加的日志(Log)文件,消息在被追加到分区后都会分配一个特定的偏移量(offset)。offset是分区内的唯一标识,用于保证分区的顺序性。
- 一个主题可以横跨多个broker(一个主题的分区可以在不同的broker内),以此来提供比单个broker更强大的性能,因为单机I/O不会成为这个主题的性能瓶颈。
- 支持主题创建完成后去修改分区数量,通过增加分区数量实现水平扩展。
分区
多副本(Replica)机制
Kafka为分区引入了多副本机制,通过增加副本数量可以提升。
- 统一分区的多个不同副本保存的是相同的消息(在某一时刻,因为同步进度,副本之前并非完全一致,follower副本可能滞后于leader副本。)
- 副本之间是“一主多从”的关系,其中leader副本负责处理读写请求,follower只负责leader的副本的消息同步。不同副本处于不同的broker中,当leader副本所在的broker失效时,实现故障转移,由ZooKeeper进行leader选举,保证服务可用。
AR & ISR& OSR
名词解释:分区中所有的副本统称为AR,
ISR(In-Sync-Replicas):
所有与leader副本保持一定程度的副本(包含leader副本在内)组成ISR,ISR集合是AR集合的一个子集。这里滞后的程度可以通过参数配置进行量化。同时,ISR中的副本是leader副本的候选副本。
OSR(Out-of-Sync-Replicas):
前文提到follower副本和leader副本存在一定程度的滞后。当follower落后leader太多或者失效时,leader副本会把它从ISR集合中剔除进入到OSR集合。如果OSR集合中有follower副本奋起直追,追上了leader副本,那么leader副本会把它从OSR集合转移到ISR集合。
他们啥关系呢?
AR = ISR + OSR(OSR可能为空)