【发布时间】:2019-07-19 09:39:50
【问题描述】:
我在 NiFi 中使用 QueryCassandra 处理器从 Cassandra 获取数据,但我的查询出现超时异常。我想在从处理器运行 CQL 查询时增加请求超时。有没有办法做到这一点,否则我将不得不编写一个自定义处理器?
【问题讨论】:
标签: cassandra apache-nifi hortonworks-dataflow
我在 NiFi 中使用 QueryCassandra 处理器从 Cassandra 获取数据,但我的查询出现超时异常。我想在从处理器运行 CQL 查询时增加请求超时。有没有办法做到这一点,否则我将不得不编写一个自定义处理器?
【问题讨论】:
标签: cassandra apache-nifi hortonworks-dataflow
您很可能会遇到异常,因为您正在对非分区键执行查询 - 在这种情况下,查询被分发到所有节点,并且需要遍历所有可用数据,这非常慢如果你有大数据集。
在 Cassandra 中,只有在(至少)分区键上执行查询时,查询才会很快。如果您需要搜索非分区列,那么您需要重新建模您的表以匹配您的查询。我建议参加 DataStax Academy 上的 DS220 课程,以更好地了解 Cassandra 的工作原理。
【讨论】:
正如@Alex ott 所说,不建议查询非分区键。如果您仍想这样做并增加查询的超时时间,只需将 Max Wait Time 属性设置为您想要的任何超时时间。
编辑:
tl;dr:Apache 的超时包装器并没有真正让您使用超时选项。
既然您提到这是一个 DataStax 异常,而不是 java.util.concurrent.TimeoutException,我可以告诉您,我已经查看了 QueryCassandra 处理器的 source code,看起来 Apache 只是用 @987654325 包装了查询函数@ 来实现超时,而不是使用 DataStax 的内置超时选项。这会导致 DataStax 驱动程序默认的不可更改超时。它应该作为一个错误报告给 Apache。
【讨论】: