Всем привет Есть у кого опыт использования MirrorMaker2 с переливом оффетов? Я

делаю сейчас на своих кластерах и он чушь какую-то переливает.

40 ответов

43 просмотра

в чем суть чуши?

Сергей- Автор вопроса
Tetra
в чем суть чуши?

Никакие оффсеты не совпадают. Конфиг вроде беру с документации. Может есть какие-то подводные камни?

убогое решение, берите спарк либу и учите приложение писать в 2 кластера

Сергей- Автор вопроса
Tetra
а должны?

https://kafka.apache.org/documentation/#georeplication-flow-configure Судя по доке - да.

Сергей
Никакие оффсеты не совпадают. Конфиг вроде беру с ...

если у вас нет всей истории с нулевого оффсета по всем топикам, то оффсеты не сохранятся

даже если есть, это всё равно плохое решение, пусть учат приложение работать с 2 кластерами сразу

Сергей
https://kafka.apache.org/documentation/#georeplica...

там ни одной строчки про оффсеты нет, может вы спутали с сохранением порядка, что не равно сохранению номеров оффсетов

Сергей- Автор вопроса
Tetra
там ни одной строчки про оффсеты нет, может вы спу...

sync.group.offsets.enabled: whether to periodically write the translated offsets of replicated consumer groups (in the source cluster) to __consumer_offsets topic in target cluster, as long as no active consumers in that group are connected to the target cluster (default: false) А как это тогда понять? Я думал что это параметр включает трансляцию оффсетов.

Сергей
Никакие оффсеты не совпадают. Конфиг вроде беру с ...

берёте спарк либу для кафки, обнуляете оба кластера, и пишете через либу в 2 кластера, с сохранением индексов офсетов в бд(сцилла\рокс)

Старый Хрыч
даже если есть, это всё равно плохое решение, пуст...

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

Сергей
sync.group.offsets.enabled: whether to periodicall...

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

Сергей- Автор вопроса
Tetra
это про ситуацию, когда опять же вы мирор настроил...

Ну у меня так и есть в принципе. Пытаюсь все перелить и переключить пользаков чтобы они не читали тоже все два раза.

Сергей
Ну у меня так и есть в принципе. Пытаюсь все перел...

тем более толоько вариант с запиисью в 2 кластера с сохранением индекса офсетов в бд

Сергей
Ну у меня так и есть в принципе. Пытаюсь все перел...

а вам действительно нужен второй кластер не размазанный один большой?

Tetra
а вам действительно нужен второй кластер не размаз...

зукипер в 7 хостов? рафт пока вообще от задержк дохнет

Сергей- Автор вопроса
Tetra
а вам действительно нужен второй кластер не размаз...

У меня есть 2 геораспределенных кластера. Новый и старый. Вот хотел все из старого мигрировать в новый без каких либо отклонений.

от с этого и надо было начинать) сразу ясно что за проблема и почему вы пытаетесь решить ее криво

Сергей- Автор вопроса
Сергей
И почему же криво?

Хрыч вышел написал как действовать, сохранение оффсетов не нужно, новые ид группы выдаете и летите дальше на новой кафке

Сергей- Автор вопроса
Tetra
Хрыч вышел написал как действовать, сохранение офф...

А что делать если нужны данные из топика перенести? По факту там есть топик с очень длинным хранением данных. Перенести можно, только вот опять вопрос с оффсетами.

Сергей
А что делать если нужны данные из топика перенести...

"топик с очень длинным хранением данных" - вот и кривость подъехала, оно подразумевалось но теперь хотя бы это в открытую сказано. Процесс тот же - ставим кафку новую, настраиваем консумеры из нее, включаем переливку. Обрабатываем все данные по новой. Если по какойто несуразности у вас не идемпотентная обработка на перечитывании, то вам поможет только ручное разгребание с участием базы и ручным сопоставлением оффсетов.

Сергей- Автор вопроса
Сергей
А в чем кривость?

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

Tetra
ну вы же не смогли взять стандартную тулзу и решит...

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

Старый Хрыч
у меня есть топики которые храняться по пол года....

сдается мне что тут такой подход обдуман и не просто так применен) ну и вокруг обвязочка тоже чувствуется неспроста появилась

Tetra
сдается мне что тут такой подход обдуман и не прос...

так потому что зачастую релиз стриминга с багом и потом надо всё перечитывать и переделывать батч

На проде мм2 ещё не запускал, но тесты гонял. По доке: у мм2 именно трансляция оффсетов, а не копирование. Т.е. На кластереА у тебя приходят сообщения 101,102,103. На кластерБ они могут быть среплицированы как 11,12,14 (дубль, например, пришел между или кто записал откуда-то). ММ2 скидывает маппинг консьюмер групп, т.е. 101->11, 102->12, 103->14. Время от времени на кластереБ происходит применение этих записей к консьюмер группам на кластереБ. Если у тебя клиенты опираются на консьюмер группа только - должно работать. Если оффсеты хранятся во внешнем хранилище - ММ2 (по крайней мере без кастомного кода не поможет). Слышал, что есть пара аналогов и вроде у конфлюента репликатор копирует 1в1 за счёт копирования в кластерБ как в реплику, но сам не пробовал

Sergey Andreyev
На проде мм2 ещё не запускал, но тесты гонял. По д...

