返回

java-引导中没有给出可解析的引导URL。使用docker的服务器

发布时间:2022-03-03 21:56:57 312
# php

我一直在和卡夫卡打交道时遇到一些问题,我是一个乞丐,我还在学习,所以我希望能得到任何帮助。

在我的特殊情况下,我正在与卡夫卡和多克合作编写一个文件。在这里,我展示我的撰写文件:

version: "3.2"
services:
####################################
  zookeeper:
    image: 'confluentinc/cp-zookeeper:latest'
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - 2181:2181

###############################################################
  broker:
    image: 'confluentinc/cp-kafka:latest'
    container_name: broker
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      ALLOW_PLAINTEXT_LISTENER: "yes"
      # Exposes 9092 for external connections to the broker
      # Use kafka:29092 for connections internal on the docker network
      # See https://rmoff.net/2018/08/02/kafka-listeners-explained/ for details
      KAFKA_LISTENERS: "PLAINTEXT://:29092,PLAINTEXT_HOST://:9092"
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_DELETE_TOPIC_ENABLE: "true"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      ################################################################
  kafdrop2:
    image: 'obsidiandynamics/kafdrop:latest'
    container_name: kafdrop2
    ports:
      - 9000:9000
 

    environment:
      KAFKA_BROKERCONNECT: broker:29092

此外,我使用Kafdrop来更快地查看主题和消息,而不是使用命令行。

我创建了一个名为First_topic的主题,我有以下代码:

package com.nrich.curse.kafka.tutorial;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;

import java.util.Properties;

public class demo {
    public static void main(String[] args) {
        // Create the producer properties
        String servers = "broker:29092";
        Properties properties = new Properties();
        // properties.setProperty("bootstrap.servers", "broker:9092");
        properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, servers);
        // Serializer helps the producer know what type of value is send
        // and how to serialize it to bytes
        properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());


        // Create the producer, using String in each one mean the key/value be a string
        KafkaProducer producer = new KafkaProducer(properties);

        // Creating the producer record
        ProducerRecord record =
                new ProducerRecord("First_Topic","hello world nuevo nuevo funcionando");

        // Send Data - COnsider it is asyncronic
        producer.send(record);
        // flush the data
        producer.flush();
        // flush and close the producer
        producer.close();
    }
}

我的问题是,当我使用以下方法设置引导服务器或方向时:String servers = "broker:29092";我尝试使用docker运行jar文件,但失败了。jar文件是用maven编译的,所以我所做的就是将docker文件放入jar中。

我的docker文件如下所示:

FROM openjdk:11
WORKDIR /
COPY kafka-course-1.0.jar ./

CMD  java -Xmx10m -Xms10m -jar kafka-course-1.0.jar

我已经构建了它,当我运行它时,总是会出现以下错误:

[main] WARN org.apache.kafka.clients.ClientUtils - Couldn't resolve server broker:29092 from bootstrap.servers as DNS resolution failed for broker
[main] INFO org.apache.kafka.clients.producer.KafkaProducer - [Producer clientId=producer-1] Closing the Kafka producer with timeoutMillis = 0 ms.
[main] INFO org.apache.kafka.common.metrics.Metrics - Metrics scheduler closed
[main] INFO org.apache.kafka.common.metrics.Metrics - Closing reporter org.apache.kafka.common.metrics.JmxReporter
[main] INFO org.apache.kafka.common.metrics.Metrics - Metrics reporters closed
[main] INFO org.apache.kafka.common.utils.AppInfoParser - App info kafka.producer for producer-1 unregistered
Exception in thread "main" org.apache.kafka.common.KafkaException: Failed to construct kafka producer
    at org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:442)
    at org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:292)
    at org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:319)
    at org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:304)
    at com.nrich.curse.kafka.tutorial.demo.main(demo.java:24)
Caused by: org.apache.kafka.common.config.ConfigException: No resolvable bootstrap urls given in bootstrap.servers
    at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:89)
    at org.apache.kafka.clients.ClientUtils.parseAndValidateAddresses(ClientUtils.java:48)
    at org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:416)

我不知道为什么会这样,但它不起作用。

我看到的是,如果我在没有docker的情况下运行代码,只在本地运行它,它会工作,但只有当我像这样更改引导服务器时,它才会工作:String servers = "localhost:9092";事实上,我已经尝试过在docker中使用新的jar文件(更改引导服务器并重新编译),但甚至认为它不起作用。

正如我提到的,如果我在本地运行它,它会使用;本地主机:9092“;,制作人从主题中获得信息,如下图所示:话题中的事件

如果您有任何解决方案或建议,我们将不胜感激。非常感谢。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
下一篇
Excel VBA高级过滤器错误 2022-03-03 20:35:47