【问题标题】:Errors while deploying Kafka on Kubernetes在 Kubernetes 上部署 Kafka 时出错
【发布时间】:2019-01-15 13:04:32
【问题描述】:

我在 Kubernetes 上有一个 Kafka 设置,两个代理在两个服务上运行。

NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
kafka-service    NodePort    10.101.47.36     <none>        9092:32132/TCP               2h
kafka-service2   NodePort    10.110.151.216   <none>        9092:32133/TCP               2h
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP                      1d
zoo1             ClusterIP   10.105.248.153   <none>        2181/TCP,2888/TCP,3888/TCP   2h

这两个都是分别暴露在 32132 和 32133 端口上的节点端口。

我使用以下规范创建了集群:

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: kafka-broker1
spec:
  template:
    metadata:
      labels:
        app: kafka
        id: "1"
    spec:
      containers:
      - name: kafka
        image: wurstmeister/kafka
        ports:
        - containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_PORT
          value: "32133"
        - name: KAFKA_ADVERTISED_HOST_NAME
          value: localhost
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zoo1:2181
        - name: KAFKA_BROKER_ID
          value: "1"
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: kafka-broker2
spec:
  template:
    metadata:
      labels:
        app: kafka
        id: "1"
    spec:
      containers:
      - name: kafka
        image: wurstmeister/kafka
        ports:
        - containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_PORT
          value: "32132"
        - name: KAFKA_ADVERTISED_HOST_NAME
          value: localhost
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zoo1:2181

这启动了两个 pod kafka-broker1 和 kafka-broker2。我为 Zookeeper 运行了一个单独的服务,名为 zoo1

我尝试使用以下命令创建一个新主题:

bin/kafka-topics.sh --create --zookeeper 10.105.248.153:2181 --replication-factor 2 --partitions 2 --topic test

它被创建了。下面是主题test的描述

Topic:test  PartitionCount:2    ReplicationFactor:2 Configs:
    Topic: test Partition: 0    Leader: 2   Replicas: 2,1   Isr: 2
    Topic: test Partition: 1    Leader: 2   Replicas: 1,2   Isr: 2

但是当我尝试通过生产者向该主题发布消息时:

kafka/bin/kafka-console-producer.sh --broker-list 10.110.151.216:9092,10.101.47.36:9092 --topic test 要么 kafka/bin/kafka-console-producer.sh --broker-list localhost:32132,localhost:32133 --topic test

我不断收到以下警告:

[2018-08-08 09:53:31,629] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 2 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:31,731] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 3 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:31,840] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 4 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:31,949] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 5 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:32,056] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 6 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:32,163] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 7 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:32,272] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 8 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:32,382] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 9 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2018-08-08 09:53:32,488] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 10 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

我不知道为什么会这样。

【问题讨论】:

  • 如果容器端口不是 Kafka 宣传的端口,那么设置容器端口有什么意义?

标签: kubernetes apache-kafka


【解决方案1】:

Kafka 使用 Zookeeper 进行 Kafka Broker 和 Topic Partition 对的领导选举。 ZooKeeper 返回 POD 的地址。如果重新创建 POD,ZooKeeper 将返回错误的地址。所以最好的做法是不要使用 POD 的 IP 地址。

您正在使用wurstmeister/kafka 图像,我发现它是Readme 一个关于KAFKA_ADVERTISED_HOST_NAME 的注释:

如果要运行多个代理,请勿使用 localhost 或 127.0.0.1 作为主机 ip。

您的安装中有 2 个代理,每个代理都以 localhost 作为主机名。我认为这可能是您的问题的原因。 尝试使用 kafka1kafka2 而不是 localhost 并将该名称的别名添加到 /etc/hosts 文件:

kafka1 127.0.0.1 kafka2 127.0.0.1

然后,您可以尝试连接到以下代理:

kafka/bin/kafka-console-producer.sh --broker-list kafka1:32132,kafka2:32133 --topic test

此外,第二次部署中似乎缺少 KAFKA_BROKER_ID 设置,但这可能是复制/粘贴问题。

【讨论】:

    【解决方案2】:

    保证Kafka外部端口和k8s服务nodePort一致,其他服务调用k8s-service:nodeport。写这个config_kafka_in_kubernetes。 我回答这个问题kafka-behind-traefik,希望对你有所帮助!

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-25
      • 2021-08-24
      • 2018-11-05
      • 2021-08-25
      • 2019-09-07
      相关资源
      最近更新 更多