есть пример с подключением и запросом: 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 только вредит если у вас не сотни/тысячи вставляторов.
у нас один (потенциально два-три) вставлятора, который сотни тысячи строк вставляет )
Обсуждают сегодня