我正在尝试解析数以千万计的office文档。PDF、docs、excels、xmls等。种类繁多。
吞吐量非常重要。我需要能够在合理的时间内解析这些文件,但同时,准确性也非常重要。我希望有不到10%的文件解析失败(我所说的失败是指由于tika稳定性导致的失败,比如解析时的超时。我不是说由于文件本身而失败)。
我的问题是-如何在容器化环境中配置tika服务器以最大化吞吐量?
我的环境:
我正在使用openshift。
每个tika解析pod都有cpu:2核到2核,内存:8gib到10gib。
我有10个提卡的复制品。
在每个pod上,我运行一个java程序,其中有8个解析线程。
每条线:
启动单个tika服务器进程(在生成子模式下)
tika服务器参数: -s -spawnChild -maxChildStartupMillis 120000 -pingPulseMillis 500 -pingTimeoutMillis 30000 -taskPulseMillis 500 -taskTimeoutMillis 120000 -JXmx512m -enableUnsecureFeatures -enableFileUrl
现在,线程将连续地从files to fetch队列中获取一个文件,并将其发送到tika服务器,当没有更多的文件要解析时停止。
这些文件中的每一个都本地存储在pod的缓冲区中,因此使用本地文件优化:
它使用的tika web服务是:
Endpoint: `/rmeta/text`
Method: `PUT`
Headers:
- writeLimit = 32000000
- maxEmbeddedResources = 0
- fileUrl = file:///path/to/file
文件大小不超过100mb,tika text的最大字节数将为(writelimit)32mb。
每个pod每天解析大约370000个文档。我尝试了很多不同的设置。
我以前尝试过使用实际的tika“forkparser”,但是性能比生成tika服务器差得多。所以这就是我使用tika服务器的原因。
我不讨厌这样的表演结果。。。。但我觉得我最好伸出援手,确保没有人在那里谁健全检查我的数字,就像“哇,这是可怕的性能,你应该得到像我一样的xyz!”
有人有你正在做的类似的事情吗?如果是这样,你最终选择了什么样的设置?
另外,我想知道当我调用我的tika服务器时,apachehttp客户机是否会造成任何开销 /rmeta/text
终结点。我正在使用共享连接池。对每个线程使用一个唯一的httpclients.createdefault()而不是在线程之间共享一个连接池,会有什么好处吗?
暂无答案!
目前还没有任何答案,快来回答吧!