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