我正在尝试启动我的应用程序的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个线程将处于空闲状态。