写入数据来自对kafka的并发请求

noj0wjuj  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(432)

我正在构建一个事件收集器,它将接收一个http请求,如 http://collector.me/?uuid=123&product=D3F4&metric=view 然后将请求参数写入apachekafka主题,现在我使用plug、cowboy和kafkaex。

defmodule Collector.Router do
  import Plug.Conn

  def init(opts) do
    opts
  end

  def call(conn, _opts) do
    conn = fetch_query_params(conn)
    KafkaEx.produce("test", 0, "#{inspect conn.query_params}")
    conn
    |> put_resp_content_type("text/plain")
    |> send_resp(200, "OK")
  end
end

好吧,牛仔会为每个请求生成一个新的过程,所以我想在 call 函数是一种合适的方法,因为它很容易在elixir中创建数十万个进程。但我不知道这样做对不对?在给Kafka写信之前我需要排队吗?我的目标是处理尽可能多的并发请求。
谢谢。

pcww981p

pcww981p1#

考虑使用合流kafkarest代理,因为这样您就不需要编写任何服务器端代码。
https://github.com/confluentinc/kafka-rest
最糟糕的情况是,您可能需要将传入的url重写为格式正确的httppost,其中包含json数据和内容类型的正确http头。这可以通过应用程序和负载平衡器或基本的反向代理(如haproxy或nginx)来完成。

相关问题