我知道可以为每个client.id
定义@KafkaListener
。
是否可以为每个client.id
定义KafkaTemplate
?
如果我可以为每个client.id
定义KafkaTemplate
,而不是依靠Spring为每个生产者分配后缀,则更容易阅读kafka日志。
答案 0 :(得分:1)
Spring Kafka不会将任何client.id
分配给它创建的Producer
:
protected Producer<K, V> createKafkaProducer() {
return new KafkaProducer<K, V>(this.configs, this.keySerializer, this.valueSerializer);
}
除非您通过ProducerConfig.CLIENT_ID_CONFIG
向提到的configs
中提供一个。
因此,对于您的每个KafkaTemplate
,您需要声明一个单独的DefaultKafkaProducerFactory
,并通过Map<String, Object> configs
共享公共属性,但是对于每个实例都使用唯一的ProducerConfig.CLIENT_ID_CONFIG
。
或者,您可以实现自己的ProducerFactory
,以在每次调用ProducerConfig.CLIENT_ID_CONFIG
时填充唯一的createProducer()
。