zhexy
juein.im学习笔记
Markdown
kafka起初由Linkedln 公司采用Scala语言开发的一个多分区、多副本且基于Zookeeper协调的分布式消息系统,现在已成为Apache顶级项目。
kafka 三大角色:
消息系统 : 一方面Kafka提供与传统消息中间件相同的功能,且具备解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。另一方面,还提供独特的消息顺序性保障及回溯消费的功能。
存储系统 : Kafka可以将消息持久化到磁盘,默认为7天。如果需要长期存储,可以修改数据保留策略为“永久”,并启用主题的日志压缩功能即可。
流式处理平台 : Kafka还提供流式处理类库,比如窗口、连接、变换和聚合等各类操作。
基本概念
Producer: 生产者,发送消息。投递到Kafka中(生产中为第三方组件)
Consumer: 消费者,接受消息。消费者连接到kafka并接收消费消息。可以Pull模式从服务端拉取消息,并保存具体消费位置,可以保证宕机恢复(容灾能力)
Broker: 服务代理节点。 Broker可以简单看作一个独立的Kafka服务节点或者Kafka服务实例。
Topic: Kafka的消息以Topic为单位进行归类,生产者将消息发送到特定的Topic。
Partition: 一个Topic会有多个分区Partition,一个分区只属于单个Topic。也可称为Topic-Partition。注意同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量。
offset: 是消息在分区的唯一标识,Kafka通过offset保证消息在分区内的顺序性,不跨越分区(Kafka保证的是分区有序而不是主题有序)offset 图示如下:
Replica: Kafka为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。同一分区的不同副本中保存的是相同的消息。副本之间是“一主多从”的关系,leader副本负责处理读写请求,follower副本只负责对leader副本的消息同步。当leader副本出现故障时,从follower副本中重新选举新的leader副本堆外提供服务。
OSR: Out-of-Sync Replicas,相当于与leader副本同步滞后过多的副本(不包括leader副本),OSR+ISR = AR。
AR: 分区中所有副本统称为AR(Assigned Replicas)。
ISR: In-Sync Replicas,所有与leader副本保持一定程序同步的副本。(消息回先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内的滞后就是OSR)
ISR/OSR变化过程: leader副本负责跟踪和维护ISR集合中所有follower副本的滞后状态,当follower滞后太多,移到OSR。当OSR集合中follow副本盖上“leader”副本,就将其移到ISR集合。备注:只有在ISR集合中的副本才有资格被选举为新的leader。
HW: HW为High Watermark,高水位,标识了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息。如下图所示:消费者只能拉取到0-5的offset的消息。
LEO: LEO为Log End Offset,标识当前日志文件中下一条待写入消息的offset,如下图所示:9这个位置代表即将插入的消息位置。分区ISR集合中的每个副本都会维护自身的LEO,而ISR集合中最小的LEO即为分区的HW。