Kafka предоставляет различные настройки для достижения высокой доступности и может быть настроен и оптимизирован в соответствии с требованиями
1. min.insync.replicas: Это минимальное количество копий, которые будут всегда жить в любое время, чтобы продолжить работу кластера Kafka. Например, позволяет нам иметь 3 брокерских узла и один брокерский узел в этом случае, если min.insync.replicas = 2 или менее кластер будет продолжать обслуживать запрос, однако если min.insync.replicas 3, он остановится. Обратите внимание, что min.insync.replicas = 1 не рекомендуется в том случае, если потерянные данные будут потеряны навсегда. min.insync.replicas - это баланс между более высокой согласованностью (требующей записи более чем одному брокеру) и более высокой доступностью (разрешающей запись, когда доступно меньше брокеров).
2. ack (Acknowledgements): Во время публикации сообщения мы можем установить, сколько реплик фиксируется, прежде чем производитель получит подтверждение. Например, ack = 0 означает немедленное подтверждение сообщения, не ожидая какой-либо фиксации раздела. ack = 1 означает получение подтверждения о успешном завершении после получения коммита лидером. ack - это все средства подтверждения после всех синхронизированных реплик.
leader.election.enable: Вы можете установить unclean.leader.election.enable = true для своих брокеров, и в этом случае, если никакие реплики не синхронизированы, одна изРеплики будут синхронизированы. Это может привести к потере данных, но способствует доступности. Конечно, если некоторые реплики синхронизированы, он все равно выберет одну из них
offsets.topic.replication.factor : должно быть больше, чем в случае __consumer_offsets, чтобы иметь высокий уровень доступности. __consumer_offsets - это смещение темы, чтобы управлять смещением темы, поэтому, если у вас есть коэффициент репликации темы, равный 1, он может не получиться, если один из брокеров отключится
Потребитель всегда читает из раздела лидера. Потребители не потребляют от подписчиков, подписчики существуют только для избыточности и отработки отказа. Есть возможности, что неудачный брокер состоит из нескольких лидерских разделов. Таким образом, в этом случае последователь из раздела другого брокера будет повышен до лидера. В другом сценарии раздел подписчика не имеет 100% синхронизации с разделом лидера, тогда мы можем потерять некоторые данные. Здесь описывается сценарий того, как или что вы используете при публикации сообщений.
Существует компромисс между количеством разделов или репликаций, которое является лучшим. Я могу сказать, что это зависит от дизайна и выбора на основе обсуждения. Пожалуйста, обратите внимание, что большое количество реплик приведет к перегрузке, что делает ISR со всеми разделами последователей с большим количеством занятой памяти, в то время как очень мало, как 1 или 2, улучшит производительность, но не обеспечит высокую доступность.
Контроллер брокера Контроллер является одним из посредников, у которого есть дополнительные обязанности по управлению разделами и репликами. Он несет некоторую дополнительную ответственность и сохраняет некоторые метаданные и ответы при любых изменениях метаданных в разделе.
Любой из посредников может играть роль контроллера, но в работоспособном кластере есть ровно один контроллер. Кафкаброкер будет привязан к другому контроллеру в случае отключения контроллера или потери соединения зоопарком. Если контроллер равен 0 или больше 1, значит, Брокер не здоров