Я получаю сообщение об ошибке: org.apache.kafka.common.errors.InvalidReplicationFactorException: коэффициент репликации: 3 больше, чем доступные брокеры: 1

Я получаю эту ошибку, когда запускаю приложение Kafka в Spring Boot. Я хочу создать тему, запустив мое приложение. Это мой класс конфигурации:

@Configuration
public class KafkaConfig {

    @Bean
    NewTopic createTopic() {
        return TopicBuilder.name("product-created-events-topic")
                .partitions(3)
                .replicas(3)
                .configs(Map.of("min.insync.replicas", "2"))
                .build();
    }
}

Мое приложение.свойства:

spring.application.name=Product-Microservice
server.port=0
server.kafka.producer.bootstrap-servers=localhost:9092, localhost:9094
spring-kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring-kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer

Это ошибка, показанная на моем сервере Kafka:

[2024-06-17 09:45:17,355] INFO [Admin Manager on Broker 0]: Error processing create topic request CreatableTopic(name='product-created-events-topic', numPartitions=3, replicationFactor=3, assignments=[], configs=[CreateableTopicConfig(name='min.insync.replicas', value='2')]) (kafka.server.ZkAdminManager)
org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 3 larger than available brokers: 1.

Когда я изменил реплики (3) на реплики (1), все заработало, и моя тема создана:

@Configuration
public class KafkaConfig {

    @Bean
    NewTopic createTopic() {
        return TopicBuilder.name("product-created-events-topic")
                .partitions(3)
                .replicas(1) //Changed from 3 -> 1
                .configs(Map.of("min.insync.replicas", "2"))
                .build();
    }
}

после запуска мой процесс был создан, но только с одной репликой

Topic: product-created-events-topic     TopicId: ---- PartitionCount: 3       ReplicationFactor: 1    Configs: min.insync.replicas=2
        Topic: product-created-events-topic     Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: product-created-events-topic     Partition: 1    Leader: 0       Replicas: 0     Isr: 0
        Topic: product-created-events-topic     Partition: 2    Leader: 0       Replicas: 0     Isr: 0

Я использую Windows, поэтому использую традиционную Кафку с Zookeeper.

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

Ответы 1

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

использую Windows, поэтому я использую традиционную Кафку с Zookeeper

Вам нужно будет запустить на своем компьютере 3 брокера, чтобы создавать любые темы с 3 репликами. Это означает многократное выполнение kafka-server-start или использование Docker Compose/minikube с тремя брокерами.

Можете ли вы рассказать мне, как запустить несколько брокеров? Должен ли я запустить 3 сервера Kafka или изменить что-то в файле server.properties? На самом деле я новичок в Kafka и следую руководству, чтобы изучить его, там он не внес никаких изменений, поэтому я посчитал, что это может быть недостатком использования Zookeeper (поскольку MAC использует KRaft). Было бы здорово, если бы вы мне помогли.

Nirav Parekh 18.06.2024 13:42

Windows также должна иметь возможность использовать Kraft. Как уже упоминалось, вам придется запускать kafka-server-start несколько раз с отдельными файлами свойств... Однако использование нескольких брокеров на одном компьютере не рекомендуется. Один жесткий диск — это единственная точка отказа, поэтому нет смысла копировать, на самом деле.

OneCricketeer 18.06.2024 19:22

Хорошо, спасибо за помощь. Кстати, мы можем запустить KRaft в Windows в WSL (Linux в Windows)

Nirav Parekh 19.06.2024 10:02

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