Как KafKa гарантирует согласованность и доступность?

Я узнал из http://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafka

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

В распределенной системе я думаю, что «Разделение» является основным, поэтому я не знаю, что Кафка гарантирует доступность без раздела, когда вышел из строя только серверный узел. Или я что-то пропустил


person regrecall    schedule 24.04.2015    source источник


Ответы (1)


Я думаю, что вы можете путать смысл сегментирования «разделения» с сетевыми разделами.

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

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

person kuujo    schedule 24.04.2015
comment
Спасибо за ваш повтор, kuujo, я резюмирую из вашего ответа, например, есть две стороны сети (сторона a, сторона b), когда тема x сделала три раздела на двух сторонах сети (p1 находится на стороне a, p2, p3 находится на стороне b), а p1 является лидером этой темы. поэтому, когда сеть между сторонами a и b нарушена, p2, p3 должны выбрать лидера на стороне b для темы, а p1 по-прежнему является лидером на стороне a для темы. Таким образом, для темы произошло две записи, и согласованность не гарантируется. Это правильно? - person regrecall; 25.04.2015