Как определить логические / физические чтения и записи в кассандре?

В настоящее время я исследую операции чтения и записи на кассандре. Я хотел бы знать о чтении и записи, которые выполняет кассандра в memtable и sstable. Какое наиболее близкое значение метрики кассандры? Все, что я нашел, - это показатели задержки, но это не то, что я ищу.

Я хотел бы знать, сколько реальных операций чтения и записи происходит, чтобы построить абстрактную модель затрат для некоторых конкретных операций.

Спасибо!

Изменить:

Итак, похоже, что ReadLatency и WriteLatency (показатели таблицы) - это то, что я искал. Однако, если я хочу прочитать метрики, счетчик чтения всегда равен 0.

Моя установка:

  • PopOS! 20.04 / Lenovo P1 G2 (твердотельный накопитель nvme 512 ГБ, оперативная память 16 ГБ)
  • Cassandra 3.11.7 (контейнер Docker)
  • Драйвер Datastax 4.5.1 Java
  • Сбор метрик через Nodetools (использовался исполняемый файл внутри контейнера докеров) или с помощью Telegraf 1.15.2 + Jolokina 1.6.2

Моя конфигурация Telegraf:

  [[inputs.jolokia2_agent.metric]]
    name  = "TableRead"
    mbean = "org.apache.cassandra.metrics:keyspace=*,name=ReadLatency,scope=*,type=Table"
    tag_keys = ["keyspace", "name", "scope"]
    field_prefix = "$2_"

  [[inputs.jolokia2_agent.metric]]
    name  = "TableWrite"
    mbean = "org.apache.cassandra.metrics:keyspace=*,name=WriteLatency,scope=*,type=Table"
    tag_keys = ["keyspace", "name", "scope"]
    field_prefix = "$2_"

Оба показывают счетчик чтения как ноль в моей таблице (счетчик записи увеличивается, как и ожидалось) при выполнении запроса через мое приложение Java следующим образом:

ResultSet rs = cqlSession.execute("SELECT * from myTable");
for(Row r : rs) {
    int id = rs.getObject("someColumn");
}

Почему счетчик чтения не увеличивается?


person Sebastian    schedule 31.07.2020    source источник
comment
Я ознакомился с nodetool tablestats документацией по протоколу передачи данных и они сообщают (локальное) количество операций чтения / записи. Однако нет никакого способа получить доступ к этим значениям через предлагаемые ими метрики. Я что-то упускаю? документация по показателям   -  person Sebastian    schedule 01.08.2020
comment
Это немного вводит в заблуждение, но похоже, что объект Timer сообщает как о задержке, так и о частоте запросов. Вы можете получать запросы на чтение и запись из показателей CoordinatorReadLatency и CoordinatorWriteLatency соответственно.   -  person ShaharZ    schedule 04.08.2020


Ответы (1)


В Cassandra есть как минимум 2 типа метрик чтения / записи:

  • локальное чтение / запись - соответствующие операции, выполняемые репликами
  • чтение / запись на уровне клиента - как это происходит на уровне координатора. Одно чтение / запись на уровне координатора преобразуется в N локальных операций чтения / записи, определяемых уровнем согласованности и коэффициентом репликации.

Страница показателей Кассандры содержит список доступных показателей, и вы можете получить показатели, относящиеся к таблице, или агрегированные для координатор - вам нужно обратить внимание на задержку метрики, например, ReadLatency для таблицы или ClientRequests.Read для координатора.

Для чтения есть и другие важные метрики, такие как количество попаданий SSTables во время чтения конкретной таблицы (чем больше вы попадаете, тем хуже задержка), количество надгробных камней и т. Д. На уровне хоста - такие вещи, как попадание в ключевой кеш. скорость тоже очень важна. В DataStax есть отдельная страница с важными показателями как части их документы передового опыта.

person Alex Ott    schedule 04.08.2020
comment
Большое спасибо! После тщательного изучения я думаю, что ReadLatency и WriteLatency на уровне таблицы - это то, что я искал. Однако я не вижу никаких чтений. Как в этом контексте определяется чтение? Даже если я перебираю всю таблицу (select * from table в Java, а затем перебираю ResultSet), чтения не происходит .. Спасибо! - person Sebastian; 06.08.2020
comment
Как вы собираете данные? - person Alex Ott; 06.08.2020
comment
Не уверен, правильно ли я понял ваш вопрос ... У меня есть установка с одним узлом (только для исследовательских целей), на которой я создаю некоторые случайные данные - после этого я выполняю некоторые манипуляции со схемой и пытаюсь понять поведение. Я действительно прекрасно вижу записи, когда я запускаю обновление, но не читает вообще. Использование последней версии драйвера Datastax Java. - person Sebastian; 06.08.2020
comment
Я имел в виду - как получить эти показатели - через JMX с JConsole или с Prometheus и т. Д.? - person Alex Ott; 06.08.2020
comment
Я использую nodetools или JMX (с Telegraf, InfluxDB и Grafana). Но оба показывают 0 чтений. Возможно, это связано с этим: stackoverflow.com/questions/34577401/ - person Sebastian; 06.08.2020
comment
Пожалуйста, добавьте дополнительную информацию о вашей настройке в Q - версию Cassandra и т. Д. - person Alex Ott; 06.08.2020
comment
Отредактировал это в моем основном вопросе. Ценю вашу помощь! - person Sebastian; 06.08.2020