Несколько производителей Kafka в Spring Boot ⇐ JAVA
-
Anonymous
Несколько производителей Kafka в Spring Boot
У меня есть вариант использования, который требует наличия нескольких производителей Kafka (в зависимости от конфигурации). т. е. если в моей конфигурации есть 3 арендатора, которые хотят получать данные, я хочу запустить 3 производителей (все три пишут в 3 разных кластера).
Я пытался с моей конфигурацией Kafka быть:
@Бин @Начальный public Map kafkaTemplates() { log.info("настройка шаблонов Kafka"); окончательные идентификаторы строк = Configuration.getIds(); Map kafkaTemplates = new HashMap(); for (Идентификатор строки: ids.split(",")) { kafkaTemplates.put(id, kafkaTemplate(id)); } вернуть шаблоны Кафки; } частный KafkaTemplate kafkaTemplate(String id) { log.info("настройка шаблона Kafka"); пытаться { Производитель свойствProperties = новые свойства(); попробуйте (InputStream kins = Files.newInputStream(new File("/opt/user-secrets/", id + ".properties").toPath())) { ProducerProperties.load(kins); } catch (IOException e) { выдать новое RuntimeException(e); } Реквизит карты = ProducerProperties; Map props1 = (Map) props; ProducerFactory ProducerFactory = новый DefaultKafkaProducerFactory(props1); вернуть новый KafkaTemplate(producerFactory); } catch (Исключение е) { log.error("e {}", e.getMessage(), e); выдать новое RuntimeException(e); } }
Это приводит к появлению NPE в kafkaTemplates.get(id), когда я пытаюсь получить доступ к KafkaTemplate в службе Producer:
@Service @Slf4j @Getter @Сеттер общественный класс KafkaProducerService { частный окончательный Map kafkaTemplates; частная схема avroSchema; public KafkaProducerService(Map kafkaTemplates) { this.kafkaTemplates = kafkaTemplates; } public void Product (Идентификатор строки, Тема строки, Ключ строки, Сообщение VehicleHeartbeat) { Запись GenericRecord = генерироватьAvroRecord (сообщение); log.info("общая запись: {}", запись); kafkaTemplates.get(id).send(topic, key, Record.toString()); } Как мне это сделать с помощью Spring Kafka?
У меня есть вариант использования, который требует наличия нескольких производителей Kafka (в зависимости от конфигурации). т. е. если в моей конфигурации есть 3 арендатора, которые хотят получать данные, я хочу запустить 3 производителей (все три пишут в 3 разных кластера).
Я пытался с моей конфигурацией Kafka быть:
@Бин @Начальный public Map kafkaTemplates() { log.info("настройка шаблонов Kafka"); окончательные идентификаторы строк = Configuration.getIds(); Map kafkaTemplates = new HashMap(); for (Идентификатор строки: ids.split(",")) { kafkaTemplates.put(id, kafkaTemplate(id)); } вернуть шаблоны Кафки; } частный KafkaTemplate kafkaTemplate(String id) { log.info("настройка шаблона Kafka"); пытаться { Производитель свойствProperties = новые свойства(); попробуйте (InputStream kins = Files.newInputStream(new File("/opt/user-secrets/", id + ".properties").toPath())) { ProducerProperties.load(kins); } catch (IOException e) { выдать новое RuntimeException(e); } Реквизит карты = ProducerProperties; Map props1 = (Map) props; ProducerFactory ProducerFactory = новый DefaultKafkaProducerFactory(props1); вернуть новый KafkaTemplate(producerFactory); } catch (Исключение е) { log.error("e {}", e.getMessage(), e); выдать новое RuntimeException(e); } }
Это приводит к появлению NPE в kafkaTemplates.get(id), когда я пытаюсь получить доступ к KafkaTemplate в службе Producer:
@Service @Slf4j @Getter @Сеттер общественный класс KafkaProducerService { частный окончательный Map kafkaTemplates; частная схема avroSchema; public KafkaProducerService(Map kafkaTemplates) { this.kafkaTemplates = kafkaTemplates; } public void Product (Идентификатор строки, Тема строки, Ключ строки, Сообщение VehicleHeartbeat) { Запись GenericRecord = генерироватьAvroRecord (сообщение); log.info("общая запись: {}", запись); kafkaTemplates.get(id).send(topic, key, Record.toString()); } Как мне это сделать с помощью Spring Kafka?
Мобильная версия