无法在 Incubator Helm 图表中更改 kafka broker-id?
Can't change kafka broker-id in Incubator Helm chart?
我在一个 GCP 计算实例 VM 上分别有一个 Zookeeper 服务器(比如 xx.xx.xx.xxx:2181
)运行。
我有 3 个 GKE 集群,它们都位于不同的区域,我正在尝试在这些区域上安装 Kafka 代理节点,以便所有节点都连接到一个 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 服务器,另外两个 pods 只是无限重启。
当我检查 Zookeeper 日志(在 VM 上)时,它看起来如下所示:
...
[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 个集群中的所有 pods 都是 brokerId=0
。
但是,当我执行 kubectl exec -ti pod/my-kafka-n -- env | grep BROKER
时,我可以看到环境变量 KAFKA_BROKER_ID
已针对不同的经纪人更改为 1
、2
和 3
正如我设置的那样。
我做错了什么?更改 kafka-broker id 或使所有代理连接到一个 Zookeeper 实例的正确方法是什么?
make all brokers connect to one Zookeeper instance?
看来您通过 configurationOverrides
选项做得很好。这将使用相同的配置部署所有 pods。
也就是说,每个 pod 的代理 ID 不应该相同。如果您检查 statefulset YAML,似乎 the broker ID is calculated based on the POD_NAME
variable
旁注
3 GKE clusters all in different regions on which I am trying to install Kafka broker nodes so that all nodes connect to one Zookeeper server
我不清楚如何在一个 API 调用中部署到 3 个独立的集群。但是,Kafka、Zookeeper 或 Kubernetes 社区不推荐这种架构,除非这些区域是 "geographically close"
我在一个 GCP 计算实例 VM 上分别有一个 Zookeeper 服务器(比如 xx.xx.xx.xxx:2181
)运行。
我有 3 个 GKE 集群,它们都位于不同的区域,我正在尝试在这些区域上安装 Kafka 代理节点,以便所有节点都连接到一个 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 服务器,另外两个 pods 只是无限重启。
当我检查 Zookeeper 日志(在 VM 上)时,它看起来如下所示:
...
[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 个集群中的所有 pods 都是 brokerId=0
。
但是,当我执行 kubectl exec -ti pod/my-kafka-n -- env | grep BROKER
时,我可以看到环境变量 KAFKA_BROKER_ID
已针对不同的经纪人更改为 1
、2
和 3
正如我设置的那样。
我做错了什么?更改 kafka-broker id 或使所有代理连接到一个 Zookeeper 实例的正确方法是什么?
make all brokers connect to one Zookeeper instance?
看来您通过 configurationOverrides
选项做得很好。这将使用相同的配置部署所有 pods。
也就是说,每个 pod 的代理 ID 不应该相同。如果您检查 statefulset YAML,似乎 the broker ID is calculated based on the POD_NAME
variable
旁注
3 GKE clusters all in different regions on which I am trying to install Kafka broker nodes so that all nodes connect to one Zookeeper server
我不清楚如何在一个 API 调用中部署到 3 个独立的集群。但是,Kafka、Zookeeper 或 Kubernetes 社区不推荐这种架构,除非这些区域是 "geographically close"