无法在“孵化器头盔”图表中更改kafka经纪人ID?

时间:2019-10-30 19:55:42

标签: kubernetes apache-kafka google-kubernetes-engine apache-zookeeper kubernetes-helm

我有一台Zookeeper服务器(例如xx.xx.xx.xxx:2181)分别在一个GCP计算实例VM上运行。

我在试图安装Kafka代理节点的所有不同区域中拥有3个GKE群集,以便所有节点都连接到一个Zookeeper服务器(xx.xx.xx.xxx:2181)。

我在this guide之后在VM上安装了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

我正在使用此Incubator Helm Chart在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服务器,而另外两个Pod无限地重启。

当我在虚拟机上检查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)
...

如上所述,对于所有3个群集中的所有Pod,brokerId=0都是如此。

但是,当我执行kubectl exec -ti pod/my-kafka-n -- env | grep BROKER时,我看到的环境变量KAFKA_BROKER_ID更改为123设置。

我在做什么错?更改kafka-broker ID或使所有代理连接到一个Zookeeper实例的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

  

让所有代理连接到一个Zookeeper实例吗?

似乎您可以通过configurationOverrides选项来做到这一点。这样将以相同的配置部署所有Pod。

话虽如此,每个吊舱的经纪人ID不应相同。如果检查有状态集YAML,则似乎the broker ID is calculated based on the POD_NAME variable


侧注

  

3个GKE群集在我尝试安装Kafka代理节点的不同区域中,以便所有节点都连接到一台Zookeeper服务器

我不清楚您如何在一个API调用中将其部署到3个独立的集群。但是,除非这些区域在“地理位置上接近”,否则Kafka,Zookeeper或Kubernetes社区不建议使用此体系结构。