Производитель Kafka продолжает генерировать сообщения, даже когда работает только 1 узел из 3 - PullRequest
0 голосов
/ 01 июля 2019

Использование kafka версии 1.1.0 на сервере и такая же зависимость Spring в клиенте производителя:

Зависимость Gradle: группа реализации: 'org.apache.kafka', имя: 'kafka_2.11', версия: '1.1.0'

Я создал тему с фактором репликации 3 и одним разделом.Серверная сторона 3-х узловый кафка кластер.Когда все узлы подключены к производителю и отправляют сообщения в обычном режиме.Когда один узел выходит из строя, производитель продолжает работать нормально.Когда второй узел (из 3) выходит из строя, я ожидаю, что производитель сгенерирует исключение, как только выйдет из строя больше чем RF - 1 узлов.В этом случае это будет 2 узла.

Вот мой код производителя Java.

Конфигурация производителя:

Properties props = new Properties();
props.put("bootstrap.servers","host1:9092,host2:9092,host3:9092); 
props.put("min.insync.replicas","2");
props.put("default.replication.factor","3");
props.put("acks","all");
props.put("retries","1");
props.put("batch.size","16384");
props.put("linger.ms","1");
props.put("buffer.memory","33554432");
props.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
props.put("num.partitions","1");

Код отправителя:

String data = "some data";
String topic = "testTopic";
try {
    ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>(
            topic, data);

    RecordMetadata m = producer.send(producerRecord).get(); // Publish message to topic

    logger.info("Message application id: {} ", appId);
    logger.info("Message produced, offset: " + m.offset());
    logger.info("Message produced, partition : " + m.partition());
    logger.info("Message produced, topic: " + m.topic());
    logger.info("Data sent to topic: {} ", topic);
}catch (Exception e) { 
    logger.error("Error:\n", e); 
    producer.close();
}

При указанной выше конфигурации и коде производитель может отправлять сообщения только с одним работающим узлом.Я попытался сузить проблему, используя производителя консоли "kafka-console-producer.sh", и я наблюдаю то же поведение.Производитель консоли не дает сбоя, когда 2 узла не работают.

1 Ответ

0 голосов
/ 01 июля 2019

props.put("min.insync.replicas","2");

Это свойство темы и / или брокера, а не свойство производителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...