Java 对分区的循环消息分配不适用于没有密钥的消息

Java 对分区的循环消息分配不适用于没有密钥的消息,java,apache-kafka,round-robin,Java,Apache Kafka,Round Robin,我已经创建了一个主题first\u topic,并向它发送了消息 for(int i=0;i

我已经创建了一个主题
first\u topic
,并向它发送了消息

for(int i=0;i<10;i++){
//创建制作人记录
生产记录=
新产品记录(“第一个主题”、“你好世界”+i);
//发送数据
producer.send(记录,新回调(){
完成时的公共void(RecordMetadata RecordMetadata,异常e){
//每次发送记录或发生异常时执行
如果(e==null){
//记录已成功发送
logger.info(“收到新的元数据\n”+
主题:“+recordMetadata.Topic()+”\n+
分区:“+recordMetadata.Partition()+”\n+
偏移量:“+recordMetadata.OFfset()+”\n+
时间戳:“+recordMetadata.Timestamp());
}否则{
e、 printStackTrace();
记录器错误(“生成记录时出错”,e);
}
}
});
}
但所有消息都会发送到分区2。理想情况下,他们应该以循环的方式参与所有3个项目。但不是。见下文。我做错了什么

kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group my-third-application

你试过发送10张以上的唱片吗?生产者在一个请求中批处理所有记录。是的,我认为这是合理的,它将所有记录从一个请求(循环中的所有10个)批处理到一个分区。如果我再次运行它,它将转到另一个,但全部一起运行。看来这是对的。Thx.我也有类似的问题。如果要省略批处理并强制单独发送每条消息,可以将producer.flush()方法调用放在for循环中。然后它应该均匀地分布在各个分区上。您是否尝试过发送10条以上的记录?生产者在一个请求中批处理所有记录。是的,我认为这是合理的,它将所有记录从一个请求(循环中的所有10个)批处理到一个分区。如果我再次运行它,它将转到另一个,但全部一起运行。看来这是对的。Thx.我也有类似的问题。如果要省略批处理并强制单独发送每条消息,可以将producer.flush()方法调用放在for循环中。然后它应该均匀地分布在各个分区上。
Consumer group 'my-third-application' has no active members.
GROUP                TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
my-third-application first_topic     0          0               0               0               -               -               -
my-third-application first_topic     1          0               0               0               -               -               -
my-third-application first_topic     2          10              10              0               -               -               -