Можно ли разделить Kafka-Cluster пополам?

Сценарий: у вас есть Kafka-Cluster в разных контроллерах домена, но они настроены как один кластер. Так что зеркалирования через MirrorMaker или что-то в этом роде нет. DCs не очень далеко друг от друга. Но они физически разделены.

Теперь, что вы должны сделать, чтобы гарантировать отказоустойчивость кластера на ОБЕИХ СТОРОНАХ, если соединение между этими двумя контроллерами домена не работает? Так что с ОБЕИХ сторон производители и потребители все равно должны работать.

Я бы предположил: вам нужно несколько Zookeeper с обеих сторон и несколько Kafka-Nodes.

Но достаточно ли этого? Восстанавливает ли кластер себя после повторного подключения?

Заранее спасибо.

Для информации (чтобы помочь прояснить обсуждение) это называется «Растягивающийся кластер».

Robin Moffatt 11.02.2019 11:22
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
0
1
323
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что ваши центры обработки данных, которые «не очень далеко друг от друга», в основном являются зонами доступности (AZ).

Довольно часто кластер распределяется по нескольким зонам доступности. Однако обычно нежелательно или невозможно, чтобы каждый «кусочек» мог жить сам по себе.

Непосредственной проблемой является Zookeeper, который по своей конструкции предотвращает сценарии с разделенным мозгом. Таким образом, если кластер ZK разделен, только один «срез» (в лучшем случае) будет продолжать работать. Таким образом, брокеры, которые находятся на стороне неработающих кластеров ZK, не будут работать.

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

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

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

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

При правильной настройке Kafka может пережить сбой в зоне доступности (хотя на практике лучше иметь 3 зоны доступности) и сохранить доступными все ресурсы. Также в этом случае кластер автоматически вернется в нормальное состояние, когда вернется отказавшая зона доступности.

Я понимаю. Спасибо за ваш ответ. Имхо, решение состоит в том, чтобы создать несколько кластеров и решить от темы к теме, где они должны оставаться доступными, и поместить большинство экземпляров Zookeeper в эту зону доступности.

malachi54 12.02.2019 15:16

Другие вопросы по теме