У меня есть один сервер Zookeeper (скажем, xx.xx.xx.xxx:2181
), работающий на одной виртуальной машине GCP Compute Instance отдельно.
У меня есть 3 кластера GKE в разных регионах, на которых я пытаюсь установить брокерские узлы Kafka, чтобывсе узлы подключаются к одному серверу Zookeeper (xx.xx.xx.xxx:2181
).
Я установил сервер Zookeeper на виртуальной машине, следуя этому руководству со свойствами zookeeper, подобными приведенным ниже:
dataDir=/tmp/data
clientPort=2181
maxClientCnxns=0
initLimit=5
syncLimit=2
tickTime=2000
# list of servers
server.1=0.0.0.0:2888:3888
Я использую эту схему управления инкубатором для развертывания посредников на кластерах GKE.
Согласно README.md Я пытаюсь установить с помощью приведенной ниже команды:
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
helm install --name my-kafka \
--set replicas=1,zookeeper.enabled=false,configurationOverrides."broker\.id"=1,configurationOverrides."zookeeper\.connect"="xx.xx.xx.xxx:2181" \
incubator/kafka
Ошибка
При развертывании с использованием любого из описанных выше способов на всех трех кластерах GKE только один из брокеров подключается к серверу Zookeeper, а другой -два модуля просто перезагружаются бесконечно.
Когда я проверяю журнал Zookeeper (на виртуальной машине), он выглядит примерно так:
...
[2019-10-30 14:32:30,930] INFO Accepted socket connection from /xx.xx.xx.xxx:54978 (org.apache.zookeeper.server.NIOServerCnxnFactory)
[2019-10-30 14:32:30,936] INFO Client attempting to establish new session at /xx.xx.xx.xxx:54978 (org.apache.zookeeper.server.ZooKeeperServer)
[2019-10-30 14:32:30,938] INFO Established session 0x100009621af0057 with negotiated timeout 6000 for client /xx.xx.xx.xxx:54978 (org.apache.zookeeper.server.ZooKeeperServer)
[2019-10-30 14:32:32,335] INFO Got user-level KeeperException when processing sessionid:0x100009621af0057 type:create cxid:0xc zxid:0x422 txntype:-1 reqpath:n/a Error Path:/config/users Error:KeeperErrorCode = NodeExists for /config/users (org.apache.zookeeper.server.PrepRequestProcessor)
[2019-10-30 14:32:34,472] INFO Got user-level KeeperException when processing sessionid:0x100009621af0057 type:create cxid:0x14 zxid:0x424 txntype:-1 reqpath:n/a Error Path:/brokers/ids/0 Error:KeeperErrorCode = NodeExists for /brokers/ids/0 (org.apache.zookeeper.server.PrepRequestProcessor)
[2019-10-30 14:32:35,126] INFO Processed session termination for sessionid: 0x100009621af0057 (org.apache.zookeeper.server.PrepRequestProcessor)
[2019-10-30 14:32:35,127] INFO Closed socket connection for client /xx.xx.xx.xxx:54978 which had sessionid 0x100009621af0057 (org.apache.zookeeper.server.NIOServerCnxn)
[2019-10-30 14:36:49,123] INFO Expiring session 0x100009621af003b, timeout of 6000ms exceeded (org.apache.zookeeper.server.ZooKeeperServer)
...
Я уверен, что создал правила брандмауэра, чтобы открыть необходимыевсе порты, и это не проблема, потому что один из узлов брокера может подключиться (тот, который достигнет первого).
Мне кажется, что borkerID
по какой-то причине не меняется иэто причина, почему Zookeeper отклоняет соединения. Я говорю это потому, что kubectl logs pod/my-kafka-n
выводит что-то вроде следующего:
...
[2019-10-30 19:56:24,614] INFO [SocketServer brokerId=0] Shutdown completed (kafka.network.SocketServer)
...
[2019-10-30 19:56:24,627] INFO [KafkaServer id=0] shutting down (kafka.server.KafkaServer)
...
Как мы можем видеть выше, brokerId=0
для всех пакетов во всех 3 кластерах.
Однако, когдаЯ делаю kubectl exec -ti pod/my-kafka-n -- env | grep BROKER
, я вижу, что переменная окружения KAFKA_BROKER_ID
изменяется на 1
, 2
и 3
для разных брокеров при установке.
Что я делаю неправильно? Как правильно изменить идентификатор kafka-брокера или сделать так, чтобы все брокеры подключались к одному экземпляру Zookeeper?