NoHostAvailableException с 1000 одновременных запросов к Cassandra с драйвером DataStax Java

Настройка:

-кластер Cassandra 2.0.7.31 с 2 узлами
-replicas=1
-с конфигурацией по умолчанию
-с использованием драйвера Java DataStax 1.0

Действие Простой запрос на вставку с использованием класса QueyBuilder

Результат

com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
            at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:64)
            at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
            at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
            at com.jpmc.es.rtm.storage.impl.EventExtract.main(EventExtract.java:36)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:601)
            at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /10.181.13.239 ([/10.181.13.239] Unexpected exception triggered))
            at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:98)
            at com.datastax.driver.core.RequestHandler$1.run(RequestHandler.java:165)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

person Sarkar    schedule 18.07.2014    source источник
comment
Вы можете подключиться к серверу cassandra с помощью cassandra-cli?   -  person Vishal John    schedule 18.07.2014
comment
да. Я получаю около 85 TPS для upsert для 1000 одновременных обращений. Но я больше жду от Кассандры в отношении TPS. Я смущен тем, что драйвер datastax замедляет все это?   -  person Sarkar    schedule 19.07.2014


Ответы (2)


Проблема заключалась в том, что на моем конце я создал одну модель соединения потока. Что вполне синхронно. Но драйвер Datstax работает асинхронно (я думаю, для этого он использует netty) и принимает несколько запросов по одному соединению. так что в моем случае я один сеанс для каждого запроса и угадайте, что? Я ушел с пулом открытого соединения ч/б Driver и Cassandra. Сервер захлебнулся, так же как и Драйвер. Проблема была решена, просто позволив Драйверу управлять своим пулом.

Java-драйвер Datastax по умолчанию поддерживает минимальное количество соединений для обработки определенного количества одновременных запросов.
Спецификация говорит, что драйвер имеет ограничение на обработку не более 128 запросов на соединение. Поэтому, когда мы, драйвер, обнаруживаем, что поступает более 128 запросов Тогда это только открытое соединение. Таким образом, Driver прекрасно управляет пулом соединений.[ http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/PoolingOptions.html] Эта ссылка была полезной

person Sarkar    schedule 26.07.2014

Перейдите к вашему файлу cassandra.yaml. Он будет находиться в папке conf вашей установки cassandra.

Для listen_address укажите IP-адрес сервера cassandra. например.

listen_address: 10.181.13.239

а затем перезапустите сервер cassandra. Так же проверьте порт на родной транспорт не закомментирован. Должна быть запись типа

native_transport_port: 9042
person Vishal John    schedule 18.07.2014
comment
Привет, Джон, спасибо за ответ, но. Его работа хорошо до 1000 клиентов или меньше. - person Sarkar; 19.07.2014
comment
На самом деле я хочу выполнить тест на Cassandra. Я пытаюсь настроить Cassandra, чтобы она могла дать мне хороший TPS. Я использую java-драйвер dataStax в качестве клиента. - person Sarkar; 19.07.2014
comment
Я использую аналогичную среду и могу легко достичь 10 000 TPS, используя более сложные транзакции. Вы должны проверить использование вашего ЦП и памяти на ваших экземплярах Cassandra и посмотреть, не сталкиваетесь ли вы с проблемами. Кроме того, Datastax Driver уже имеет версию 2.0.3, я бы серьезно подумал об обновлении. - person Baldy; 19.07.2014
comment
Привет @Baldy На самом деле я почти не изменил Cassandra.yaml, имя кластера и IPS. Я использую два сервера с конфигурацией Intel Xeon 2 * quad Core/64 ГБ ОЗУ/800 ГБ*6 жестких дисков. ‹br› нужно ли мне что-либо менять в конфигурации по умолчанию на Cassandra.yaml. ‹br› - person Sarkar; 21.07.2014
comment
Я вообще не менял никаких настроек по умолчанию, связанных с производительностью. Без глубоких знаний о вашей среде довольно сложно диагностировать проблемы с производительностью. Я бы обновился до последней версии драйвера Datastax и повторно запустил ваши тесты. Доступен инструмент cassandra-stress, который поможет устранить драйвер как узкое место в производительности. - person Baldy; 21.07.2014
comment
@Baldy спасибо за предложение. Я следил за ним. Кстати, я скачал dse-4.0.3 с веб-сайта datastax. это нормально. [ссылка]datastax.com/download#dl-enterprise - person Sarkar; 21.07.2014
comment
@Baldy На самом деле я новичок в этом мире NOSQL. Знаний мало Но люди вроде помогают мне становиться мудрее день ото дня. В любом случае, еще несколько вопросов имеют представление о том, как увеличить размер пула соединений и как остановить функцию повторных попыток Cassandra. - person Sarkar; 21.07.2014
comment
Я не использовал Datastax Enterprise, поэтому не могу комментировать. Есть довольно хорошее руководство, в котором рассказывается о пулах подключений и настройке ссылки. Политики повторных попыток устанавливаются для отдельных запросов ссылка. Эта ветка становится не по теме, поэтому, если вам нужна помощь по чему-то другому, кроме исходной темы, задайте новый вопрос. - person Baldy; 21.07.2014
comment
@Baldy, я понял твою точку зрения по поводу этой оригинальной темы. Вернемся к сути .. здесь, как вы просили, я обновил версию драйвера dataStax. при нагрузке на него с помощью jmeter я обнаруживаю ту же проблему, т.е. после отправки 1500 одновременных запросов. после 4/5 итерации. драйвер datastax задыхается. Выполняя net stat, я вижу, что все TCP-соединения от моего драйвера datastax к cassandra находятся в состоянии TIME_WAIT. В чем может быть причина? Кассандра поддерживает все соединения и не отправляет подтверждение или данные? Пожалуйста помоги. - person Sarkar; 22.07.2014
comment
Отличные новости!. Было ли что-то конкретное, что вы изменили, кроме обновления драйвера? Просто любопытно, поскольку в своем предыдущем комментарии вы заявили, что обновили драйвер и у вас возникла аналогичная проблема с производительностью. В любом случае я хотел бы опубликовать правильный ответ, чтобы закрыть ветку на случай, если кто-то еще наткнется на подобную проблему. - person Baldy; 25.07.2014
comment
@baldy на самом деле я также исправил максимальный и минимальный размер пула на узел за раз для cassandra. - person Sarkar; 25.07.2014
comment
И теперь я использую один сеанс на кластер (в моем случае есть только один кластер). Раньше я использовал один сеанс на запрос, что создавало хаос. Но теперь только с 19 соединениями Cassandra могла легко обрабатывать 50000+ транзакций. - person Sarkar; 25.07.2014
comment
Отлично. Вы должны опубликовать детали своего решения в качестве ответа и принять его. Я подозреваю, что изменение обработки сеанса решило вашу проблему, а не изменение драйвера. - person Baldy; 25.07.2014