У меня 3 брокера, 3 раздела.Каждый брокер является лидером для одного раздела и ISR для всех.Допустим, я запускал брокеров на портах 19092,29092,39092
соответственно.
19092 - partition 0
29092 - partition 1
39092 - partition 2
Тест Half-брокера:
Я бы хотел назвать его так!Поскольку он разрешает только ВЫХОД, но не ВХОД
Теперь я добавил следующее правило iptables:
iptables -A INPUT -p tcp --dport 29092 -j DROP
и в источнике:
bin/kafka-console-producer --broker-list 10.54.8.172:19092 --topic ftest
Вышеупомянутое правило iptables блокирует доступ INPUT, но не ограничивает посредника от обновления его живучести с помощью Zookeeper.Таким образом, zookeeper не будет считать его мертвым и не будет проводить выборы лидера для раздела 1.
Но производитель не может подключиться к нему из-за ПРАВИЛА и, следовательно, выдает ошибку.
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for ftest-1: 1778 ms has passed since batch creation plus linger time
Это я сделал вручную, но могут быть и другие причины, по которым доступ INPUT может быть заблокирован (некоторые вредоносные программы, DDoS или что-то еще).
До ПРАВИЛА iptables:
Metadata for ftest (from broker 1: 10.54.8.172:19092/1):
3 brokers:
broker 2 at 10.54.8.172:29092
broker 1 at 10.54.8.172:19092
broker 3 at 10.54.8.172:39092
1 topics:
topic "ftest" with 3 partitions:
partition 2, leader 3, replicas: 3,1,2, isrs: 3,1,2
partition 1, leader 2, replicas: 2,3,1, isrs: 2,3,1
partition 0, leader 1, replicas: 1,2,3, isrs: 1,2,3
После правила iptables:
Metadata for ftest (from broker 1: 10.54.8.172:19092/1):
3 brokers:
broker 2 at 10.54.8.172:29092
broker 1 at 10.54.8.172:19092
broker 3 at 10.54.8.172:39092
1 topics:
topic "ftest" with 3 partitions:
partition 2, leader 3, replicas: 3,1,2, isrs: 3,1,2
partition 1, leader 2, replicas: 2,3,1, isrs: 2
partition 0, leader 1, replicas: 1,2,3, isrs: 1,2,3
Поскольку существует только один лидер, и он мертв (в том смысле, чтоне может принимать никаких сообщений), не является ли единичной точкой отказа ?
Я считаю, что в идеале должно быть двустороннее взаимодействие между брокерами Zookeeper и Kafka.Не так ли?Кафка это позволяет?Если да, то как?
Кроме того, когда 29092 заблокирован для доступа INPUT, его ISR сократился до 1.
Это может быть из-за того, что он не может получать сообщения (биения) от2 других посредника.
Если он может подключиться (OUTPUT включен), то он может записать их, и для репликации, чтобы получить подтверждение, ему необходим доступ INPUT.
Таким образом, и INPUT, и OUTPUTздесь тоже должно быть.
Брокер 29092 ничем не хуже.Выход из системы в неисправимое состояние!