11238
Обсуждаем ClickHouse
обычно люди не хотят терять данные. Но если вам пофиг, то почему бы и нет
Читать полностью…
Спасибо! Это вообще более-менее нормальная практика - ставить игнор ошибкам матвью?
Читать полностью…
так тоже можно. Но лучше нет.
https://kb.altinity.com/altinity-kb-integrations/altinity-kb-kafka/altinity-kb-kafka-main-parsing-loop/#disable-at-least-once-delivery
Коллеги, есть вопрос, как обойти известную проблему поломки вычитке из кафки при сбое парсинга на "конвейере дальше"?
Вкратце: Клик вычитывает топик кафки, складывает данные в Replicated-таблицу. Далее, к этой таблице присоединена матвью, которая парсит поля из Replicated-таблицы и складывает в отдельную таблицу. И вот матвью, в части парсинга, может выдавать ошибки - например, скрипт написан с ошибочной логикой, или скрипт ожидает один тип данных, а приходит другой (допустим, что проблему несоответствия данных со стороны источника мы пока решить не можем). И мы видим, что в случае ошибки работы матвью вылетает exception, при этом данные, естественно, в последнюю таблицу не перекладываются, но это полбеды. Основная проблема в том, что этот сбой парсинга интерпретируется в системе в целом как сбой всего конвейера "вычитка из топика - сохранение в таблицу - парсинг на матвью - перекладка во вторую таблицу", и коммит офсета в Кафку также завершается с ошибкой. Поскольку вычитка не закоммичена, идёт повторная вычитка из Кафки тех же данных, происходит повторная ошибка, и т.д. Вычитка тормозится, лаг растёт, всё ломается.
Так вот, вопрос: можно ли как-то в Clickhouse сделать ограничение, чтобы коммит офсета в кафку происходил уже на этапе "первичного" сохранения данных в Replicated-таблице? Т.е. вот эта фаза завершена успешно, читай следующий блок данных из топика, а что там будет с ними дальше, пусть на кафку не влияет.
Либо как вариант - можно ли настроить матвью, чтобы в результате эксепшена на матвью сбойная запись дропалась, но для Replicated таблицы и Kafka Engine это не было бы ошибкой, которая приводила бы к перевычитке. Т.е. это потеря данных, и это плохо, но даже такой результат будет лучше, чем перевычитка.
Привет! Нашли причину? У нас такая же ситуация, куда копать не знаем пока.
Читать полностью…
Перезалив сервера помог, больше ошибок не встречаю. Большое спасибо всем причастным!
Читать полностью…
Она не проблемная, все верно. Она была создана для запросов аналитиков, чтобы не нагружать продовый кластер. А в proxmox, тк для нас там дешевле
Читать полностью…
ну если это пустой сервер, то дропните тестовую таблицу
rm -rf /var/lib/clickhouse/* /mnt/disk/clickhouse/* и рестартовать и снова создать тестовую таблицу
Сразу после обновления ругалось на все реплицируемые таблицы, я дропнул все базы на проблемной реплике и создал отдельную базу и таблицу для проверки работы репликации.
Читать полностью…
мне вот другое интересно, у вас только на одну таблицу ругается или в целом на все ?
Читать полностью…
а какое окружение? /mnt/disk1 это что? какая файловая система?mount /mnt/disk1
что показывает?
[pid 22844] 19:40:32.875229 openat(AT_FDCWD</>, "/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = 67</mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1>
немного настораживает, что в некоторых вызовах указывается полный путь:
а в других относительный:
`
18. void std::__function::__policy_invoker<void ()>::__call_impl[abi:ne190107]<std::__function::__default_alloc_func<ThreadFromGlobalPoolImpl<false, true>::ThreadFromGlobalPoolImpl<void (ThreadPoolImpl<ThreadFromGlobalPoolImpl<false, true>>::ThreadFromThreadPool::*)(), ThreadPoolImpl<ThreadFromGlobalPoolImpl<false, true>>::ThreadFromThreadPool*>(void (ThreadPoolImpl<ThreadFromGlobalPoolImpl<false, true>>::ThreadFromThreadPool::*&&)(), ThreadPoolImpl<ThreadFromGlobalPoolImpl<false, true>>::ThreadFromThreadPool*&&)::'lambda'(), void ()>>(std::__function::__policy_storage const*) @ 0x000000000f65fd63
19. ThreadPoolImpl<std::thread>::ThreadFromThreadPool::worker() @ 0x000000000f65656f
20. void* std::__thread_proxy[abi:ne190107]<std::tuple<std::unique_ptr<std::__thread_struct, std::default_delete<std::__thread_struct>>, void (ThreadPoolImpl<std::thread>::ThreadFromThreadPool::*)(), ThreadPoolImpl<std::thread>::ThreadFromThreadPool*>>(void*) @ 0x000000000f65d83a
21. ? @ 0x00007933a689caa4
22. ? @ 0x00007933a6929c3c
Cannot print extra info for Poco::Exception (version 25.3.6.56 (official build))`
также есть ошибки в err log:`
2025.10.02 16:26:40.207923 [ 7719 ] {} <Warning> upgrade.block_timestamp_ (ce09bcb7-ff1c-4919-9ffa-abbef6004c68) (Fetcher): Directory /mnt/disk1/clickhouse/store/ce0/ce09bcb7-ff1c-4919-9ffa-abbef6004c68/tmp-fetch_all_0_0_1/ already exists, probably result of a failed fetch. Will remove it before fetching part.
2025.10.02 16:26:40.208447 [ 7719 ] {} <Error> upgrade.block_timestamp_ (ce09bcb7-ff1c-4919-9ffa-abbef6004c68): auto DB::StorageReplicatedMergeTree::processQueueEntry(ReplicatedMergeTreeQueue::SelectedEntryPtr)::(anonymous class)::operator()(LogEntryPtr &) const: std::exception. Code: 1001, type: std::__1::filesystem::filesystem_error, e.what() = filesystem error: in weakly_canonical: Permission denied ["store/ce0/ce09bcb7-ff1c-4919-9ffa-abbef6004c68/tmp-fetch_all_0_0_1/checksums.txt"], Stack trace (when copying this message, always include the lines below):
вот не совсем понимаю, почему нет. Вы не могли бы чуть пояснить? Разве будет плохо, если мы отвяжем этап парсинга от этапа вычитки и первичного сохранения?
Читать полностью…
Я складываю каждую строку отдельно как json, а потом через мат вью перекладываю в нормальную структуру и формирую DLQ через второй мат вью.
Читать полностью…
идете в доку, жамкаете AskAI, пишите how to ingore error from matview, получаете materialized_views_ignore_errors
Читать полностью…
треды посчитайте чем у вас clickhouse занят
Thread counts by type (using ps & clickhouse-local)
https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-threads/
Привет!) Посоветуйте, что почитать по партиционирование - интересует подробное описание механизмов/алгоритмов и настроек. Проблема такая - в какой-то момент слишком много партов образуется (льется стрим построчный и разбирается материалками).
Читать полностью…
Вчера несколько раз так пробовал, удивительно, но не помогло. Сейчас пробую полностью перелить сервер.
Читать полностью…
Тоже пришел к этому выводу! Прямо сейчас занимаюсь.
Читать полностью…
я бы грохнул GCP VM и заново сделал...
а зачем четвертая VM в proxmox? это не она же проблемная?
/mnt/disk1/clickhouse на всех 4х одинаково смонтирована и устроена? конфиг КХ одинаковый?
Читать полностью…
Прошу прощения, только проснулся.
1) 3 ВМ в Google Cloud Platform, (проблемная в том числе), 1 ВМ развернута в proxmox. Все ubuntu 24.04:
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
6.14.0-1014-gcp #15~24.04.1-Ubuntu SMP Fri Jul 25 23:26:08 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
6.8.0-78-generic #78-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 12 11:34:18 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
ну да, вам задали 4 вопроса, вы ответили на один... ну, удачи в поисках
Читать полностью…
чето странно что permission denied а не file not found для checksums.txt
Читать полностью…
записал strace по доступу к файлам:`
[pid 22847] 19:40:32.247989 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 22847] 19:40:32.248614 openat(AT_FDCWD</>, "/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = 67</mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1>
[pid 22847] 19:40:32.249438 unlinkat(AT_FDCWD</>, "/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", AT_REMOVEDIR) = 0
[pid 22847] 19:40:32.249969 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", 0x7d3f7ddf3028) = -1 ENOENT (No such file or directory)
[pid 22847] 19:40:32.250254 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 22847] 19:40:32.250385 mkdir("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", 0777) = 0
[pid 22847] 19:40:32.250854 stat("store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1/checksums.txt", 0x7d3f7ddf2d50) = -1 EACCES (Permission denied)
[pid 22845] 19:40:32.438854 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 22845] 19:40:32.439601 openat(AT_FDCWD</>, "/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = 67</mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1>
[pid 22845] 19:40:32.440343 unlinkat(AT_FDCWD</>, "/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", AT_REMOVEDIR) = 0
[pid 22845] 19:40:32.440672 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", 0x7d3f800b7028) = -1 ENOENT (No such file or directory)
[pid 22845] 19:40:32.440834 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 22845] 19:40:32.441043 mkdir("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", 0777) = 0
[pid 22845] 19:40:32.441538 stat("store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1/checksums.txt", 0x7d3f800b6d50) = -1 EACCES (Permission denied)
[pid 22833] 19:40:32.760029 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 22833] 19:40:32.760731 openat(AT_FDCWD</>, "/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = 67</mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1>
[pid 22833] 19:40:32.761407 unlinkat(AT_FDCWD</>, "/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", AT_REMOVEDIR) = 0
[pid 22833] 19:40:32.761699 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", 0x7d3f860c3028) = -1 ENOENT (No such file or directory)
[pid 22833] 19:40:32.761868 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
[pid 22833] 19:40:32.762407 mkdir("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", 0777) = 0
[pid 22833] 19:40:32.763101 stat("store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1/checksums.txt", 0x7d3f860c2d50) = -1 EACCES (Permission denied)
[pid 22844] 19:40:32.874398 stat("/mnt/disk1/clickhouse/store/4c7/4c79225a-f22e-459a-a398-1e02f9564256/tmp-fetch_all_0_0_1", {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
0. std::system_error::system_error(std::error_code, String const&) @ 0x000000001ad9fd57
1. std::filesystem::filesystem_error::filesystem_error[abi:ne190107](String const&, std::filesystem::path const&, std::error_code) @ 0x000000000f5d989f
2. void std::filesystem::__throw_filesystem_error[abi:ne190107]<String&, std::filesystem::path const&, std::error_code const&>(String&, std::filesystem::path const&, std::error_code const&) @ 0x000000001ad578ed
3. std::filesystem::detail::ErrorHandler<std::filesystem::path>::report(std::error_code const&) const @ 0x000000001ad590d2
4. std::filesystem::__weakly_canonical(std::filesystem::path const&, std::error_code*) @ 0x000000001ad5d95b
5. DB::DataPartsExchange::Fetcher::downloadBaseOrProjectionPartToDisk(String const&, std::shared_ptr<DB::IDataPartStorage> const&, DB::ReadWriteBufferFromHTTP&, std::function<std::unique_ptr<DB::WriteBufferFromFileBase, std::default_delete<DB::WriteBufferFromFileBase>> (DB::IDataPartStorage&, String const&, unsigned long)>, DB::MergeTreeDataPartChecksums&, std::shared_ptr<DB::Throttler>, bool) const @ 0x00000000145468c5
6. DB::DataPartsExchange::Fetcher::downloadPartToDisk(String const&, String const&, bool, String const&, std::shared_ptr<DB::IDisk>, bool, DB::ReadWriteBufferFromHTTP&, std::function<std::unique_ptr<DB::WriteBufferFromFileBase, std::default_delete<DB::WriteBufferFromFileBase>> (DB::IDataPartStorage&, String const&, unsigned long)>, unsigned long, std::shared_ptr<DB::Throttler>, bool) @ 0x0000000014543d1c
7. DB::DataPartsExchange::Fetcher::fetchSelectedPart(std::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::shared_ptr<DB::Context const>, String const&, String const&, String const&, String const&, int, DB::ConnectionTimeouts const&, String const&, String const&, String const&, std::shared_ptr<DB::Throttler>, bool, String const&, std::optional<DB::CurrentlySubmergingEmergingTagger>*, bool, std::shared_ptr<DB::IDisk>) @ 0x000000001453e32a
8. std::shared_ptr<DB::IMergeTreeDataPart> std::__function::__policy_invoker<std::shared_ptr<DB::IMergeTreeDataPart> ()>::__call_impl[abi:ne190107]<std::__function::__default_alloc_func<DB::StorageReplicatedMergeTree::fetchPart(String const&, std::shared_ptr<DB::StorageInMemoryMetadata const> const&, String const&, String const&, bool, unsigned long, std::shared_ptr<zkutil::ZooKeeper>, bool)::$_4, std::shared_ptr<DB::IMergeTreeDataPart> ()>>(std::__function::__policy_storage const*) @ 0x00000000142b1da9
9. DB::StorageReplicatedMergeTree::fetchPart(String const&, std::shared_ptr<DB::StorageInMemoryMetadata const> const&, String const&, String const&, bool, unsigned long, std::shared_ptr<zkutil::ZooKeeper>, bool) @ 0x000000001419fcaa
10. DB::StorageReplicatedMergeTree::executeFetch(DB::ReplicatedMergeTreeLogEntry&, bool) @ 0x000000001418d0f5
11. DB::StorageReplicatedMergeTree::executeLogEntry(DB::ReplicatedMergeTreeLogEntry&) @ 0x00000000141782a0
12. bool std::__function::__policy_invoker<bool (std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>::__call_impl[abi:ne190107]<std::__function::__default_alloc_func<DB::StorageReplicatedMergeTree::processQueueEntry(std::shared_ptr<DB::ReplicatedMergeTreeQueue::SelectedEntry>)::$_1, bool (std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>>(std::__function::__policy_storage const*, std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&) @ 0x00000000142aea9c
13. DB::ReplicatedMergeTreeQueue::processEntry(std::function<std::shared_ptr<zkutil::ZooKeeper> ()>, std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&, std::function<bool (std::shared_ptr<DB::ReplicatedMergeTreeLogEntry>&)>) @ 0x00000000149940a7
14. DB::StorageReplicatedMergeTree::processQueueEntry(std::shared_ptr<DB::ReplicatedMergeTreeQueue::SelectedEntry>) @ 0x00000000141c9d3c
15. DB::ExecutableLambdaAdapter::executeStep() @ 0x0000000014579012
16. DB::MergeTreeBackgroundExecutor<DB::RoundRobinRuntimeQueue>::threadFunction() @ 0x0000000014639b71
17. ThreadPoolImpl<ThreadFromGlobalPoolImpl<false, true>>::ThreadFromThreadPool::worker() @ 0x000000000f65923b
этот каталог постоянно пересоздается:
Читать полностью…
root@clickhouse-02:/mnt/disk1/clickhouse/store/ce0/ce09bcb7-ff1c-4919-9ffa-abbef6004c68# stat tmp-fetch_all_0_0_1/
File: tmp-fetch_all_0_0_1/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 8,32 Inode: 3935550 Links: 2
Access: (0750/drwxr-x---) Uid: ( 995/clickhouse) Gid: ( 997/clickhouse)
Access: 2025-10-02 16:25:50.238812332 +0000
Modify: 2025-10-02 16:25:50.238812332 +0000
Change: 2025-10-02 16:25:50.238812332 +0000
Birth: 2025-10-02 16:25:50.238812332 +0000
root@clickhouse-02:/mnt/disk1/clickhouse/store/ce0/ce09bcb7-ff1c-4919-9ffa-abbef6004c68# stat tmp-fetch_all_0_0_1/
File: tmp-fetch_all_0_0_1/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 8,32 Inode: 3935550 Links: 2
Access: (0750/drwxr-x---) Uid: ( 995/clickhouse) Gid: ( 997/clickhouse)
Access: 2025-10-02 16:25:50.974811270 +0000
Modify: 2025-10-02 16:25:50.974811270 +0000
Change: 2025-10-02 16:25:50.974811270 +0000
Birth: 2025-10-02 16:25:50.974811270 +0000
root@clickhouse-02:/mnt/disk1/clickhouse/store/ce0/ce09bcb7-ff1c-4919-9ffa-abbef6004c68# stat tmp-fetch_all_0_0_1/
File: tmp-fetch_all_0_0_1/
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 8,32 Inode: 3935550 Links: 2
Access: (0750/drwxr-x---) Uid: ( 995/clickhouse) Gid: ( 997/clickhouse)
Access: 2025-10-02 16:25:51.925809900 +0000
Modify: 2025-10-02 16:25:51.925809900 +0000
Change: 2025-10-02 16:25:51.925809900 +0000
Birth: 2025-10-02 16:25:51.925809900 +0000
root@clickhouse-02:/mnt/disk1/clickhouse/store/ce0/ce09bcb7-ff1c-4919-9ffa-abbef6004c68#