1 背景
近期在学习《深入理解Kafka核心设计与实践原理》这本书。接下来希望将每次学习的收获与心得记录成文,也希望可以帮助到同样初入门的人。
2 思维导图
先分享一下我在学习Kafka的基本知识之后整理的思维导图。
3 Kakfa介绍
3.1 三大角色
Kafka主要用于扮演三种角色,消息系统、存储系统、流式处理平台。
3.1.1 消息系统
Kafka被用于最多的是消息系统,Kafka和传统的消息系统都具备了系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。同时,Kafka还提供了大多数消息系统没有的消息顺序保障性以及回溯消费的功能。这也是Kafka相比于其他消息系统的优势所在。
3.1.2 存储系统
Kafka会把消息持久化存储至磁盘中,相比于其他基于内存存储的系统而言,有效地降低了数据丢失的风险。
3.1.3 流式处理平台
Kafka不仅为每个流行的流式处理框架提供了可靠的数据来源,它本身还提供了一个完整的流式处理类库,比如窗口、连接、变换和聚合等各类操作。
3.2 体统架构
Kafka的体系架构主要有4个组成部分:producer、consumer、kafka broker、zookeeper
3.2.1 producer
即是生产者角色,用于产生数据,并将数据写入到kafka中。
3.2.2 consumer
消费者角色,用于从kafka中拉取数据并且消费。
3.2.3 kafka broker
broker即是一个kafka的实例。当一个服务器中仅有一个kafka broker时,我们就可以说,该服务器就是一个kafka实例了。
3.2.4 zookeeper
分布式协作框架,用于管理集群的元数据。
3.3 两个重要概念
kafka中有两个比较核心的概念:Topic(主题)和Partition(分区)。
Topic是一个逻辑上的概念,表示一个业务单元。也就是说,一个Topic下的数据可以归为一类。
Partition是一个实际的概念,表示一个Topic下的分区。一个Topic下可以有多个分区,而一个分区只属于一个Topic。
同一个Topic下的不同分区会具体存储不同的消息队列,每个分区都可以理解成一个可以追加的日志文件,因此,每个分区都会有一个offset用于标识数据的偏移量。
Kafka可以保证分区里数据的顺序性。
如图:
比如该Topic有4个Partition,那么每个Partition都有自己的写入数据的内容、顺序、以及偏移量。各个分区之间数据互不干涉。
另外,同一个Topic下的不同Partition是可以分布在不同的broker中的。这样非常有利于Topic的扩展,可以以此来提供比单个broker更强大的功能。