我使用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
答案 0 :(得分:6)
请勿添加您自己的答案,只是为了添加更多信息 - 请改为编辑您的问题。
我打开了issue for this on github。目前不支持为每个线程设置不同的client.id
。
作为解决方法,您可以为每个KafkaMessageListenerContainer
启动一个单独的ConcurrentMessageListenerContainer
(这是client.id
在内部执行的操作。)
编辑
虽然不理想,但您可以省略consumer-1
,而kafka客户端会为每个生成一个(consumer-2
,public void onClickA(View view)
{
startActivity(new Intent(this,LoginActivity.class));
}
等)