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

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

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


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

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

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

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

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

8 ответов

63 просмотра

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

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

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

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

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

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

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

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

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

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

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

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта