Kafka #
partition #
- topic 的物理存储单位, 每个 topic 可以被划分成一个或者多个 partition
核心特征包括: #
- 有序性保证:单个分区内的消息是有序的,消费者会按照消息写入分区的顺序接收它们
- 分布式存储:不同分区可以分布在集群的不同 Broker 上,实现数据的分布式存储
- 并行处理:多个分区可以被不同的消费者并行消费,提高吞吐量
- 扩展性:分区是 Kafka 实现横向扩展的基础单位
- 容错性:每个分区可以有多个副本(Replica),提供容错能力
例子 #
在一个有3个节点(brokers)的Kafka集群中,创建topic时设置num_partition=6,replication_factor=2的配置是完全可行的,不会有问题。 让我解释一下为什么:
对于num_partition=6:
这意味着topic会被分成6个分区 这6个分区会分布在3个broker上,每个broker平均会有2个分区 分区数量大于broker数量是很常见的配置,可以提高并行处理能力
对于replication_factor=2:
这意味着每个分区会有2个副本(1个leader,1个follower) 在3个broker的集群中,复制因子为2是合理的 这可以保证在一个broker故障的情况下,所有的分区数据仍然可用
资源分布:
总共会有6个分区 × 2个副本 = 12个分区副本 分布在3个broker上,平均每个broker会承载4个分区副本
这种配置没有问题,而且相当常见。需要注意的是,如果某个broker发生故障,剩下的2个broker需要承担更多负载,但系统仍然可以正常运行。