Укажите client.id для шаблона KafkaTemplate

Я знаю, что можно определить client.id для каждого @KafkaListener.

Можно ли определить client.id для каждого KafkaTemplate?

Легче читать журналы kafka, если я могу определить client.id на KafkaTemplate вместо того, чтобы полагаться на Spring, назначающий суффикс каждому производителю.


person kkflf    schedule 16.07.2018    source источник


Ответы (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() вызывается.

person Artem Bilan    schedule 16.07.2018
comment
Я не изучал это, я просто предположил, что это Spring, который обрабатывает client.id. Есть ли какие-либо запланированные функции для идентификатора клиента производителя, как вы делали для @KafkaListener с clientIdPrefix? - person kkflf; 16.07.2018
comment
Что ж, мы этого не делаем: никогда не повышали. Не стесняйтесь добавлять проблему по этому поводу, и мы определенно можем рассмотреть возможность добавления clientIdPrefix в DefaultKafkaProducerFactory! - person Artem Bilan; 16.07.2018
comment
Спасибо за быстрый отзыв. - person kkflf; 16.07.2018
comment
DefaultKafkaProducerFactory обслуживает только одного производителя, используемого всеми KafkaTemplate, - если вы не используете транзакции, и в этом случае он их кэширует. В этом случае мы могли бы добавить тот же суффикс, что и суффикс идентификатора транзакции. В документации Kafka рекомендуется использование одного производителя. - person Gary Russell; 18.07.2018