我正在尝试从本地计算机上的 kubernetes 外部访问 kafka。我正在使用 spring 应用程序来生成有关某个主题的事件。这是我的 kafka 部署文件:

kind: Deployment 
metadata: 
  name: kafka-broker0 
  labels: 
    app: kafka 
spec: 
  replicas: 2 
  selector: 
    matchLabels: 
      app: kafka 
      id: "0" 
  template: 
    metadata: 
      labels: 
        app: kafka 
        id: "0" 
    spec: 
      containers: 
      - name: kafka 
        image: wurstmeister/kafka 
        ports: 
        - containerPort: 9092 
        env: 
        - name: KAFKA_ADVERTISED_PORT 
          value: "30718" 
        - name: KAFKA_ADVERTISED_HOST_NAME 
          value: 192.168.1.240 
        - name: KAFKA_ZOOKEEPER_CONNECT 
          value: zoo1:2181 
        - name: KAFKA_BROKER_ID 
          value: "0" 
        - name: KAFKA_CREATE_TOPICS 
          value: LaunchScraper:1:1 

和服务文件 ID:

kind: Service 
metadata: 
  name: kafka-services 
  labels: 
    name: kafka 
spec: 
  selector: 
    app: kafka 
    id: "0" 
  ports: 
    - protocol: TCP 
      name: kafka-port 
      port: 9092 
  type: NodePort 

我已经在 kubernetes 上创建了一个 Zookeeper Pod。我的 Spring Boot 应用程序显示此错误:

2020-09-25 23:56:29.123  WARN 44324 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Connection to node -1 (/192.168.1.240:9092) could not be established. Broker may not be available. 

请您参考如下方法:

您似乎没有修复服务中的nodePort。当您达到在 KAFKA_ADVERTISED_PORT 中输入的值时。还将 KAFKA_ADVERTISED_HOST 设置为您的 K8s 节点主机名/DNS。

在您的服务规范中,在 ports 条目下添加 nodePort: 30718。然后在您的客户端中,尝试使用节点的地址或主机名连接 30718 端口

此外,如果您希望在生产环境中部署 Kafka,我建议使用 Strimzi https://Strimzi.io 等运算符。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!