2017-01-14 8 views
1

私は3ノードのcassandraクラスタを持っています。ジョブが特定のノードに書き込んでいて、別のスレッドでデータを読み込もうとしました。別のスレッドで、別のcassandraノードで終了する可能性があります。私は別のスレッドによるデータの場合でも、別のスレッドによるクエリの10〜15秒前にそれを挿入しても、cassandraからデータを取得しません。Cassandra - 別のスレッドによる書き込み後にデータが返されない

私の複製因子は以下の通りです。

SELECT * FROM system.schema_keyspaces;

keyspace_name  | durable_writes | strategy_class          | strategy_options 
--------------------+----------------+------------------------------------------------------+---------------------------- 
      application |   True | org.apache.cassandra.locator.NetworkTopologyStrategy |    {"DC1":"3"} 
system_distributed |   True |   org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"3"} 
      system |   True |   org.apache.cassandra.locator.LocalStrategy |       {} 

一貫性: -

読み取りと書き込みが別のアプリケーションによって起こっています。

データを書き込むアプリケーションは、整合性レベルをANYに設定しました。 データを読み取るアプリケーションが整合性レベルをQUORUMに設定しました。

ここに設定がありませんか?

ありがとうございました

+0

RFとは何ですか、書き込み要求と読み取り要求の一貫性レベルは何ですか? – RussS

+0

詳細をスレッドに反映しました。 – user1578872

答えて

2

15秒は非常に長いので、データが表示されます。

ANY(http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/dml/dmlConfigConsistency.html)で書いているので、クラスタが「正常」でなく、レプリカノードが存在しないか、または接続に問題があり、ヒントハンドオフに書き込まれたために書き込みが成功する可能性があります。

これをチェックするには次のことができます。

  1. 変更はLOCAL_ONE/ONEに一貫性を書く - これは、少なくとも一つのレプリカがデータを受信したことを保証します。
  2. 確率トレースを有効にして(http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/tools/toolsSetTraceProbability.html)、書き込みが配信されているかどうかを確認します。

書き込みスレッドバッチ処理を使用するか、 独立してそれぞれの行を書いている - あなたはバッチ処理を使用して、トークンを認識ポリシー(http://docs.datastax.com/en/drivers/java/3.0/com/datastax/driver/core/policies/TokenAwarePolicy.html)とプリペアドステートメントを使用していることを確認し使用していない場合 - クライアントが書き込みすることを保証することレプリカを持つノード。

関連する問題