Kafka没有向其他分区发送消息



在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

最新更新