当前位置: 首页 > 知识库问答 >
问题:

Cassandra集群性能差

米丰
2023-03-14

我有一个由4个节点组成的Cassandra(2.2.1)集群,由Java客户端应用程序使用。复制因子为3,读写的一致性级别为LOCAL_QUORUM。每个节点大约有5 GB的数据。请求量约为每秒2-4k。几乎没有删除操作,因此创建了少量的墓碑。

一段时间前,我注意到读写性能很差,而且随着时间的推移,性能越来越差——集群变得非常慢。读取(通常)和写入超时已变得非常频繁。硬件不应该引起问题,部署集群的服务器在磁盘性能、CPU和RAM资源方面确实很好。

我不清楚问题的原因,但我注意到几个日志条目可能指向根本原因:

>

  • Java 客户机应用程序日志中的异常堆栈跟踪:

    com.datastax.driver.core.exceptions.ReadTimeoutException:一致性LOCAL_QUORUM读取查询期间Cassandra超时(需要2个响应,但只有1个副本响应)

    有趣的是,1个节点仍然响应。

    失败提示错误的几个条目:

    未能将提示重放到/1.1.1.1;正在中止(已传递135922),错误:操作超时-仅收到0个响应。

    卡桑德拉日志中存在以下几个例外:

    请求期间出现意外异常;channel = [id: 0x10fc77df,/2 . 2 . 2:54459:

    失败的批处理错误:

    [ 的准备语句批次

    看起来批量太大了,顺便说一下,我们有很多批量操作。可能批次影响系统?

    最后,最常见的异常——在将日志记录级别切换到调试之后,这些条目会一个接一个地出现:

    你知道什么会导致这个问题吗?

    谢谢大家!

  • 共有2个答案

    都阳
    2023-03-14

    它实际上可能连接到无法处理提示的线程有限内存。这可以通过增加-Xss来解决。查看更多:https://issues.apache.org/jira/browse/CASSANDRA-4740

    齐夕
    2023-03-14

    对于第一点,我有一个想法:

    当您发出查询时,总有一个线程应该处理它。

    如果人数太多,应该有一个队列来组织他们。

    线程在队列中可以等待的次数也会超时。

    所以您的副本回复不够快,因为为特定查询服务的一些线程被丢弃了。

    考虑一下写/读线程的数量。如果你的系统足够好,你可以在那个领域分配更多的工人。

    我记得玩了一会儿卡桑德拉压力,速率线程=默认为32。考虑增加卡桑德拉.yaml的数量

      < li >并发读取数从32到128 < li >并发写入从32到128

    你也可以考虑减少数字。我建议进行测试和重新测试

    您还可以使用超时(一个线程可以在队列中驻留多少时间来提供响应)

    • read_request_timeout_in_ms从5000到10000
    • 从2000write_request_timeout_in_ms到5000左右

    关于第2点。我怀疑是一样的,你的节点正在尝试回复提示,所以发生了2件事:

    >

  • 未到达节点(检查一些网络问题)

    也许你需要分配更多的工作线程,影响max_hints_delivery_threads。

    第3点看起来与第1点相关。

    祝你好运。

  •  类似资料:
    • 使用Cassandra,可以在具有特定列的表上指定集群顺序。

    • 我有两个集群-1。Cloudera Hadoop-Spark作业在这里运行2。云-卡桑德拉星团,多DC 在编写从spark作业到cassandra集群的dataframe时,我在编写之前在spark中进行了重新分区(repartioncount=10)。见下文: 在我的多租户spark集群中,对于一个有20M记录的spark批加载,以及以下配置,我看到了很多任务失败、资源抢占和动态失败。 PS:我

    • 我必须为每个客户端每秒存储大约250个数值,即每小时大约90万个数字。它可能不会是全天的记录(可能每天5-10个小时),但我会根据客户端ID和读取日期对数据进行分区。最大行长约为22-23M,这仍然是可管理的。无论如何,我的方案看起来像这样: 密钥空间的复制因子为2,仅用于测试,告密者为和。我知道复制因子3更符合生产标准。 接下来,我在公司服务器上创建了一个小型集群,三台裸机虚拟化机器,具有2个C

    • 注:内容翻译自 Performance 理解性能 etcd 提供稳定的,持续的高性能。两个定义性能的因素:延迟(latency)和吞吐量(throughput)。延迟是完成操作的时间。吞吐量是在某个时间期间之内完成操作的总数量。当 etcd 接收并发客户端请求时,通常平均延迟随着总体吞吐量增加而增加。在通常的云环境,比如 Google Compute Engine (GCE) 标准的 n-4 或者

    • 本文档介绍如何构建测试场景对 DM 集群进行性能测试,包括数据迁移速度、延迟等。 迁移数据流 可以使用简单的迁移数据流来测试 DM 集群的数据迁移性能,即单个 MySQL 实例到 TiDB 的数据迁移:MySQL -> DM -> TiDB。 部署测试环境 使用 TiUP 部署 TiDB 测试集群,所有配置使用 TiUP 提供的默认配置。 部署 MySQL 服务,开启 ROW 模式 binlog,

    • 命令在rest两个节点上运行,一切正常。当我想跑的时候 nodetool状态 命令时,我得到了这个错误消息