2016-11-20 2 views
0

Мы рассматриваем использование кафки как важного посредника для обмена сообщениями.
Но, похоже, гарантия долговечности сообщений оптимистичен в дизайне репликации Кафка:Можно ли потерять признанное сообщение в кафке?

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

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

ответ

0

Существует несколько конфигураций для настройки частоты сфотографирования журнала. Вы можете увеличить время, в течение которого поток флеш-планировщика проверяет, нужен ли флеш log.flush.scheduler.interval.ms, и вы можете уменьшить количество сообщений, необходимых для запуска флеша log.flush.interval.messages.

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

+0

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

+0

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

0

Я не думаю, что можно гарантировать, что подтвержденное сообщение не затеряется. Однако мы можем уменьшить вероятность потери путем принятия определенных мер, перечисленных ниже ->

  1. Увеличение коэффициента репликации для темы

  2. В код производителя установлен в конфигурации ACKs = все

  3. Keep min.insync.replicas высокие

Например, с помощью коэффициента репликации 5, min.insync.replicas = 4 и ACKs = все, сообщение не будет подтвержден, пока не будет получено не менее 4 реплик (это не обязательно сохранилось!).

Больше, чем меньше, тем более вероятно ваше сообщение будет потеряно.

Смежные вопросы