ApacheFlink支持使用http请求作为输入和输出吗?

dzjeubhm  于 2021-06-21  发布在  Flink
关注(0)|答案(2)|浏览(1090)

举一个有趣的例子,假设我想构建一个web应用程序,它接收一个id和$amount的http请求,并返回一个id在24小时内支付的总额为$amount的响应。使用apache flink,如果输入和输出是kafka流,那么当然可以创建该应用程序。
但是,是否支持/可能创建一个flink应用程序,其中输入是http请求,输出是对http请求的响应?
如果flink不支持这一点,是否还有其他数据流框架支持这一点?
(对于上面的玩具示例,我认为有比使用flink更简单的解决方案,但我真正的用例是通过http请求流进行多个窗口和其他有状态计算。)

f3temu5u

f3temu5u1#

flink不提供正式的http源或汇,但您可以基于汇和源基类实现自己的源或汇。但是我不认为这是“正确”的方法,flink的设计不是为了接收http请求并直接应答它们,flink通常使用某种持久数据源/接收器,以便在应用程序失败时可以重新创建/重新计算状态。
我建议你使用类似Kafka桥的东西:https://strimzi.io/blog/2019/07/19/http-bridge-intro/,它允许http客户端使用简单的请求来编写和使用来自kafka主题的消息。在这个场景中,您将让客户机将数量和id数据发布到一个主题,然后flink将使用这个主题作为输入,并将结果输出到第二个主题。最后,您的客户可以再次请求投票结果:
客户->Kafka布里奇->输入主题->flink->结果主题
客户端->Kafka布里奇->结果主题

5w9g7ksd

5w9g7ksd2#

flink本身没有http源或接收器,但是apachebahir中有一个基于netty的源,这就是您想要的。你可以找到更多关于 bahir-netty 在这里。但据我所知,没有一个接收器可以作为http请求发送数据,所以您可能需要自己实现它。

相关问题