一个topic对应多个partition,partition分布在多broker上,多broker一起提供kafka服务。
kafka中,Topic是一个存储消息的逻辑概念,可认为为一个消息的集合。物理上,不同Topic的消息分开存储,每个Topic可划分多个partition,同一个Topic下的不同的partition包含不同消息。每个消息被添加至分区时,分配唯一offset,以此保证partition内消息的顺序性。
kafka中,以broker区分集群内服务器,同一个topic下,多个partition经hash到不同的broker。
kafka中关于topic、broker及partition相关参数的几点说明:
1:num.partitions参数
默认值为1,可增加topic的partition数量,不可减少其个数。
kafka集群通过partition对topic进行横向扩展,当有新broker加入kafka集群,可通过hash调用partition个数负载均衡。
partition数量选定标准:
- 主题吞吐量
- 单个partition读取数据的最大吞吐量
- 每个broker包含的partition个数、可用磁盘空间和网络带宽
- 单个broker对partition个数有限制,partitio越多,占用的内存越多,完成选举所需时间越长。
2:broker间分区分配
保证在broker间平均分布partition副本,每个副本分布在不同的broker上,考虑机架,broker分布可用轮询或哈希。
3:partition不完全首领选举
当分区首领不可用时,一个同步副本会被选为新首领。如果选举过程中,没有丢失数据,选举为完全首领选举。
4:增加分区
增加分区主要是为了扩展topic容量或降低单个partition的吞吐量。
基于key区分partition的topic,改变了partition数量,key与partition之间的映射关系也会发生变化。
总结:
- topic对应多partition,partition分布在多broker上,多broker一起提供kafka服务。
- partition作为kafka存储的最小粒度,主要用于topic吞吐量的扩展,partition分主和副,均匀或hash到不同的broker,partition数量过多,占用更多broker,同时副本要求也会增加partition主副本的首领选举成本。
文章同步公众号,欢迎扫码关注