Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 快速将数据从websocket传送/接收到elasticsearch,以避免缓冲区过载_Php_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Websocket_Logstash_Data Ingestion - Fatal编程技术网 elasticsearch,websocket,logstash,data-ingestion,Php,elasticsearch,Websocket,Logstash,Data Ingestion" /> elasticsearch,websocket,logstash,data-ingestion,Php,elasticsearch,Websocket,Logstash,Data Ingestion" />

Php 快速将数据从websocket传送/接收到elasticsearch,以避免缓冲区过载

Php 快速将数据从websocket传送/接收到elasticsearch,以避免缓冲区过载,php,elasticsearch,websocket,logstash,data-ingestion,Php,elasticsearch,Websocket,Logstash,Data Ingestion,我正在从事的项目以难以置信的速度从单个WebSocket读取数据。我遇到的问题是websocket提供程序要求您尽快处理数据,以避免数据端的临时缓冲区溢出 我遇到的问题是,我使用PHP尝试在我们从websocket收到的每条消息上将文档索引到elasticsearch中,但速度不够快,最终导致套接字关闭,因为缓冲区/队列已满 我希望能寻求一些帮助,在不丢失套接字中的任何数据的情况下,找到最好的解决方案 我的理论是: 连接到sock并保持连接 接收到的每条消息都会切换到一个异步进程或日志存储,该进

我正在从事的项目以难以置信的速度从单个WebSocket读取数据。我遇到的问题是websocket提供程序要求您尽快处理数据,以避免数据端的临时缓冲区溢出

我遇到的问题是,我使用PHP尝试在我们从websocket收到的每条消息上将文档索引到elasticsearch中,但速度不够快,最终导致套接字关闭,因为缓冲区/队列已满

我希望能寻求一些帮助,在不丢失套接字中的任何数据的情况下,找到最好的解决方案

我的理论是:

  • 连接到sock并保持连接
  • 接收到的每条消息都会切换到一个异步进程或日志存储,该进程或日志存储可以处理对elasticsearch的接收,而无需websocket在发送/处理下一条消息之前等待
  • 使用elasticsearch PHP为每条消息编制索引根本无法剪切消息,10分钟后套接字关闭

    服务器资源良好,16核,128gb ram,10gbps连接。如果我从PHP代码中删除elasticsearch索引函数,套接字将保持良好连接,服务器资源使用率约为10%

    有更多经验的人能提出更好的解决方案吗,或者可能让logstash在不同的线程上处理这个问题


    谢谢

    您每秒收到多少封邮件?您是如何在elasticsearch中编写、使用官方库还是构建自己的请求?elasticsearch是否在同一台机器上?磁盘是基于HDD还是基于SSD?您需要提供更多信息,但是如果您的elasticsearch能够跟上每秒事件的数量,那么最好使用类似Kafka的消息队列。写进卡夫卡,而不是使用logstash或其他东西来读取卡夫卡并写进elasticsearch。同时尝试使用批量请求,我知道在流量较低的情况下,它可能比直接发送要慢,但这是一种调整,这样你就可以发送尽可能多的集群能够处理的数据,我可以问一下你想以什么速度进食吗?我有一个每秒约120K事件的集群,如果它能够更高,请让我知道!