Это мои первые дни в изучении кафки. И я проверяю каждое свойство / концепцию kafka на моей локальной машине.
Итак, я натолкнулся на это свойство min.insync.replicas
и вот мое понимание. Пожалуйста, исправьте меня, если я что-то неправильно понял.
- Как только сообщение отправлено в тему, сообщение должно быть написано как минимум
min.insync.replicas
числу подписчиков. min.insync.replicas
также включает лидера. - Если число доступных живых брокеров ( косвенно, в репликах синхронизации ) меньше указанного
min.insync.replicas
, тогда производитель выдаст исключение, не публикуемоесообщение.
Ниже приведены шаги, которые я выполнил для создания описанного выше сценария
- Запустили 3 локальных брокера с идентификаторами брокера 0, 1 и 2
- создал тему insync и установите
min.insync.replicas
на 2, используя следующую команду
sudo ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic insync --config min.insync.replicas=2
Опишите тему, приведенную в следующем
Тема: insync PartitionCount: 1 ReplicationFactor: 3 Конфиги: min.insync.replicas = 2 Тема: insync Раздел: 0 Лидер: 2 Реплики: 2,0,1 Isr: 1,2,0
На этом этапе я убедился, что предоставленное мной свойство выбрано kafka
Я начал отправлять сообщения и потреблять их с терминала, используя следующую команду
Производитель: ./kafka-console-producer.sh --broker-list localhost:9092 --topic insync --producer.config ../config/producer.properties
Потребитель: ./kafka-console-consumer.sh --zookeeper localhost:2181 --topic insync
На данный момент я смог успешно отправлять и получать сообщения.
Скупил 2 брокеров (0 и 2) и описал тему, в результате чего
Тема: insync PartitionCount: 1 ReplicationFactor: 3 Конфиги: min.insync.replicas = 2Тема: insync Раздел: 0 Лидер: 1 Реплики: 2,0,1 Isr: 1
На данный момент In Sync Replicas только 1 ( Isr: 1 )
Затем я попытался создать сообщение, и оно заработало. Мне удалось отправить сообщения от производителя консоли, и я мог видеть эти сообщения в консоли потребителя.
Моя версия Kafka: kafka_2.10-0.10.0.0
следующееСвойства производителя:
bootstrap.servers = localhost: 9092
сжатие.type = нет
batch.size = 20
acks= all
Я ожидал, что произойдет сбой производителя с NotEnoughReplicasException
, как указано в this .
открытый класс NotEnoughReplicasException extends RetriableException
Количество реплик insync для раздела меньше, чем> min.insync.replicas
, но работает нормально.
Я что-то упустил? Как я могу создать сценарий?