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

Подскажите, пожалуйста, какие есть надежные способы синхронизировать данные в эластике

с базой (постгя)?
Вот есть, например, таблица с пользоватедями и их никами, бэкенды регулярно что-то там обновляют в никах. Мне хочется все эти данные с никами загрузить в эластик и через эластик осуществлять поиск по никам.


Есть, например, PgSync - приблуда, которая гоняет данные из пг в эластик, но она пипец глючная + работает на хранимках, переодически обваливает базу (не в правильном порядке инициализирует хранимки, что приводит к тому, что база кидает ошибки на любой апдейт в течение секунды) и может потерять данные (как раз из-за неправильной работы с хранимками)

Поднимать полноценный энтерпрайз ЕТЛ с произвольными коннекторами -- ну как-то жирно выглядит. И с ним потом опять проблемы наверняка будут.

Делать процедуру на бэкенде, которая сохраняет и в базу, и в эластик друг за другом тоже не хочу. Там тогда надо обрабатывать падающие транзакции, обходить кейсы, когда эластик затупливает, рейсы пойдут - звучит тоже как напряжно и ненадежно.

Кажется, было бы хорошим решением складывать в кафку диффы, а потом одним отдельным сервисом доставать и обновлять эластик. Но самому писать такое чот лениво, а готовых решений не нашел.

Может подскажете, что вообще сейчас в мире есть удобного для такой проблемы? Если что, мы в aws-е сидим, можем какие-то внутренние сервисы прикупить для этого

8 ответов

68 просмотров

У нас реализовано на стороне бэкенда(отдельным микросервисом). После записи в базу формируется json для эластика и отправляется в кафку, потом отдельным сервисом пишется в эластик. Проблем действительно много, но чёт сомневаюсь, что есть готовое решение для этого.

Stanislav Markin
Отдельный сервис сами писали?

Ну да. Это очень маленький сервис, который только пишет в эластик то, что получил по кафке. Микросервисы наше всё)). Из проблем могу отметить наличие задвоений и пропусков данных. Потому сразу могу посоветовать уникальный id выбирать самому на основе данных, а не отдавать на откуп эластику. Соответственно, при записи тогда лучше использовать index а не create api. Ну и метрики навесить, как оказалось у нас эластик падал пару раз и от этого образовались пропуски.

Михаил Гуторов
Ну да. Это очень маленький сервис, который только ...

а зачем коммитить оффсет, если записать не получилось?

Alexandr ∨∧‾ Emelyanov
а зачем коммитить оффсет, если записать не получил...

Саш а как ваще правильно готовить кафку?) 1 партиция = 1 читающий поток?

Vitaly Sirotkin
Саш а как ваще правильно готовить кафку?) 1 партиц...

там вообще идет консьюмер на партицию, а каждый консьюмер это отдельный поток

Alexandr ∨∧‾ Emelyanov
а зачем коммитить оффсет, если записать не получил...

Вот так сделали. Я с этой проблемой тока начал разбираться, смотрю что можно исправить.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта