Apache Kafka - клиент не переподключается после перезапуска сервера - PullRequest
0 голосов
/ 25 января 2019

Я тестирую восстановление после отказа серверов Kafka. То есть я перезагружаю серверы Kafka по одному и проверяю, продолжают ли клиенты отправлять и получать сообщения, пока это происходит.

Установка состоит из двух серверов Kafka broker-0 и broker-1, тестовой темы, настроенной на partitionCount=1 и replicationFactor=2, и клиентов, которые отправляют сообщения каждую секунду и прослушивают их.

Итак, я перезапускаю лидер test-topic, то есть broker-0 (я использую kafka-topics.sh, чтобы проверить, какой экземпляр активен), и broker-1 становится новым лидером раздела; клиенты подключаются к этому экземпляру и продолжают отправлять и получать сообщения.

После этого я перезагружаю broker-1, с помощью kafka-topics.sh проверяю, установлен ли этот сервер в наборе ISR, а затем выключаю broker-1.

В этот момент я ожидаю, что клиенты переподключатся к broker-0 и продолжат отправлять / получать сообщения; вместо этого отправитель не может найти активного посредника, и в моих журналах у меня есть:

2019-01-25 17:22:04,062 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node 0 disconnected.
2019-01-25 17:22:04,062 [kafka-producer-network-thread | producer-1] WARN  org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 0 (mytesthost001/192.168.1.1:19093) could not be established. Broker may not be available.
2019-01-25 17:22:04,062 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Give up sending metadata request since no node is available
2019-01-25 17:22:04,112 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Give up sending metadata request since no node is available

Кажется, клиент не знает о резервном копировании сервера; как я могу устранить неисправность / исправить это? (Я использую сервер Kafka и библиотеки версии 2.1)

1 Ответ

0 голосов
/ 29 января 2019

В конце концов я смог понять это - я ждал немного времени (менее 1 минуты) между перезапусками брокеров;и клиенты не были обновлены об изменении состава кластера.Поэтому, когда broker-1 отказал, клиенты не знали, что broker-0 восстановлен.

Я изменил metadata.max.age.ms=10000;этот параметр контролирует, как часто клиент должен обновлять информацию о кластере, и по умолчанию он равен 5 минутам, если не установлен, и, следовательно, он становится короче, клиент может правильно переключаться при сбое

...