首先说结论,是负载均衡的。也就是说,现在有一个producer,向一个主题下面的三个分区发送message,没有指定具体要发送给哪个partition,
这种情况,如果是负载均衡的,发送的消息应该均匀分布在三个分区的日志文件中。
下面开始验证:
首先创建一个带三个分区的topic, my-partitioned-topic。
binwindowskafka-topics --create -zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic my-partitioned-topic
查看分区信息是否正确
binwindowskafka-topics --describe --zookeeper localhost:2181 --topic my-partitioned-topic
可以看到当前topic下分区数量为3,分区编号依次是0,1,2。
现在创建一个producer:
binwindowskafka-console-producer --broker-list localhost:9092 --topic my-partitioned-topic
发送消息:
然后我们去找分区的日志文件,日志文件在哪儿呢?
我们需要先去看kafka的配置文件server.xml里面配置的日志存放路径。
我用的是windows,这个目录在我的D盘,看一下都有啥:
可以看到,这里面有my-partitioned-topic下面的三个分区目录,随便打开一个看下里面是啥:
这里我们主要看*.log文件,打开之后有乱码,我的编码格式不对,在linux就是好的
但是没关系,依次打开my-partitioned-topic-1,my-partitioned-topic-2的日志文件,会发现里面都有之前producer发送的消息,并且消息都不同。
这就说明了,producer向分区发送消息是做了负载均衡的。
但是这里由于乱码,看不到每个日志文件里面有几条记录,无法确定是否均匀分布,但是没有关系,我们再看一下刚才的目录:
发下这里还有几个*-checkpoint文件,也就是检查点文件,我们需要看的是replication-offset-checkpoint这个文件,打开:
我们只关注这里面的my-partitioned-topic,比如my-partitioned-topic 1 2这条记录。
1代表分区编号,它就是第二个分区(从0开始编号),2代表当前存放了几条记录,然后我们就会发现三个分区存放的数量都是一致的,
所以我们可以认定它是均匀分配的。