есть таблица T (ReplecatedMergeTree) и две реплики R1, R2, причем R1 содержит самые свежие изменния, а R2 отстает на 1 parts
2) R1 падает,в ZK есть событие, что R1 имеет новый parts, но R2 теперь не может подятнуть оттуда данные
3) идет запись в Т, и запрос на запись попадает в R2
Что дальше произойдет?
1) п.3 вообще не сработает, т.к. R2 отстала
2) R2 запишет новый parts, а старый parts потом подтянется, когда поднимется R1
3) R2 запишет новый parts, а старый parts пропадет
4) что-то еще
2 это eventual consistency, когда-то в будущем мы синхронизируемся
если запрос содержит новый батч то данные вставятся в R2 и пойдет второй вариант, но с оговорками, когда R1 поднимется, это надеюсь случиться не раньше чем почистится очередь репликации максимальная длинна которой max_replicated_logs_to_keep - 1000 то все восстановится из R1... если позже, то ваш парт попадет в system.detached_parts только я не помню с каким reason если запрос содержит старый батч (повторная запись тех же самых строк) контрольная сумма которого есть в ZK и соответсвует replicated_deduplication_window - 100, replicated_deduplication_window_seconds - 1 week, то он проигнорится молча на R2, но восстановится когда R1 вернется в строй. с оговорками которые я привел выше
Обсуждают сегодня