1.简介
kafka目前定为一个分布式流式处理平台,以高吞吐、可持久化、可水平扩展、支持流数据处理
等多种特性而别广泛应用。
- 消息系统: 具备
系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性
等功能——消息顺序性保障及回溯消费的功能- 存储系统: 消息持久化到磁盘,降低数据丢失的风险。具有消息持久化和多副本机制
- 流式处理平台: 不仅为每个流行的流式处理框架提供了可靠的数据来源,还提供了一个完整的流式处理类库
2.基本概念
2.1.基本结构
- Producer: 生产者,负责创建消息并发送到kafka中
- Consumer: 消费者,连接到kafka服务器并接收消息
- Broker: kafka服务器节点
一个kafka架构由一些Producer、Broker和Consumer以及一个ZooKeeper集群组成。ZooKeeper是kafka用来负责集群元数据管理、服务器集群leader的选举等功能。Producer将消息发送到Broker,Broker负责将收到的消息存储到磁盘,Consumer则从Broker中订阅并消费消息
- Topic: 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic(主题),是一个
逻辑上的概念
- Partition: 分区(主题分区),同一主题下不同分区的消息是不同的。
Topic是一个逻辑上的概念,可以细分为很多分区(一个分区只属于一个主题)。分区在存储层面可以看做是一个可追加的Log文件。消息被追加到Log文件的时候会分配一个特定的偏移量
offset
,offset是消息在分区的唯一标识,保证消息在分区内的顺序性(分区有序而不是主题有序)
2.2.多副本机制
多副本(Replica)机制是为提高kafka的容灾
能力。副本之间是一主多从的关系,leader副本负责读写,follower副本只负责与leader副本的消息同步。
- AR: 分区中所有副本的统称
- ISR: 所有与leader副本保持一定程度同步的副本
- OSR: 与leader副本同步滞后过多的副本
leader副本数据同步的时候很多时候都会存在一定的延迟(滞后),ISR中一定程度的同步是指可忍受的延迟范围(可通过参数进行配置)。
AR=ISR+OSR
。- leader副本维护和追踪ISR中follower副本的延迟状态,落后太多(配置中配置的延迟范围)则从ISR中剔除,状态追上leader则加入到ISR
- 默认当leader发生故障时只有ISRj集合中的副本才能被选举为新的leader
- HW: 高水位,标识了一个特定的消息的offset,消费者只能拉去到这个offset之前的消息
- LEO: log end offset,标识当前log文件中下一条待写入消息的offset,LEO的大小为当前log分区中最后一条消息的offset+1
分区ISR集合中每个副本都会维护自己的LEO,
ISR集合中最小的LEO则为分区的HW
(消费者只能消费HW之前的数据)
kafka使用这种ISR的方式有效的权衡了数据可靠性和性能之间的关系。