2017-01-14 26 views
1

我有一個3節點的cassandra集羣。一項工作正在寫入一個特定的節點,我嘗試在一個單獨的線程中讀取數據,這個線程可能以不同的cassandra節點結束。即使數據由單獨的線程在不同的線程查詢10到15秒之前插入,我也不會從卡桑德拉獲取數據。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)編寫代碼,因此您的羣集可能不「健康」,並且沒有副本節點存在/或者存在連接問題,寫入操作仍會成功,因爲它們被寫入提示轉交。

檢查了這一點,您可以:以LOCAL_ONE

  1. 更改寫一致性/ 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)和準備的語句 - 這將確保該客戶端將寫入具有副本的節點。

相關問題