Apache kafka HTTP请求源到Kafka接收器?

Apache kafka HTTP请求源到Kafka接收器?,apache-kafka,playframework,akka-stream,Apache Kafka,Playframework,Akka Stream,如何将play POST路线连接到卡夫卡接收器 我找到了。 但它使用一个随机数字的记号源来连接卡夫卡接收器 如何使POST请求路由成为连接到Kafka接收器的源 编辑:POST请求正文的格式为json,内容类型为application/json。发送给卡夫卡的消息应该是完全相同的json。路由需要一条json消息。也许我误解了您的问题,但您可以使用REST代理向Kafka发送消息: curl -X POST -H "Content-Type: application/vnd.kafka.json

如何将play POST路线连接到卡夫卡接收器

我找到了。 但它使用一个随机数字的记号源来连接卡夫卡接收器

如何使POST请求路由成为连接到Kafka接收器的源


编辑:POST请求正文的格式为json,内容类型为application/json。发送给卡夫卡的消息应该是完全相同的json。路由需要一条json消息。

也许我误解了您的问题,但您可以使用REST代理向Kafka发送消息:

curl -X POST -H "Content-Type: application/vnd.kafka.json.v2+json" \
      --data '{ "records": [ { "value": { "name": "testUser0" } }, { "value": { "name": "testUser1" } } ] }' \
      "http://localhost:8082/topics/jsontest"

Ref:

也许我误解了您的问题,但您可以使用REST代理向卡夫卡发送消息:

curl -X POST -H "Content-Type: application/vnd.kafka.json.v2+json" \
      --data '{ "records": [ { "value": { "name": "testUser0" } }, { "value": { "name": "testUser1" } } ] }' \
      "http://localhost:8082/topics/jsontest"

参考:

由于您的POST请求直接一对一地进入卡夫卡,因此不清楚Akka Streams提供的流媒体模型是否适合。直接使用API可能更简单,一次发送一条消息到卡夫卡主题。这将使代码,特别是错误处理变得更加简单

可能仍然有很好的理由选择使用Akka流,例如管理并发或排序。具体原因可能会影响最佳解决方案,因此如果您有更多详细信息,请补充问题,我将更新答案

例如,如果要确保没有并发写入,可以在Guice中将类注册为单例(假设您使用Guice进行依赖项注入)。创建时,它使用卡夫卡
接收器运行Akka流,或与卡夫卡
接收器一起运行。如果出现错误,它还需要确保流重新启动。公开一个公共方法,该方法允许调用者向具体化的源队列或参与者发送消息,然后将单例注入控制器类,以允许它使用该方法发布其POST数据


这种方法的一大缺点是,控制器操作只能知道消息已成功发送到流,而不能知道消息已成功写入Kafka。如果Kafka代理关闭,应用程序崩溃,或由于其他原因写入失败,则消息可能会丢失,即使在将成功结果返回给发起客户端之后也是如此。这不是所有用例的问题,但需要考虑。

因为您的POST请求直接一对一地进入Kafka,所以不清楚Akka Streams提供的流模型是否适合。直接使用API可能更简单,一次发送一条消息到卡夫卡主题。这将使代码,特别是错误处理变得更加简单

可能仍然有很好的理由选择使用Akka流,例如管理并发或排序。具体原因可能会影响最佳解决方案,因此如果您有更多详细信息,请补充问题,我将更新答案

例如,如果要确保没有并发写入,可以在Guice中将类注册为单例(假设您使用Guice进行依赖项注入)。创建时,它使用卡夫卡
接收器运行Akka流,或与卡夫卡
接收器一起运行。如果出现错误,它还需要确保流重新启动。公开一个公共方法,该方法允许调用者向具体化的源队列或参与者发送消息,然后将单例注入控制器类,以允许它使用该方法发布其POST数据


这种方法的一大缺点是,控制器操作只能知道消息已成功发送到流,而不能知道消息已成功写入Kafka。如果Kafka代理关闭,应用程序崩溃,或由于其他原因写入失败,则消息可能会丢失,即使在将成功结果返回给发起客户端之后也是如此。这不是所有用例的问题,但需要考虑。

请为问题添加更多细节:POST请求数据的格式是什么?你能描述一下这应该如何转化为发表给卡夫卡的信息吗?每个请求中是否有消息流,或者您想在一条消息中将完整的帖子正文发送给卡夫卡?@Timmore我添加了您提到的编辑。请添加更多详细信息到问题:帖子请求数据的格式是什么?你能描述一下这应该如何转化为发表给卡夫卡的信息吗?每个请求中是否都有消息流,或者您想在一条消息中将完整的帖子正文发送给卡夫卡?@Timmore我添加了您提到的编辑。我已经考虑过这一点。我没有这样做,因为我可能希望在将来向这个流中添加authZ和authN等功能以及其他接收器。我没有这样做,因为我可能希望在将来将authZ和authN等功能以及其他接收器添加到此流中。