我是nginx的新手,我想知道它是否可以帮助我解决我们遇到的一个用例。
我有n个节点,它们从具有相同组id的kafka主题中读取数据,这意味着每个节点都有不相交的数据,通过某个键进行分区。
Nginx无法先验地知道哪个节点有对应于哪个键的数据。但是我们可以建立一个API或者有一个redis实例,它可以告诉我们给定键的节点。
是否有一种方法nginx可以合并这种类型的第三方信息路由请求?
我也欢迎任何答案,即使它不涉及nginx。
Nginx无法先验地知道哪个节点有对应于哪个键的数据
Nginx不需要知道。你需要在Kafka Streams RPC层中使用交互式查询来实现。(Spring- kafka有一个InteractiveQueryService
接口,顺便说一句,可以从Spring Web中使用)。
如果你想为KStreams的HTTP/RPC端点提供一个单一的地址,那么这将是一个标准的Nginxupstream
定义的反向代理,它将路由到任何的后端服务器,它们反过来与自己通信以获取必要的键/值,并将响应返回给客户端。
我不知道Kafka如何分区
你可以看看源代码,发现它使用了murmur2
散列,这在Lua中可用,也可以在Nginx中使用。
但是,同样,这是一个你应该避免的兔子洞。
其他选项,使用Kafka Connect转储数据到Redis(或任何你想要的数据库)。然后编写一个非常类似的HTTP API服务,然后(可选)指向Nginx。