Nous utilisons rest api pour exécuter des requêtes dans cassandra et une de nos requêtes qui fetch compte crée des problèmes pour nous.Recevoir des nombres incohérents de cassandra
Nous avons construit un cluster Cassandra et récemment, nous avons fait des sauvegardes et des restaurations et copié toutes les données vers un nouveau cluster. Nous avons fait un rafraîchissement de nodetool sur les tables, et nous avons également réparé le nodetool. Cependant, certains de nos appels API échouent et retournent des résultats incohérents.
1) La requête de comptage comporte des clés de partition. N'a vu aucun délai d'attente de lecture ou aucune erreur de l'appel api.
2) Voici à quoi ressemble notre code de création de session.
val poolingOptions = new PoolingOptions
poolingOptions
.setCoreConnectionsPerHost(HostDistance.LOCAL, 4)
.setMaxConnectionsPerHost(HostDistance.LOCAL, 10)
.setCoreConnectionsPerHost(HostDistance.REMOTE, 4)
.setMaxConnectionsPerHost(HostDistance.REMOTE, 10)
val builtCluster = clusterBuilder.withCredentials(username, password)
.withPoolingOptions(poolingOptions)
.build()
val cassandraSession = builtCluster.get.connect()
val preparedStatement = cassandraSession.prepare(statement).setConsistencyLevel(ConsistencyLevel.QUORUM)
cassandraSession.execute(preparedStatement.bind(args :_*))
configuration du cluster:
6 Machines: 3 graines
cassandra est jamais vers le bas sur toute machine
nous utilisons apache cassandra version 3.9
En utilisant cassandra- artefact de pilote-noyau avec la version 3.1.1.
3) Les tpstats nodetoop ne présentent aucune défaillance.
4) Ne voyez pas d'autres problèmes de system.log de cassandra. Nous voyons juste quelques avertissements comme ci-dessous.
Maximum memory usage reached (512.000MiB), cannot allocate chunk of 1.000MiB
WARN [ScheduledTasks:1] 2017-03-14 14:58:37,141 QueryProcessor.java:103 - 88 prepared statements discarded in the last minute because cache limit reached (32 MB)
Le premier appel api renvoie 0 et les appels api plus tard donnent des valeurs correctes.
S'il vous plaît laissez-moi savoir, si d'autres détails nécessaires.
ce qui est la structure de votre table et quelle requête exécutons vous? –
Nous avons une table avec 4 colonnes, l'une d'elles est la clé de partition et quelques colonnes (une colonne de date + une colonne de texte) a été sélectionnée comme clé de clustering. Nos requêtes ressembleront à ceci. SELECT count (*) FROM nom_table WHERE parition_column =? ET text_column_of_clustering_key =? ET date_column_of_clustering_key <=? ET date_column_of_clustering_key> =? – Srini
Quel est votre stratégie/facteur de réplication? À quel niveau de cohérence les écritures parviennent-elles à cette table? –