代理可能不可用错误 Kafka 模式注册表

Posted

技术标签:

【中文标题】代理可能不可用错误 Kafka 模式注册表【英文标题】:Broker may not be available error Kafka schema registry 【发布时间】:2019-06-11 13:04:27 【问题描述】:

我已经使用 Kubernetes 部署和服务定义了 Kafka 和 Kafka 架构注册表配置。我使用this link 作为环境变量设置的参考。但是,当我尝试使用注册表运行 Kafka 时,我看到架构注册表 pod 崩溃并在日志中显示错误消息:

[kafka-admin-client-thread | adminclient-1] WARN
org.apache.kafka.clients.NetworkClient - [AdminClient
clientId=adminclient-1] Connection to node -1
(localhost/127.0.0.1:9092) could not be established. Broker may not be
available.
    [main] ERROR io.confluent.admin.utils.ClusterStatus - Error while getting broker list.
    java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for
a node assignment.

这个错误的原因可能是什么?

apiVersion: v1
kind: Service
metadata:
  name: kafka-service
spec:
  ports:
    - name: client
      port: 9092
  selector:
    app: kafka
    server-id: "1"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-1
spec:
  selector:
    matchLabels:
      app: kafka
      server-id: "1"
  replicas: 1
  template:
    metadata:
      labels:
        app: kafka
        server-id: "1"
    spec:
      volumes:
        - name: kafka-data
          emptyDir: 
      containers:
        - name: server
          image: confluentinc/cp-kafka:5.1.0
          env:
            - name: KAFKA_ZOOKEEPER_CONNECT
              value: zookeeper:2181
            - name: KAFKA_ADVERTISED_LISTENERS
              value: PLAINTEXT://localhost:9092
            - name: KAFKA_BROKER_ID
              value: "2"
            - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
              value: "1"
          ports:
            - containerPort: 9092
          volumeMounts:
            - mountPath: /var/lib/kafka
              name: kafka-data
---
apiVersion: v1
kind: Service
metadata:
  name: schema-registry-service
spec:
  ports:
    - name: client
      port: 8081
  selector:
    app: kafka-schema-registry
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-schema-registry
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-schema-registry
  template:
    metadata:
      labels:
        app: kafka-schema-registry
    spec:
      containers:
        - name: kafka-schema-registry
          image: confluentinc/cp-schema-registry:5.1.0
          env:
            - name: SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL
              value: zookeeper:2181
            - name: SCHEMA_REGISTRY_HOST_NAME
              value: localhost
            - name: SCHEMA_REGISTRY_LISTENERS
              value: "http://0.0.0.0:8081"
            - name: SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS
              value: PLAINTEXT://localhost:9092
          ports:
            - containerPort: 8081

【问题讨论】:

localhostkafka 更不正确。通告的侦听器必须是其他 pod 可以访问 Kafka 的服务 DNS 名称。并且模式注册表必须使用该名称,而不是 localhost。我建议尝试使用 Confluent Helm Charts 来简化平台部署 docs.confluent.io/current/installation/installing_cp/… 【参考方案1】:

我遇到了同样的错误,我按照 cricket_007 的回答得到了解决。

只需将 KAFKA_ADVERTISED_LISTENERS 值从 PLAINTEXT://localhost:9092 更改为 PLAINTEXT://schema-registry-service:9092

【讨论】:

【参考方案2】:

您已将 Schema Registry 配置为在 kafka:9092 上查找 Kafka 代理,但您还配置了 Kafka 代理以将其地址通告为 localhost:9092

我对 Kubernetes 不是特别熟悉,但是this article 描述了在使用容器、IaaS 等时如何处理网络配置的原则。

【讨论】:

我犯了一个错误并粘贴了我的旧版本。我当前的版本是我使用本地主机的地方,但是,它会产生相同的错误

以上是关于代理可能不可用错误 Kafka 模式注册表的主要内容,如果未能解决你的问题,请参考以下文章

Kafka 连接到 Bigquery 连接器而没有模式注册表给出错误

Flink 与 Confluent Kafka 模式注册表

Kafka 模式注册表在同一主题中不兼容

Kafka-connect 是不是必须使用模式注册表?

Kafka Connect 访问模式注册表的基本身份验证

Protobuf 的 Kafka 模式注册表