Отработка отказа брокера Kafka - потребитель не работает, когда первый узел не работает - PullRequest
0 голосов
/ 20 января 2019

Я тестирую аварийное переключение брокера KAFKA (2.11_2.1.0).

У меня есть 3 узла:

node0:

broker.id=0 
listeners=PLAINTEXT://localhost:9092
advertised.listeners=PLAINTEXT://localhost:9092 

node1:

broker.id=1
listeners=PLAINTEXT://localhost:9093
advertised.listeners=PLAINTEXT://localhost:9093

node2:

broker.id=2
listeners=PLAINTEXT://localhost:9094
advertised.listeners=PLAINTEXT://localhost:9094

Я создал одну тему с 3 разделами и 3 репликами.Я создал одного производителя с настройкой:

properties.put("bootstrap.servers", "localhost:9092,localhost:9093,localhost:9094");
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, LongSerializer.class.getName());
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, MessageSerializer.class.getName());
properties.put(ProducerConfig.ACKS_CONFIG, "1");
properties.put(ProducerConfig.RETRIES_CONFIG, "3");
properties.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "snappy");
properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, MyPartitioner.class.getName());

Я создал 3 потребителей для темы с настройкой:

Properties properties = new Properties();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092,localhost:9093,localhost:9094");
properties.put(ConsumerConfig.GROUP_ID_CONFIG, appName);
properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
properties.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "3000");
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class.getName());
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, MessageDeserializer.class.getName());
properties.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, pulSize + "");
properties.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "10000");
properties.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, "3000");
properties.put(ConsumerConfig.RECONNECT_BACKOFF_MS_CONFIG, "1000");

Сценарий 1 :

Когдаnode0 остановлено, потребители не потребляют сообщения, но производитель выдает сообщения, и при запуске node0 все в порядке.

Сценарий 2 :

Когда node1 или node2 остановлено, потребители потребляют сообщения, а производитель создает сообщения, и все в порядке.

Почему отказоустойчивость не работает в сценарии 1?

...