Kafka学习二:Kafka术语(概念)

180 阅读3分钟

客户端

  • producer:生产者,负责向服务端 主题topic(下面解释)中推送message。

  • consumer:消费者,消费topic中的message。

  • consumer group:消费者组,这是Kafka同时兼容点对点模型和发布/订阅模型的关键;Kafka中一个topic可能多个group订阅,但是topic的一条message到达group,只能被其中的一个consumer消费,在同一个group中,consumer采用轮询的方式消费message;所有的消费者都在一个消费者组中,就构成了点对点模型;所有的消费者分布在不同的消费者组中,就构成了发布/订阅模型;group中的consumer可以是进程也可以是线程,group机制使得Kafka可以高吞吐、高并发

点对点模型

点对点模型.png

发布订阅模型

发布订阅模型.png

服务端

集群层

  • broker:Kafka是一个分布式的系统,其中有多个服务器进程组成集群,broker就是一个一个的Kafka进程,负责处理客户端请求以及数据持久化等;Kafka将broker分散到不同的机器节点上,一台机器宕机还有其他机器上的broker可以提供服务,这是Kafka实现高可用的手段之一。

  • topic:主题,Kafka message分类机制,我们可以将同一类的message发送到同一个topic中,做一下message隔离。

  • partition:分区,一个topic下可以包含多个partition,为什么topic还会继续分裂出分区呢,因为要考虑可伸缩性;如果一个topic全部都在一个broker上,那么很容易出现一个topic过大一台机器无法承受的情况,而如果把topic分成不同的partition分散在不同的broker中,那么这种情况出现的概率会大大降低。

  • replica:副本,这是Kafka实现高可用的另一个手段;从上面知道,partition分布在不同的broker中,那么当其中一个broker挂了,那么这个分区岂不是不能使用了,所以Kafka把一个partition做成多个replica;其中会有一个leader replica存储producer发送的message,consumer也是从leader中读取message的;还会有多个follower replica,它的作用很简单,就是不停的发请求给leader,让leader把最新的message发送给它;leader和follower会分散在不同的broker中。

  • offset:有两个位移的概念,一个是partition分区的位移,也就是消息的ID,一个消息进入分区就会获得一个offset,以后这个消息的位移就不变了;另一个位移的概念是出现在消费者端,每个消费者都要记录一下它消费的某个分区的位置,这个位移是会随着消费者消费改变的。

Kafka集群图

Kafka集群图.png

数据存储层

  • LEO:log end offset,我理解是一个partition最大的offset。

  • HW:有这么一种情况,leader宕机时follower还没有同步完数据,而消费者已经消费到leader的最后一个了,然后新的leader和consumer的offset对应不上了,为了防止这种情况,Kafka将follower中最小的LEO+1设置为HW,consumer只能看到HW之前的数据。

  • segment:一个partition在底层是由多个segment组成的,一个segment代表两个文件--索引文件和日志文件;Kafka的高性能文件存储实现,第一点就是有索引,第二点是顺序写,第三点是分成了segment小文件,可以在过期时快速丢弃,不会影响目前正在工作的segment。

leohw.png