Следует ли реплицировать разделы topi c на все узлы брокера в кластере Kafka? - PullRequest
2 голосов
/ 14 апреля 2020

Хотя доступны ответы на вопросы, аналогичные приведенным выше. Мое любопытство заключается в том, что n1-5 узлов находятся в кластере, где темы t1 на n1, n2 и n3, topi c t2 на n3, n4, n5. Теперь, если предположить, что p1 отправляет сообщения в t1, а c1 потребляет из t1 и аналогично p2 и c2 для t2.

Здесь у меня есть определенные сомнения?

  1. Предположим, что все узлы n3-n5 не работают, теперь все еще p1 и c1 будут иметь активное соединение с кластером, который является своего рода бесполезен, так как в любом случае публикация и использование не удаются. (metri c connection_count больше 0 означает, что есть подключения к кластеру от производителя или потребителя)

  2. Это правильный способ репликации topi c на все узлы в Кластер Кафки?

  3. Почему мы даем подробные адреса нескольких узлов в bootstrap Свойство сервера достаточно для одного адреса?

Примечание: I Я новичок в мире Кафки и все еще экспериментирую с локальной установкой, чтобы обнаружить потенциальные проблемы, которые могут возникнуть в реальном мире.

Ответы [ 2 ]

3 голосов
/ 14 апреля 2020
  1. Почему это не получается? Узлы n1 и n2 все еще работают и при условии, что у topi c есть replication-factor=3, все данные все еще должны быть доступны.

  2. Я бы сказал, что это зависит. Репликация тем на всех узлах не повредит, но иногда это избыточно (особенно, когда в кластере очень много брокеров). Для высокой доступности вы должны установить как минимум replication-factor=3. Это позволяет, например, демонтировать одного брокера для обслуживания, а другой неожиданно обанкротиться.

  3. bootstrap.servers используется для настройки соединения кластера Kafka. Как правило, одного адреса достаточно для доступа ко всему кластеру, но всегда лучше указывать все адреса в случае, если один из серверов не работает. Обратите внимание, что клиенты (производители или потребители) используют всех брокеров независимо от того, какие серверы указаны в bootstrap.servers.


Пример 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 не содержит данных topi c 2 ).

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

Брокер 1:

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

Брокер 2:

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

Брокер 3:

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

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

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

1 голос
/ 14 апреля 2020

Предположим, что все узлы n3-n5 не работают, теперь все еще p1 и c1 будут иметь активное соединение с кластером, что бесполезно, так как в любом случае публикация и использование завершаются неудачно. (metri c connection_count больше 0 означает, что есть подключения к кластеру от производителя или потребителя)

Ответ: Если все три брокера являются вашими топи c реплики не работают, то вы не можете производить или потреблять из этих топи c. Чтобы избежать подобных ситуаций, рекомендуется размещать брокеров в разных стойках и предоставлять broker.rack информацию в конфигах брокера.

broker.rack: Стойка брокера. Это будет использоваться в назначении репликации с учетом стойки для обеспечения отказоустойчивости. Примеры: RACK1, us-east-1d

Это правильный способ репликации топи c на все узлы в кластере Kafka?

Ответ: Это полностью зависит от ваших требований отказоустойчивости. Если вы реплицируете topi c на все 6 брокеров, вы можете допустить до 5 сбоев брокера. (конечно, min.insync.replicas и acks конфиги также важны. Если количество реплик равно 6, min.insync.replicas=2, acks=all, то вы можете допустить до 4 сбоев брокера для продолжения отправки сообщений)

Почему мы даем подробные адреса нескольких узлов в bootstrap свойстве сервера достаточно одного адреса?

Ответ: bootstrap.servers config используется для первоначального подключения к Кластер кафки. Да, одного адреса достаточно, но что делать, если посредник по этому адресу не работает? Вы не можете подключиться к кластеру. Поэтому рекомендуется указывать более одного адреса, чтобы избежать такой ситуации с избыточностью.

...