Кафка - как превратить сообщение сервиса 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) здесь не применимо.