Kafka Stream - 只有一个实例从分区读取
Kafka Stream - only one instance reads from partitions
我正在尝试启动我的应用程序的 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 个线程将 运行 空闲。
我正在尝试启动我的应用程序的 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 个线程将 运行 空闲。