Как совершать вызовы REST API в приложении kafka streams/

Данные временных рядов создаются в теме кафки. Мне нужно прочитать каждую запись и украсить некоторыми данными из базы данных и в конечном итоге вызвать REST API. Как только ответ получен, вывод в тему кафки. Как я могу сделать это с помощью API потоков Kafka эффективно и масштабируемо?

Шаги -

  • Начать чтение входной темы
  • Вызов значений карт, чтобы сделать вызов базы данных и украсить запись дополнительными данными.
  • Сделайте вызов API REST с запросом ввода, получите ответ.
  • Вывести запись в тему кафки

Я думаю, что в приведенном выше алгоритме есть два узких места -

  • Выполнение вызовов базы данных замедлит его. Это можно обойти, кэшируя метаданные и загружая метаданные, когда происходит ошибка или используется хранилище состояний.

  • Синхронный вызов REST API замедлит его.

    final KStream<String, String> records = builder.stream(InputTopic);

    //This is bad
    final KStream<String, String> output = records
      .mapValues(value ->  { //cache hit otherwise database call});
      .mapValues(value ->  { //prepare http request and convert the http resonse };
    output.to(OutputTopic)

Приведенный выше код будет иметь зависимость и неблагоприятно влиять на пропускную способность, если вызов базы данных или REST API займет больше времени. Записи с одинаковым ключом не должны обрабатываться не по порядку. Ожидаемая пропускная способность составляет около 1 м/мин. Когда одна запись достигает REST API, можно одновременно выполнять вызовы базы данных.

Не знаю, как приступить к написанию топологии, которая может масштабироваться в этом сценарии. Я новичок в потоках кафки.


person Mac    schedule 12.11.2019    source источник
comment
Один из рекомендуемых подходов — перенести данные вашей базы данных/API в KTable, а затем присоединиться к потоку по какому-либо идентификатору.   -  person OneCricketeer    schedule 12.11.2019
comment
+1 передавайте базу данных в Kafka и выполняйте локальное соединение (см. видео без бункеров)   -  person Robin Moffatt    schedule 12.11.2019
comment
Вы читали мой ответ на stackoverflow.com/a/49771142/1743580?   -  person Michael G. Noll    schedule 12.11.2019
comment
@ MichaelG.Noll .. Спасибо за ссылку. Ответ говорит о плюсах и минусах. Я искал разные пути решения проблемы.   -  person Mac    schedule 13.11.2019
comment
@RobinMoffatt .. Хороший разговор .. но не помогает решить мою проблему.   -  person Mac    schedule 13.11.2019
comment
@Mac: Ну. У вас есть два ответа: импортировать данные в KTable или иметь дело с удаленными вызовами и соответствующими компромиссами. Не знаете, что еще вы ожидаете получить в качестве ответа?   -  person Matthias J. Sax    schedule 14.11.2019