Один шаблон Kafka с динамической темой
I В настоящее время я использую один шаблон Kafka в своем приложении, где я динамически указываю тему при отправке записей. Вот упрощенная версия моего кода:
Код: Выделить всё
class ProducerService {
@Autowired
private KafkaTemplate kafkaTemplate;
public void send(String topic, GenericRecord key, GenericRecord value) {
ListenableFuture future = kafkaTemplate.send(topic, key, value);
}
}
Несколько шаблонов Kafka для разных тем:В качестве альтернативы я рассматриваю возможность использования отдельных шаблонов Kafka для каждой темы. Вот как я это реализовал
Код: Выделить всё
@Configuration
public class KafkaConfig {
// Define topics
@Value("${kafka.topic.first}")
private String firstTopic;
@Value("${kafka.topic.second}")
private String secondTopic;
@Bean(name = "firstKafkaTemplate")
public KafkaTemplate firstKafkaTemplate(ProducerFactory defaultKafkaProducerFactory) {
KafkaTemplate kafkaTemplate = new KafkaTemplate(defaultKafkaProducerFactory);
kafkaTemplate.setDefaultTopic(firstTopic);
return kafkaTemplate;
}
// Second Kafka template bean definition follows similarly
}
class ProducerService {
@Autowired
@Qualifier("firstKafkaTemplate")
private KafkaTemplate firstTopicTemplate;
// Second Kafka template injection follows similarly
public void send(String topic, GenericRecord key, GenericRecord value) {
ListenableFuture future;
if ("first".equalsIgnoreCase(topic)) {
future = firstTopicTemplate.sendDefault(key, value);
} else if ("second".equalsIgnoreCase(topic)) {
future = secondTopicTemplate.sendDefault(key, value);
} else {
throw new RuntimeException("Topic is not configured");
}
}
}
Я понимаю, что Kafka выполняет пакетную обработку внутри себя и отправляет пакеты в Kafka через отдельный поток. Учитывая это, какой подход будет более эффективным с точки зрения производительности? Или между этими двумя подходами разница в производительности будет незначительной?
Подробнее здесь: https://stackoverflow.com/questions/736 ... vs-a-singl