184 похожих чатов

Подскажите плиз начинающим на нелегком пути выстраивания bi Есть сервис владелец

сущности, каждый раз когда появляется новая сущность, он пишет ее в топик кафки, кликхаус этот топик слушает и заполняет таблицу.

Дальше появляется кейс когда объект на сервисе начинает обновлять свое состояние, соответственно в кх его надо актуализировать. Полистал доку кх, кажется больше всего тут подходит VersionedCollapsedMergeTree. Сервис владелец при каждом изменении состояния объекта шлёт в отельный топик его новые состояния, а другой консьюмер кх его слушает и инсертит в таблицу выполняя схлопывание.
Но тут встает вопрос партиций в кафке, очередность там гарантируется только в пределах партиций, соответственно более раннее состояние может быть вычитано позднее актуального.
Как наиболее канонично такие ситуации обыгрывать? На сервисе владельце тоже явно вести инкремент версии состояния и в кх его юзать при запросе на инсерт? Или как-то вокруг таймстампа кафка-мессаджа обыгрывают консистентность.

Судя по всему вопрос тут вообще не столько про кх, сколько про правильный eventual consistency, но кафка у нас только-только внедряется для целей bi, поэтому не все бестпрактисы ее использования ещё впитаны.

4 ответов

10 просмотров

там время есть как поле? если изменения внутри одной PARTITION BY (см. CREATE TABLE в clickhouse) в целевой clickhouse таблице, то он сольются в дальнейшем на background merge вообще VersionedCollapsing просто работает для одинаковых ORDER BY сортируется по version и дальше схлопывание... ну и вам знания о SELECT .. FROM table FINAL не помешает https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-final-clause-speed/

Александр-Мошкин Автор вопроса
Slach [altinity]
там время есть как поле? если изменения внутри о...

Время апдейта состояния? Вообще да, есть два поля на объекте: created_at, updated_at. Партиционирование выполнено по created_at. Тут вопрос как правильно держать именно актуальное состояние. В топике кафки с изменениями состояния объекта например 2 партиции. В 1 партиции более позднее состояние, во 2 более раннее. Мы не можем знать какое из них кх прочитает быстрее, но в кх должно остаться более позднее. Мы могли бы ориентироваться на updated_at, но как сравнить его значение с тем что уже в кх? Ведь выборка предыдущего состояния из кх происходит с помощью агрегации HAVING sum(Sign)>1, при этом дока говорит что агрегатные min/max нельзя использовать. Я же не могу написать HAVING sum(Sign) > 1 AND max(updated_at) < new_updated_at?

Александр Мошкин
Время апдейта состояния? Вообще да, есть два поля ...

не надо про updated_at это просто "время апдейта", его в качестве version можно использовать

Александр Мошкин
Время апдейта состояния? Вообще да, есть два поля ...

еще раз. "одинаковость" строк определяется значениями полей которые перечислены в ORDER BY

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Карта сайта