解决 Cassandra Coordinator 节点写入超时的方法
Posted
技术标签:
【中文标题】解决 Cassandra Coordinator 节点写入超时的方法【英文标题】:Approach to resolve Cassandra Coordinator node timeouts on writes 【发布时间】:2019-02-14 13:06:12 【问题描述】:我有一个简单的单节点 Cassandra 集群,其基本键空间配置为 replication_factor=1
在这个键空间中,我们有大约 230 个表。每个表大约有 40 列。我们对这些表的写入速度大约是每天一次在五分钟内写入 30k 次。我有大约 6 个python
worker 脚本,它们一次将这些写入任何一个表,并且它们都将继续进行这些写入,直到当天写入所有 230 个表。脚本使用python cassandra-driver
和一个简单的会话来进行这些写入。至于这里写的数据,很多都是nulls
。
实际上,如果我是对的,这可以被认为是 6 个并发连接,每天 5 分钟内产生 30k+ 个条目。
我了解 cassandra 如何写入和删除工作,并且熟悉协调节点等。我正在观察间歇性发生的回溯,如下所述:
"cassandra/cluster.py", line 2030, in cassandra.cluster.Session.execute (cassandra/cluster.c:38536)
app_nstablebuilder.1.69j772led82k@swarm-worker-gg37 | File "cassandra/cluster.py", line 3844, in cassandra.cluster.ResponseFuture.result (cassandra/cluster.c:80834)
app_nstablebuilder.1.69j772led82k@swarm-worker-gg37 | cassandra.WriteTimeout: Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info='consistency': 'ONE', 'required_responses': 1, 'received_responses': 0
我的问题与如何解决这个问题有关。我无法验证问题是出自我的工作人员脚本还是 Cassandra 集群本身。我应该放慢我的工人写作业的速度吗?我应该运行某种诊断来提高 Cassandra 的性能吗?
到目前为止,我阅读的所有解决方案都与多节点集群有关,而我找不到适用于单节点集群的解决方案。
我觉得我们的集群不健康,我的努力应该针对那里的修复。如果是这样,我不确定从哪里开始。谁能指出我正确的方向?
如果我可以提供任何进一步的信息来提供帮助,请告诉我。
【问题讨论】:
如果我理解正确,您的脚本是否插入了空值?如果是这种情况,那么您正在创建墓碑。更好的方法是从查询中排除那些具有空值的列。 @Horia,是的,插入有大量的空值。在查询中不包括这些空列不会导致墓碑,是吗?我将对此进行实验。您认为这有助于解决这个问题吗? 插入空值将创建墓碑。从查询中排除空列不会创建墓碑。您可以阅读一些关于这件事的内容here。我不确定插入空值是否会导致这种情况,但插入空值(会创建墓碑)绝对是一个问题,并且可能有助于解决您所看到的问题。 谢谢!我在过去的几天里就这样做了,这很有帮助。我们现在很少看到写入失败,并且已经通过on_write_timeouts
方法解决了它。非常感谢你:D
很高兴能帮上忙。我还添加了我的评论作为答案。
【参考方案1】:
插入空值将创建墓碑。从查询中排除空列不会创建墓碑。您可以阅读一些关于这件事的内容here。我不确定插入空值是否会导致这种情况,但插入空值(会创建墓碑)绝对是一个需要考虑的改进。
【讨论】:
以上是关于解决 Cassandra Coordinator 节点写入超时的方法的主要内容,如果未能解决你的问题,请参考以下文章
问题记录CDH版Hue提交Oozie Coordinator调度报500异常
问题记录CDH版Hue提交Oozie Coordinator调度报500异常
启动“Distributed Transaction Coordinator”服务 错误1053