Кафка - как превратить сообщение сервиса Rest для включения в тему кафки?

Я новичок в сообществе кафки и сталкиваюсь со сложным вопросом. У меня есть два приложения, которые общаются друг с другом через веб-сервис Rest, а тело - это сообщение json.

Как я могу использовать kafka, чтобы быть промежуточным ПО между этими двумя приложениями, с минимальным или нулевым воздействием на приложения?

Это мой сценарий "как есть":

Мой сценарий будущего:

Я думал использовать STM или какой-нибудь перехватчик для преобразования заголовка и тела.

Можно ли так сделать? Я знаю, что я должен преобразовать тело из:

      {
        "first name" : "Donald" ,
        "last name" : "Trump"
      },
      {
        "first name" : "Vladimir" ,
        "last name" : "Putin"
      }

чтобы:

{
  "records":
  [
    {
      "key": "K001",
      "value":
      {
        "first name" : "Donald" ,
        "last name" : "Trump"
      }
    },
    {
      "key": "K002",
      "value":
      {
        "first name" : "Vladimir" ,
        "last name" : "Putin"
        }
    }
  ]
}

По сути, мое преобразование изменило бы начало и конец сообщения, а не поле каждой записи.

Кто-нибудь сделал что-то подобное, или есть указание, куда мне идти?

2 ответа

Решение

Вне экосистемы Kafka вы можете использовать NiFi или Streamsets для этих "преобразований сообщений", которые вы ищете, и оба могут выполнять HTTP-вызовы, а также сами запускать HTTP-серверы для прямого использования API.

Вы, вероятно, хотите, чтобы приложение Kafka Streams сделало это. Он подпишется на исходную тему, заполняемую через REST из приложения A, преобразует сообщение по мере необходимости и записывает его в новую тему, из которой приложение B может ее использовать.

Kafka Streams является частью Apache Kafka и представляет собой библиотеку Java, с помощью которой вы можете создавать приложения потоковой обработки. Существует также KSQL, который является абстракцией поверх потоков Kafka на языке, подобном SQL, но я не уверен, что он будет поддерживать тип преобразования, который вы здесь смотрите.

Поскольку вы не используете Kafka Connect, преобразование одного сообщения (SMT) здесь не применимо.

Другие вопросы по тегам