есть пример с подключением и запросом: https://clickhouse.com/docs/en/integrations/java#java-client
                  
                  
                  
                  
                  
                  try (ClickHouseClient client = ClickHouseClient.newInstance(ClickHouseProtocol.HTTP)) {
                  
                  
                      ClickHouseRequest<?> request = client.connect(servers).format(ClickHouseFormat.RowBinaryWithNamesAndTypes);
                  
                  
                  
                  
                  
                  Подскажите, вот это client надо создавать при каждом запросе, или мы можем сделать его полем класса и подключать при инициализации?
                  
                  
                  
                  
                  
                  А вообще, вопрос шире, я после некоторого количества инсертов начинаю получать ClickHouseException: Code: 159. Execution timed out
                  
                  
                  
                  
                  
                  В логе вижу ошибку:
                  
                  
                  2023.10.21 09:13:33.420667 [ 509 ] {} <Error> ServerErrorHandler: Poco::Exception. Code: 1000, e.code() = 107, Net Exception: Socket is not connected, Stack trace (when copying this message, always include the lines below):
                  
                  
                  
                  
                  
                  0. Poco::Net::SocketImpl::error(int, String const&) @ 0x0000000015d2ef12 in /usr/bin/clickhouse
                  
                  
                  1. Poco::Net::SocketImpl::peerAddress() @ 0x0000000015d31676 in /usr/bin/clickhouse
                  
                  
                  2. DB::HTTPServerRequest::HTTPServerRequest(std::shared_ptr<DB::IHTTPContext>, DB::HTTPServerResponse&, Poco::Net::HTTPServerSession&) @ 0x000000001335fc67 in /usr/bin/clickhouse
                  
                  
                  3. DB::HTTPServerConnection::run() @ 0x000000001335e3e4 in /usr/bin/clickhouse
                  
                  
                  4. Poco::Net::TCPServerConnection::start() @ 0x0000000015d33b34 in /usr/bin/clickhouse
                  
                  
                  5. Poco::Net::TCPServerDispatcher::run() @ 0x0000000015d34d31 in /usr/bin/clickhouse
                  
                  
                  6. Poco::PooledThread::run() @ 0x0000000015e40387 in /usr/bin/clickhouse
                  
                  
                  7. Poco::ThreadImpl::runnableEntry(void*) @ 0x0000000015e3e61c in /usr/bin/clickhouse
                  
                  
                  8. ? @ 0x00007f133cd1b609 in ?
                  
                  
                  9. ? @ 0x00007f133cc40133 in ?
                  
                  
                   (version 23.9.1.1854 (official build))
                  
                  
                
вы асинхронно запросы выполняете? имхо несколько запросов одновременно он не может выполнять.
Да. Нормально работает, только если сделать async_insert=1,wait_for_async_insert=0. Если async_insert=1,wait_for_async_insert=1, то медленнее и такой таймаут выскакивает
аааа, я не про КХ, я про java клиент
синхронно пробую, executeAndWait
ОК. вы по одной строке вставляете? вы понимаете что async_insert=1 делает только хуже если у вас один клиент вставляет? у вас запросы искусственно замедляются и ждут 200мс.
по одной, да. нет, этого я не понимал (
ну вот вам надо либо понять что такое async_insert=1 либо забыть про него и начать использовать engine=Buffer
200 мс это async_insert_busy_timeout_ms, подскажите?
да, но в общем async_insert только вредит если у вас не сотни/тысячи вставляторов.
у нас один (потенциально два-три) вставлятора, который сотни тысячи строк вставляет )
Обсуждают сегодня