在高流量环境中使用 kafka 生产者时的连接管理

2022-09-04 23:11:41

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

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

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

现在我知道有许多非常高容量的应用程序/站点使用kafka直接流式传输消息。你们中的任何一个人能指导我如何解决这些问题吗?在这种情况下,持久连接能否提供帮助?在如此大容量的环境中使用kafka生产者的php库本身就是一个坏主意吗?


答案 1

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


答案 2

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

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


推荐