por qué ocurre el tiempo de espera de rpc en cassandra

Intenté usar la versión cqlsh -3 en mi espacio de teclas y usé la consulta de selección en una familia de columnas. Devuelve datos en algunas causas y arroja el tiempo de espera de RPC en otras causas, no sé la causa raíz exacta. Utilicé la consulta de selección con una sola condición donde

select * FROM date where date='2013-10-11 00:00:00+0000'; 

En esta columna de fecha tiene un índice secundario con texto de tipo de datos en formato UTF8

Request did not complete within rpc_timeout.

Verifiqué con cassandra log.it lanza

ERROR [ReadStage:117] 2013-12-03 19:21:46,813 CassandraDaemon.java (line 192) Exception in thread Thread[ReadStage:117,5,main]
at org.apache.cassandra.db.columniterator.SSTableNamesIterator.read(SSTableNamesIterator.java:119)
at org.apache.cassandra.db.columniterator.SSTableNamesIterator.<init>(SSTableNamesIterator.java:60)
at org.apache.cassandra.db.filter.NamesQueryFilter.getSSTableColumnIterator(NamesQueryFilter.java:81)
at org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:68)
at org.apache.cassandra.db.CollationController.collectTimeOrderedData(CollationController.java:132)
at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:65)
at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1390)
at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1213)
at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1125)
at org.apache.cassandra.db.index.keys.KeysSearcher$1.computeNext(KeysSearcher.java:191)
at org.apache.cassandra.db.index.keys.KeysSearcher$1.computeNext(KeysSearcher.java:109)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at org.apache.cassandra.db.ColumnFamilyStore.filter(ColumnFamilyStore.java:1499)
at org.apache.cassandra.db.index.keys.KeysSearcher.search(KeysSearcher.java:82)
at org.apache.cassandra.db.index.SecondaryIndexManager.search(SecondaryIndexManager.java:548)
at org.apache.cassandra.db.ColumnFamilyStore.search(ColumnFamilyStore.java:1487)
at org.apache.cassandra.service.RangeSliceVerbHandler.executeLocally(RangeSliceVerbHandler.java:44)
at org.apache.cassandra.service.StorageProxy$LocalRangeSliceRunnable.runMayThrow(StorageProxy.java:1055)
at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1547)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)

porque pasa esto? Estoy comprobando en mi local con una sola semilla?

Update 1:

estructura de mi tabla de fechas

CREATE TABLE date (
  key text PRIMARY KEY,
  date text,
  date_id text,
  day bigint,
  day_name text
) WITH COMPACT STORAGE AND
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  compaction={'min_sstable_size': '52428800', 'class': 'SizeTieredCompactionStrategy'} AND
  compression={'chunk_length_kb': '64', 'sstable_compression': 'SnappyCompressor'};

Verifiqué con el registro de Cassandra, sus espectáculos

ERROR [ReadStage:94] 2013-12-03 22:07:17,116 CassandraDaemon.java (line 192) Exception in thread Thread[ReadStage:94,5,main]
java.lang.AssertionError: DecoratedKey(-8665312888645846270,.......................<!--some bytes of numbers------->
/var/lib/cassandra/data/keyspace/columnfamily/keyspace-columnfamily-ic-1-Data.db
        at org.apache.cassandra.db.columniterator.SSTableNamesIterator.read(SSTableNamesIterator.java:119)
        at org.apache.cassandra.db.columniterator.SSTableNamesIterator.<init>(SSTableNamesIterator.java:60)
        at org.apache.cassandra.db.filter.NamesQueryFilter.getSSTableColumnIterator(NamesQueryFilter.java:81)
        at org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:68)
        at org.apache.cassandra.db.CollationController.collectTimeOrderedData(CollationController.java:132)
        at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:65)
        at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1390)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1213)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1125)
        at org.apache.cassandra.db.Table.getRow(Table.java:347)
        at org.apache.cassandra.db.SliceByNamesReadCommand.getRow(SliceByNamesReadCommand.java:64)
        at org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:1033)
        at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1547)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:724)

actualmente estoy usando cassandra-1.2.6. Verifico con este enlace, ¿es este problema de Cassandra? https://issues.apache.org/jira/browse/CASSANDRA-4687

preguntado el 03 de diciembre de 13 a las 14:12

¿Podrías agregar la consulta? (¿es muy caro?) -

Hola @lorcan, edité la pregunta con query, verifique y dé sus sugerencias:

Hola @kumar, si, eso miradas como el mismo problema. ¿Probablemente sea mejor seguir allí? -

Sin embargo, mi respuesta sigue en pie: si está indexando muchos valores únicos en su date columna y consulta sobre que usted debe considerar la remodelación. -

1 Respuestas

Si su consulta es costosa, esto puede generar tiempos de espera de rpc. Hay un montón de preguntas SO a lo largo de esta línea para diferentes tipos de consulta, por ejemplo, Obtener todos los registros para un ID de partición en Cassandra genera un tiempo de espera de RPC, Tiempo de espera de RPC en cqlsh - Cassandra (seleccione recuento(*) de consultas). Sin embargo, su pregunta se relaciona específicamente con los índices secundarios.

Debe evitarse la consulta de índices secundarios if la cantidad de entradas indexadas únicas es alta, ya que son mucho más costosas que consultar por clave (sospecho que este es el caso si está usando fechas). ¿Quizás hay una mejor manera de modelar sus datos? (Si agrega el modelo de datos a su pregunta, puedo intentar elaborar esta respuesta).

contestado el 23 de mayo de 17 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.