Поведение зеркала Кафки - PullRequest
       4

Поведение зеркала Кафки

0 голосов
/ 19 сентября 2018

Скажем, у нас есть два ЦОД DC1 и DC2.Я зеркально отражаю данные Кафки от DC1 до DC2, используя Kafka mirror maker.Только DC1 активен, и DC2 станет активным, когда DC1 выйдет из строя.

Насколько мне известно, и тема kafka, и тема смещений будут зеркально отображены на DC2.

Например, я произвел 100сообщения на T1 в DC1 и около 80 сообщений были отражены на DC2.В DC1 я потребил около 90 сообщений.Теперь DC1 понижается, и я потребляю от DC2.Мой запрос потребителя должен был бы получить 91-е сообщение.Но только 80 сообщений были отражены.Что будет в этом случае?Поскольку требуемое смещение недоступно, будет ли это работать со значением auto.offset.reset.

В другом случае, скажем, я получил 90 сообщений из DC1, но все 100 сообщений были отражены в DC2.В этом случае, если я начну потреблять от DC2, будет скопировано 10 сообщений, верно?

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

1 Ответ

0 голосов
/ 19 сентября 2018

Производитель зеркал не копирует смещения.И источник, и пункт назначения могут иметь разное количество разделов и разные смещения.

Если вы хотите точно обеспечить доставку на DC2 ровно без потери данных, вам необходимо правильно настроить файл provider и consumer.properties.

Существуют допустимые сценарии, когда потребитель потребляет некоторую запись из источника, но производителю не удается записать в место назначения.В этом случае, если для «enable.auto.commit» задано значение true, оно будет периодически фиксировать смещение, даже если событие не было записано в месте назначения.Поэтому, чтобы избежать этого, он должен быть установлен в false.

Убедитесь, что для потери данных нет:

В customer.properties: enable.auto.commit=false установлено

В производителе добавьте следующие свойства:

max.in.flight.requests.per.connection=1
retries=Int.MaxValue
acks=-1
block.on.buffer.full=true

Для mirrorMaker установите --abortOnSendFail

Вот несколько рекомендаций для производителя зеркал.

https://community.hortonworks.com/articles/79891/kafka-mirror-maker-best-practices.html

Что касается потребителей, работающих в целевом кластере, им все равно, сколько записей потребляется из исходного кластера.У них есть свои собственные consumer_offsets.Таким образом, при первом запуске он начинается со смещения 0, а затем при следующем запуске будет считываться последнее использованное смещение.

Если вы хотите читать со смещения 0, вы всегда можете установить « auto.offset.reset » в «самое раннее»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...