spring kafka thorws设置并发后的InstanceAlreadyExistsException异常> 1

时间:2017-04-25 03:19:39

标签: java apache-kafka stomp spring-kafka

我使用spring-kafka,如果我没有设置ConcurrentKafkaListenerContainerFactory的并发性,一切正常,当我将其设置为大于1的数字时,我得到一个例外:

  

javax.management.InstanceAlreadyExistsException:   kafka.consumer:类型= APP-信息,ID =客户端 - 3

我的配置:

@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> 
    kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = new 
    ConcurrentKafkaListenerContainerFactory<String, String>();

    factory.setConcurrency(kafkaConfig.getConcurrency());

    factory.getContainerProperties().setAckMode(AckMode.MANUAL);
    factory.setConsumerFactory(consumerFactory());
    return factory;
}

属性:

kafka.enable-auto-commit=false

kafka.client-id=client-1

kafka.concurrency=2

1 个答案:

答案 0 :(得分:6)

请勿添加您自己的答案,只是为了添加更多信息 - 请改为编辑您的问题。

我打开了issue for this on github。目前不支持为每个线程设置不同的client.id

作为解决方法,您可以为每个KafkaMessageListenerContainer启动一个单独的ConcurrentMessageListenerContainer(这是client.id在内部执行的操作。)

编辑

虽然不理想,但您可以省略consumer-1,而kafka客户端会为每个生成一个(consumer-2public void onClickA(View view) { startActivity(new Intent(this,LoginActivity.class)); } 等)