да там очередная попытка переехать с кластера на кластер без "работы от разработчиков"

Сергей- Автор вопроса
Sergey Andreyev
На проде мм2 ещё не запускал, но тесты гонял. По д...

Конфиг можешь скинуть если не жалко? А то такое ощущение что я криво просто настраиваю у себя

Сергей
Конфиг можешь скинуть если не жалко? А то такое ощ...

Я из KIP и апачевской доки собирал. Попозже постараюсь скинуть

Сергей
Конфиг можешь скинуть если не жалко? А то такое ощ...

В заметках у меня такой конфиг остался (это в одну сторону, с префиксом топиков): ### DEFAULT PROPERTIES: replication.factor=3 replication.policy.separator=___ ### CONNECTORS: clusterA->clusterB.enabled=True clusterA->clusterB.sync.group.offsets.enabled=True clusterA->clusterB.sync.topic.configs.enabled=True clusterA->clusterB.emit.checkpoints.enabled=True clusterA->clusterB.topics=.* clusterA->clusterB.groups=.* Ещё нашёл заметки по такому списку конфигов (больше всяких), плюс здесь политика без добавления префикса топиов. По каждому конфигу можно погуглить что он значит. В КИПах описание некоторых было, по-моему ещё в доках стримзи неплохое описание было. clusterA->clusterB.enabled: true clusterA->clusterB.topics: test-topic clusterA->clusterB.replication.policy.class: org.apache.kafka.connect.mirror.IdentityReplicationPolicy clusterA->clusterB.refresh.topics.enabled: true clusterA->clusterB.sync.group.offsets.enabled: true clusterA->clusterB.sync.topic.configs.enabled: true clusterA->clusterB.refresh.groups.enabled: true clusterA->clusterB.emit.heartbeats.enabled: true clusterA->clusterB.sync.topic.acls.enabled: true clusterA->clusterB.emit.checkpoints.enabled: true

Sergey Andreyev
В заметках у меня такой конфиг остался (это в одну...

Сергей, у тебя получалось настроить копирование оффсетов? У меня идет страшный и неустранимый во времени рассинхрон, и я не могу найти причину. Или это действительно гиблая затея?

Alexander Fedyukov
Сергей, у тебя получалось настроить копирование оф...

На всякий случай: что ты имеешь ввиду под оффсетами? Мм2 копирует сообщения и консьюмер группы с новыми, соответствующими сообщениям, оффсетами. Т.е. оффсеты будут новые: сообщение Х на старом кластере имело оффсет 100, а на новом это будет, например, оффсет 33. Да, копировать сообщения и консьюмер группы получалось, для этого там используется чуть меньше десятка внутренних топиков (смотрите логи авторизации или мм2, если запрещено создание топиков автоматически, как это должно быть)

Sergey Andreyev
На всякий случай: что ты имеешь ввиду под оффсетам...

У меня получается вот так: 0. Есть два кластера А и Б. Б - резервный (требование заказчика). На Б происходит перекючение, когда в основном контуре что-то сильно идет не так. 1. В кластер А мы пишем транзакционно, т.о. оффсеты сдвигаюся еще и на служебные транзакционные сообщения. 2. Кластер Б копирует оффсеты "отставая" по количеству от А как раз на число этих служебных сообщений. Т.е. в итоге часть сообщений из А остается необработанными при переходе рабты в Б. И вот кто тут неправ - непонятно. Возможно я что-то делаю неверно, но понять бы - что.

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

Sergey Andreyev
Так вам важны консьюмер группы или оффсеты сообщен...

Наверное одно без другого в случае репликации оффсетов невозможно. Надеюсь только на MM2. Но вот что-то идет не так

Sergey Andreyev
На проде мм2 ещё не запускал, но тесты гонял. По д...

Перечитайте это сообщение ещё раз о том, как работает мм2 и как он реплицирует консьюмер группы. Если этого не хватает, почитайте ещё раз документацию о том, что гарантирует мм2, а что нет. По точное соответствие оффсетов там ничего нет, только консьюмер группы с другими оффсетами, соответствующими тем же сообщениям на новом кластере

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

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

if (user?.choseType === 'oneDay') { await ctx.reply( 'Добро пожаловать в команду «Магнита»! Правда, на один день ☺️ ', ); await ctx.s...
Kokni
1
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Это фейк @cruppto_newbot?
Antskup
13
всем салют сегодня утро заметил что бот не может отправлять фотки по url. ручками в браузере ссылка норм открывает фотки. падает ошибка 'Bad Request: failed to send message ...
Vasya Ivanov
9
ребят, привет. за какое время бот полученную заявку на вступление в группу может принять \отклонить? Помню речь была про 5 минут, сейчас как?
Роман Ромашин :)
10
Доброго времени суток. Правильно ли я понимаю, что с введением новой платежной единицы stars, я просто могу оставить текущую платёжку от Юкассы, которая выполняется на сайте с...
Prokhor Chulkov
7
вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
Добрый день! Не подскажете как к модели Категории Шопоголика добавить отношение Тейлора. Пробовал по документации, но не получается. Мб уже кто-то делал?
Николай Афанасенко
6
@veranikaEU получилось? Можно увидеть рабочий код?
Alex Kom
8
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Карта сайта