在Mac (Intel)上安装Apache Kafka。单一本地生产者和单一本地消费者。创建1个主题,3个分区和1个复制因子:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic animal --partitions 3 --replication-factor 1
生产商代码:
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic animal
生产商消息:
>alligator
>crocodile
>tiger
在生成消息时(通过producer-console手动生成),所有消息都进入同一个分区。它们不应该跨分区分布吗?
我尝试了3条记录(如上所述),但它们只被发送到1个分区。在tmp/kafka-logs/topic-0/00**00.log中检查topic-中的其他日志为空。
我尝试了几十张唱片,但都没有运气。
我甚至在'config/server '中增加了默认分区配置(num.partitions=3)。属性,但运气不好。
我也尝试过不同的主题,但都没有运气。
从kafka 2.4开始,默认分区从轮询改为sticky,这将在整个批处理中坚持同一个分区。
在我的kafka版本中,kafka-console-producer
使用默认的批处理大小为16384,所以一旦你产生足够的消息来填充缓冲区,分区就会改变。
如果生产者生成具有相同密钥的消息,则可以保证它在相同分区上生成。因此,在您的情况下,如果您希望它被不同的分区使用,那么请确保使用不同的键发布它。你需要设置下面的属性。
--property parse.key=true
参见下面的命令生成带有键的记录。
kafka-console-producer --broker-list 127.0.0.1:9092 --topic first_topic --property parse.key=true --property key.separator=,
> key1,value1
> key2,value2