Kafka - 如何将 Rest 服务消息转换为 kafka 主题?

Kafka - how to transform Rest service message to ingest into a kafka topic?

我是 kafka 社区的新手,我正面临一个具有挑战性的问题。 我有两个应用程序通过 Rest 网络服务相互交谈,body 是 json 消息。

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

这是我的 As-Is 场景:

我的To-Be场景:

我想过使用 STM 或一些拦截器来转换 header 和 body。

这样可以吗?我知道我必须将 body 从:

      {
        "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"
        }
    }
  ]
}

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

有没有人做过类似的事情,或者有指示我应该走哪条路?

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

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

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

在 Kafka 生态系统之外,您可以使用 NiFi 或 Streamsets 来满足您正在寻找的 "message transforms",两者都可以进行 HTTP 调用以及自己启动 HTTP 服务器以供直接 API 消费.