高流量环境下使用kafka producer时的连接管理

Connection management when using kafka producer in high traffic environment

我打算在每天超过十亿个请求的非常高流量的环境中使用kafka。每个请求都会连接到 kafka 集群以发送消息。所以每一秒都会有那么多的连接不断地建立起来。这可能会导致套接字超时等问题。 生产者正在建立所有非持久连接。因此在这种情况下可能会出现套接字超时或端口耗尽问题。

大部分生态系统都在 php 中,所以我必须使用 php kafka 库。现在如何有效地使用 kafka 生产者来缓解这种连接争用?

我想到了一个可以接收消息的守护进程,然后它将这些消息批量发送到kafka集群。好的一面是连接数量有限。缺点是此类服务的响应延迟会阻碍应用程序。我还必须使用一些中间存储来保存消息。

现在我知道有很多非常高的流量 applications/sites 使用 kafka 直接流式传输消息。你们中的任何人都可以指导我如何解决这些问题吗?持久连接在这种情况下有帮助吗?在如此高容量的环境中使用 php kafka-producer 库本身是个坏主意吗?

我们正在使用 kafka java 库,我们在服务器启动时连接到 kafka。目前,我们每天向 kafka 发送大约 5 亿条消息,并且从未遇到过任何问题。

创建 Producer 时,它基本上会创建多个连接……每个分区一个。因此,只要您使用分区,就可以将每条消息直接发送到 kafka,而无需将它们缓存在您身边并批量发送。

我们也使用 kafka java 库,我们这样做就像@apatel 说的那样,我认为在你的情况下你可以尝试使用 php 应用程序,sidecar 为你的服务器提供一些 sidecar将在启动时创建生产者,Kafka java 驱动程序将管理多个连接。这是一些关于 Netflix 的 sidecar 应用程序的有趣文章 Netflix Prana