我正在尝试启动我的应用程序的2个实例,以从具有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_STREAM_THREADS_CONFIG。每个线程实际上是一个单独的使用者。因此,可能发生的事情是首先将所有分区分配给它。当第二个实例开始进行重新平衡时,它不一定会在两个实例之间平均分配分区(甚至为第二个实例分配内容)。在任何情况下,您都描述了当两个实例都启动时30个线程将处于空闲状态。

08-17 23:55