我正在使用NiFi中的QueryCassandra处理器从Cassandra获取数据,但我的查询正在超时异常。我想在从处理器运行 CQL 查询时增加请求超时。有没有办法做到这一点,否则我将不得不编写一个自定义处理器?
您很可能收到异常,因为您正在对非分区键执行查询 - 在这种情况下,查询将分发到所有节点,并且需要遍历所有可用数据,如果您有大数据集,这会非常慢。
在 Cassandra 中,查询只有在(至少(分区键上执行查询时才很快。如果需要在非分区列上进行搜索,则需要重新建模表以匹配查询。我建议参加 DataStax Academy 的 DS220 课程,以便更好地了解 Cassandra 的工作原理。
正如@Alex ott所说,不建议查询非分区键。如果您仍希望这样做并增加查询的超时,只需将属性Max Wait Time
为所需的任何超时即可。
编辑:
tl;dr:Apache 的超时包装器并没有真正让你使用超时选项。
既然您提到这是一个 DataStax 异常而不是java.util.concurrent.TimeoutException
,我可以告诉您我已经研究了QueryCassandra
处理器的源代码,似乎 Apache 只是用Future
包装了查询函数以实现超时,而不是使用 DataStax 的内置超时选项。这会导致 DataStax 驱动程序默认的不可更改超时。它应该作为一个错误报告给Apache。