Java Kafka流-只有一个实例从分区读取

Java Kafka流-只有一个实例从分区读取,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我试图启动我的应用程序的两个实例来读取来自同一主题的30个分区的消息,但只有我启动的第一个实例读取消息(来自所有30个分区) 两个实例具有相同的配置: private Properties streamConfig() { streamConfig = new Properties(); streamConfig.setProperty(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); streamCon

我试图启动我的应用程序的两个实例来读取来自同一主题的30个分区的消息,但只有我启动的第一个实例读取消息(来自所有30个分区)

两个实例具有相同的配置:

private Properties streamConfig() {
    streamConfig = new Properties();
    streamConfig.setProperty(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
    streamConfig.setProperty(StreamsConfig.APPLICATION_ID_CONFIG, "myApp");
    streamConfig.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, 30);
    streamConfig.put(StreamsConfig.REPLICATION_FACTOR_CONFIG, 3);
    streamConfig.setProperty(StreamsConfig.producerPrefix(ProducerConfig.ACKS_CONFIG), "all");
    return streamConfig;
}
我做错了什么


谢谢。

尝试设置较低的NUM\u STREAM\u THREADS\u CONFIG。每个线程实际上是一个单独的使用者。因此,可能发生的情况是首先将所有分区分配给它。当第二个实例开始重新平衡,但它不一定在实例之间均匀地分割分区(或者甚至为第二个实例分配某些内容)。在任何情况下,在您描述的设置中,当两个实例都启动时,30个线程将空闲运行。

尝试设置较低的NUM\u STREAM\u threads\u CONFIG。每个线程实际上是一个单独的使用者。因此,可能发生的情况是首先将所有分区分配给它。当第二个实例开始重新平衡,但它不一定在实例之间均匀地分割分区(或者甚至为第二个实例分配某些内容)。在任何情况下,在您描述的安装程序中,当两个实例都启动时,30个线程将空闲运行。

当您启动第二个应用程序时,第一个应用程序中是否有日志表明该应用程序正在重新平衡任务?你能显示你的流生成器代码吗?当你启动第二个应用程序时,第一个应用程序中是否有日志表明该应用程序正在重新平衡任务?你能展示你的流生成器代码吗?谢谢!当我将“StreamsConfig.NUM\u STREAM\u THREADS\u CONFIG”设置为15时,第一个实例启动并获取所有分区,然后我启动第二个实例,它们会重新平衡,每个实例都会获得我想要的15个分区。谢谢!当我将“StreamsConfig.NUM\u STREAM\u THREADS\u CONFIG”设置为15时,第一个实例启动并获取所有分区,然后我启动第二个实例,它们会重新平衡,每个实例都会获得我想要的15个分区。