1.Topic
在kafka中,topic是一个存储消息的逻辑概念,可认为是一个消息集合。每条消息发送到kafka集群的消息都有一个类别。
每个topic可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息
2.Partition(分区)
每个topic可以划分多个分区(每个Topic至少有一个分区),同一topic下的不同分区包含的消息是不同的。每一条消息发送到broker时,会根据partition的规则选择存储到哪一个partition。类似于分库分表的思想。
- 单机也可以分区,只不过分的这些partition在一台机器而已
- 创建时通过参数
--partition指定分区个数 - 分区文件在
/tmp/kafka-log中,会有对应个数目录,命名规则是<topic_name>-<partition_id> - 如果partition规则设置合理,那么所有的消息会均匀的分布在不同的partition中
- 每个消息在被添加到分区时,都会被分配一个offset(称之为偏移量)
- offset是消息在此分区中的唯一编号
- kafka通过offset保证消息在分区内的顺序,offset的顺序不跨分区,即kafka只保证在同一个分区内消息有序
sh kafka-topics.sh
--create
--zookeeper localhost:2181
--replication-factor 1
--partition 3 # 创建3个分区
--topic test

这三个分区的消息会分别存储在/tmp/kafka-log目录下的 test-0、test-1、test-2文件夹中。
在实际生产过程中,每个topic都会有多个partitions,多个partitions的好处在于:
- Kafka性能:能够对 broker上的数据进行分片,有效减少了消息的容量从而提升io性能。
- 消费能力:通过partitions,实现了多个consumers可以同时消费一个topic
本文标题:【Kafka】原理分析:关于Topic和Partition(分区)
本文链接:https://blog.quwenai.cn/post/9978.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。







还没有评论,来说两句吧...