Кафка гарантирует нулевую потерю сообщений? - PullRequest
0 голосов
/ 28 мая 2019

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

1 Ответ

1 голос
/ 28 мая 2019

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

Раздел 0:

+---+---+---+-----+
| 0 | 1 | 2 | ... |
+---+---+---+-----+

Раздел 1:

+---+---+---+---+----+
| 0 | 1 | 2 | 3 | .. |
+---+---+---+---+----+

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

Пример 2 тем (каждая с 3 и 2 разделами соответственно):

Брокер 1:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 2       |
|   Partition 1     |
+-------------------+

Брокер 2:

+-------------------+
|      Topic 1      |
|    Partition 2    |
|                   |
|                   |
|     Topic 2       |
|   Partition 0     |
+-------------------+

Брокер 3:

+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

Обратите внимание, что данные распространяются (и Брокер 3 не содержит никаких данных раздела 2 ).

Темы, должны иметь replication-factor> 1 (обычно 2 или 3), чтобы, когда брокер не работал, другой мог обслуживать данные темы. Например, предположим, что у нас есть тема с 2 разделами с replication-factor, установленным на 3, как показано ниже:

Брокер 1:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

Брокер 2:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 1       |
|   Partition 0     |
+-------------------+

Брокер 3:

+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

Теперь предположим, что Broker 2 не удалось. Брокер 1 и 3 по-прежнему могут обслуживать данные по теме 1. Поэтому replication-factor из 3 - это всегда хорошая идея, поскольку он позволяет снять одного брокера в целях обслуживания, а также другого быть сбитым неожиданно. Таким образом, Apache-Kafka предлагает высокую надежность и отказоустойчивость.

Примечание о лидерах: В любое время только один посредник может быть лидером раздела, и только этот лидер может получать и обслуживать данные для этого раздела. Остальные брокеры будут просто синхронизировать данные (синхронные реплики). Также обратите внимание, что когда replication-factor установлен в 1, лидер не может быть перемещен в другое место, если отказывает брокер. В общем случае, когда все реплики раздела выходят из строя или переходят в автономный режим, leader будет автоматически установлен на -1.

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