Kafka基本架构
此图来源于朱小厮博客
上图为Kafka的典型架构图,对于消息的生产以及消费逻辑不在本文的讨论范畴,主要就Broker的数据存储做以浅显的总结。首先解释一下常见的相关专业术语:
- Broker:消息中间件处理节点;每个Kafka服务节点称之为一个Broker,一个Kafka集群由一个或多个Broker组成
- Topic:一类特定数据集合的统称;可类比DB中Table的概念;逻辑概念
- Producer:消息的生产者,向Broker发送消息的客户端
- Consumer:消息的消费者,向Broker读取消息的客户端
- Consumer Group:每一个Consumer隶属于一个特定的Consumer
- Group,一条消息可以被不同Group中的Consumer消费,但同一Group内的消息只能被一个Consumer消费
- Partition:是对Topic中所包含数据集的物理分区;物理概念
- Replication:副本集;是Kafka高可用的一种保障机制
Partition & Replication
概述
Partition(分区)
Partition是作用于具体的Topic而已的,而不是一个独立的概念。Partition能水平扩展客户端的读写性能,是高吞吐量的 保障。通俗的将,Partition就是一块保存具体数据的空间,本质就是磁盘上存放数据的文件夹,所以Partition是不能跨Broker存在,也不能在同一个Broker上跨磁盘。对于一个Topic,可以根据需要设定Partition的个数;Kafka默认的Partition个数num.partitions为1($KAFKA_HOME/config/server.properties),表示该Topic的所有数据均写入至一个文件夹下;用户也可以在新建Topic的时候通过显示的指定–partitions 参数实现自定义Partition个数。在数据持久化时,每条消息都是根据一定的分区规则路由到对应的Partition中,并append在log文件的尾部(这一点类似于HDFS);在同一个Partition中消息是顺序写入的且始终保持有序性;但是不同Partition之间不能保证消息的有序性(高吞吐量的保障)。
Kafka也支持动态增加一个已存在Topic的Partition个数,但不支持动态减少Partition个数。因为被减少Partition所对应的数据处理是个难题;由于Kafka的数据写