[1.1 基本概念](#1.1 基本概念)
[1.1.1 基本角色与概念](#1.1.1 基本角色与概念)
[1.1.2 其他概念(AR、ISR、OSR、HW、LEO)](#1.1.2 其他概念(AR、ISR、OSR、HW、LEO))
[1.2 概念图](#1.2 概念图)
第一章:概念
- 背景
- Kafka起初是由LinkedIn公司采用Scala开发的,现已被捐给Apache
- 尽管Kafka的核心是用Scala编写的,但它提供了兼容Java的API(因为Scala能在JVM上运行,并且与Java有很好的互操作性)
- Kafka扮演的三大角色:
- 消息系统(消息中间件):系统间解稿、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性
- 存储系统(持久化功能):基于消息持久化功能和多副本机制,Kafka可作为长期的数据存储系统
- 流式处理平台:
1.1 基本概念
1.1.1 基本角色与概念
- Producer:生产者
- Consumer:消费者
- Broker:可以看作一个独立的【Kafka 服务节点】或【Kafka服务实例】。一个或多个broker组成一个Kafka集群
- Zookeeper集群:早期Kafka依赖Zk进行集群管理、选举等操作。2.8.0中引入KRaft模式,允许用户尝试不依赖于Zookeeper的Kafka集群
- Partition:分区。一个主题topic包含多个分区partition,一个分区只属于单个主题。同个分区内,通过offset能保证同分区有序,但跨分区不保证有序
- Topic:主题。生产者负责将消息发送到特定的主题,而消费者负责订阅主题并进行消费
- Replica:partition的副本(包含leader和follower两类)。通过增加副本数量可以提升容灾能力,一主多从,其中 leader副本负责处理读写请求,follower副本只负责与leader副本的消息同步
- leader:leader挂了后,ISR中的follower有资格被选举成leader
- follower:从leader拉取消息进行同步
总结:kafka通过partition的水平扩展支持高性能,通过replica提升容灾能力
1.1.2 其他概念(AR、ISR、OSR、HW、LEO)
AR,ISR,OSR(恒等式:AR = ISR + OSR)
- AR(Assigned Replicas):分区中的所有副本
- ISR(On-Sync Replicas):所有与leader副本保持一定程度同步的副本(包括 leader 副本在内)。这个一定程度是个范围,通过参数可以配置
- OSR ( Out-of-Sync Replicas):与leader副本同步未到一定程度的副本(不包括leader副本)
总结
- 正常情况下,所有的follower都应该与leader保持一定程度的同步:OSR=0,AR=ISR
- leader 副本负责维护和跟踪 ISR 集合中所有 follower 副本的滞后状态,当 follower 副本落后太多或失效时,leader副本会把它从ISR集合中剔除。 如果 OSR 集合中有follower副本追上了 leader副本,那么leader副本会把它从 OSR 集合转移至 ISR 集合
- 默认情况下, 当 leader 副本发生故障时,只有在 ISR 集合中的副本才有资格被选举为新的 leader, 而在 OSR 集合中的副本则没有任何机会
HW,LEO
理解:分区 ISR集合中的每个副本都会维护自身的 LEO,而ISR集合中最小的 LEO 即为分区的 HW ,对消费者而言只能消费 HW 之前的消息
- HW(High Watermark):高水位。它标识 了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。下图中HW=6,消费者只能消费offset=[0,5]的消息
- LEO(Log End Offset):标识当前日志文件中下一条待写入消息 的 offset,LEO的大小相当于当前日志分区中最后一条消息的offset值加1。上图中LEO=9
1.2 概念图
4个broker,3个partition,replica=3(一主两从)