DSE/Solr:无法记录QUEUE延迟

3
使用DSE 4.8.7,我们能够每秒向Cassandra表中插入大约1000条记录,并通过Solr对其进行索引。一段时间内(大概30-60分钟),吞吐量是正常的,直到5个节点中的2-3个节点开始在日志中显示以下消息:
INFO  [datastore.data Index WorkPool work thread-0] 2016-05-17 19:28:26,183  AbstractMetrics.java:114 - Cannot record QUEUE latency of 29 minutes because higher than 10 minutes.

此时,插入吞吐量下降至每秒2-10个记录。重新启动节点可以解决此问题。整个群集中所有节点的操作系统负载和IO都很低。此外,在查看nodetool状态时,没有待处理任务。
这个问题几乎是直接从这里复制过来的,我故意这样做是因为(a)这似乎仍然是一个问题,(b)我无法在那个问题下进行评论。

FYI,我也想知道AbstractMetrics.java在哪里。我在solr或cassandra代码库中没有看到它。它是特定于DSE的吗? - Shion Deysarkar
可能会有用 http://www.sestevez.com/tuning-dse-search/ - phact
谢谢,但我们已经阅读了那篇文章。我们会重新查看它,但我认为我们当前的问题不在那篇文章之内。 - Shion Deysarkar
我的直觉告诉我,并发索引器太少了,你需要找到平衡点。你有没有查看过索引队列的JMX指标? - phact
你能解决这个问题吗?如果可以,你是怎么解决的?@phact 我仍然面临着这个问题,重启节点也无法解决。我已经发布了一个单独的问题来解决这个问题http://stackoverflow.com/questions/39493387/cannot-record-queue-latency-of-n-minutes-dse - Hitesh
我认为我们从未解决过这个问题。我不知道有没有明确的解决方案。 - Shion Deysarkar
1个回答

0

我认为在这里发表一个答案是值得的,尽管我也以几乎相同的方式回答了以下问题:

无法记录 n 分钟的 QUEUE 延迟 - DSE

当 Solr 节点正在摄取记录时,它不仅必须将记录摄取到正常的 Cassandra 写入路径中,还必须将记录摄取到 Solr 写入路径中。Cassandra 压缩正在进行,Solr 的等效压缩(Lucene 合并)也在进行。压缩和合并都需要大量的磁盘 I/O。

默认情况下,dse.yaml 将注释掉 max_solr_concurrency_per_core 设置,这可能意味着您的索引跨您的 solr 核心分配了太多线程。

上面博客中由 @phact 链接的帖子确实是一个好的起点。监视 IndexPool mBean 是检查的好地方。检查 QueueDepth 并查看其是否增加,如果是,则节点无法跟上索引吞吐量,现在是查看 CPU 和 I/O 的时候了。如果您没有看到高 CPU,则可以增加并发性。

在大型集群中,通常会在具有Cassandra节点的DC中进行高速摄取,并在其自己的DC中复制到Solr节点。像这样的分割工作负载也可能是一个很好的考虑因素。
另一件事情就是您的索引大小,通过在模式中设置omitNorms=true等内容来减小文本字段等内容的大小,可以大大减小索引的大小。
我将在下面发布一些文档链接,这可能会对您有所帮助。

https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchTune.html

https://docs.datastax.com/en/datastax_enterprise/4.8/datastax_enterprise/srch/srchCmtQryMbeans.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接