2

我是 kafka 社区的新手,我面临一个具有挑战性的问题。我有两个应用程序通过 Rest webservice 相互通信,正文是 json 消息。

如何使用 kafka 作为这两个应用程序之间的中间件,对应用程序的影响很小或为零?

这是我的原样场景:

https://i.imgur.com/i4yoFHd.png

我的未来场景:

https://i.imgur.com/z05ceQj.png

我曾想过使用 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"
        }
    }
  ]
}

本质上,我的转换会改变消息的开头和结尾,而不是每条记录的字段。

任何人都做过类似的事情,或者有迹象表明我应该走哪条路?

4

2 回答 2

0

您可能希望 Kafka Streams 应用程序来执行此操作。它将订阅应用程序 A 通过 REST 填充的源主题,根据需要转换消息并将其写入新主题,应用程序 B 可以从中使用它。

Kafka Streams 是 Apache Kafka 的一部分,是一个 Java 库,您可以使用它构建流处理应用程序。还有 KSQL,它是 Kafka Streams 之上的一种抽象,采用类似 SQL 的语言,但我不确定它是否支持您在此处查看的转换类型。

由于您没有使用 Kafka Connect,因此单消息转换 (SMT) 不适用于此处。

于 2019-01-25T17:04:22.557 回答
0

在 Kafka 生态系统之外,您可以将 NiFi 或 Streamsets 用于您正在寻找的这些“消息转换”,并且两者都可以进行 HTTP 调用以及启动 HTTP 服务器本身以直接使用 API。

于 2019-01-25T22:48:10.980 回答