本地 docker 服务的 Spring Boot Kafka 连接问题

Posted

技术标签:

【中文标题】本地 docker 服务的 Spring Boot Kafka 连接问题【英文标题】:Spring Boot Kafka Connection Problem for local docker service 【发布时间】:2020-09-03 13:16:03 【问题描述】:

我正在使用 docker 在本地机器(mac os)上启动 kafka 和 zookeper 服务。这是我的 docker-compose.yml 文件;

version: '3'

services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 10.200.10.1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

10.200.10.1 :这是我的 docker 主机 IP。我通过这个命令找到它;

ifconfig | grep -E "([0-9]1,3\.)3[0-9]1,3" | grep -v 127.0.0.1 | awk ' print $2 ' | cut -f2 -d: | head -n1

我可以通过 ; 在 docker 容器中创建主题

kafka-topics.sh --bootstrap-server :9092 --create --topic topic1 --partitions 1 --replication-factor 1

并通过以下方式启动生产者:

kafka-console-consumer.sh --bootstrap-server :9092 --group sam --topic topic1

并通过以下方式启动消费者:

kafka-console-producer.sh --broker-list :9092 --topic topic1

没有问题,终端上一切正常;我可以通过生产者发送消息并在消费者处接收。

但我无法通过 Spring Boot 应用程序发送消息,如下所述;

application.yml 文件;

spring:
  kafka:
    producer:
      bootstrap-servers: 0.0.0.0:9092

卡夫卡配置;

@Configuration
public class KafkaConfiguration 

    @Value("$spring.kafka.producer.bootstrap-servers")
    private String bootstrapAddress;

    @Bean
    public ProducerFactory<String, String> producerFactory() 
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return new DefaultKafkaProducerFactory<>(configProps);
    

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() 
        return new KafkaTemplate<>(producerFactory());
    

我在我的生产者上使用了这个 sendSms 功能;

@Slf4j
@Component
@RequiredArgsConstructor
public class MessageProducer 

    private final KafkaTemplate kafkaTemplate;

    public void sendSms(String sms) 
        kafkaTemplate.send("topic1", sms)
                .addCallback(new ListenableFutureCallback<SendResult<String, String>>() 
                    @Override
                    public void onSuccess(SendResult<String, String> result) 
                        log.info("Message '' sent to kafka with offset : ", sms, result.getRecordMetadata().offset());
                    

                    @Override
                    public void onFailure(Throwable ex) 
                        log.error("Enable to send to message : . ex : ", sms, ex.getMessage());
                    
                );
    


当我尝试发送消息时,我收到此错误;

java.net.ConnectException: Connection refused
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_201]
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_201]
        at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:50) ~[kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:216) ~[kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:531) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.common.network.Selector.poll(Selector.java:483) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:539) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:335) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:244) [kafka-clients-2.3.1.jar:na]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

    2020-05-17 19:53:06.210 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Node -1 disconnected.
    2020-05-17 19:53:06.210  WARN 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Connection to node -1 (/0.0.0.0:9092) could not be established. Broker may not be available.
    2020-05-17 19:53:06.210 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Give up sending metadata request since no node is available
    2020-05-17 19:53:06.265 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Give up sending metadata request since no node is available
    2020-05-17 19:53:06.319 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initialize connection to node 0.0.0.0:9092 (id: -1 rack: null) for sending metadata request
    2020-05-17 19:53:06.320 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initiating connection to node 0.0.0.0:9092 (id: -1 rack: null) using address /0.0.0.0
    2020-05-17 19:53:06.320 DEBUG 15739 --- [ad | producer-1] o.apache.kafka.common.network.Selector   : [Producer clientId=producer-1] Connection with /0.0.0.0 disconnected

    java.net.ConnectException: Connection refused
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_201]
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_201]
        at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:50) ~[kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:216) ~[kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:531) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.common.network.Selector.poll(Selector.java:483) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:539) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:335) [kafka-clients-2.3.1.jar:na]
        at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:244) [kafka-clients-2.3.1.jar:na]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

这里是整个日志输出;

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.7.RELEASE)

2020-05-17 19:52:57.176  INFO 15739 --- [  restartedMain] .p.SpringKafkaProducerExampleApplication : Starting SpringKafkaProducerExampleApplication on sam-MacBook-Pro.local with PID 15739 (/Users/sam/Downloads/kafka-hello/spring-kafka-producer-example/build/classes/java/main started by sam in /Users/sam/Downloads/kafka-hello/spring-kafka-producer-example)
2020-05-17 19:52:57.180  INFO 15739 --- [  restartedMain] .p.SpringKafkaProducerExampleApplication : No active profile set, falling back to default profiles: default
2020-05-17 19:52:57.231  INFO 15739 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2020-05-17 19:52:57.231  INFO 15739 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2020-05-17 19:52:58.111  INFO 15739 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2020-05-17 19:52:58.120  INFO 15739 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-05-17 19:52:58.120  INFO 15739 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.34]
2020-05-17 19:52:58.181  INFO 15739 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-05-17 19:52:58.181  INFO 15739 --- [  restartedMain] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 950 ms
2020-05-17 19:52:58.373  INFO 15739 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-05-17 19:52:58.562  INFO 15739 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2020-05-17 19:52:58.610  INFO 15739 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2020-05-17 19:52:58.614  INFO 15739 --- [  restartedMain] .p.SpringKafkaProducerExampleApplication : Started SpringKafkaProducerExampleApplication in 1.878 seconds (JVM running for 2.602)
2020-05-17 19:53:04.243  INFO 15739 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-05-17 19:53:04.243  INFO 15739 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-05-17 19:53:04.248  INFO 15739 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms
2020-05-17 19:53:06.105  INFO 15739 --- [nio-8081-exec-1] c.s.e.kafka.producer.MessageController   : Message request received : sam
2020-05-17 19:53:06.130  INFO 15739 --- [nio-8081-exec-1] o.a.k.clients.producer.ProducerConfig    : ProducerConfig values: 
    acks = 1
    batch.size = 16384
    bootstrap.servers = [0.0.0.0:9092]
    buffer.memory = 33554432
    client.dns.lookup = default
    client.id = 
    compression.type = none
    connections.max.idle.ms = 540000
    delivery.timeout.ms = 120000
    enable.idempotence = false
    interceptor.classes = []
    key.serializer = class org.apache.kafka.common.serialization.StringSerializer
    linger.ms = 0
    max.block.ms = 60000
    max.in.flight.requests.per.connection = 5
    max.request.size = 1048576
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.recording.level = INFO
    metrics.sample.window.ms = 30000
    partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner
    receive.buffer.bytes = 32768
    reconnect.backoff.max.ms = 1000
    reconnect.backoff.ms = 50
    request.timeout.ms = 30000
    retries = 2147483647
    retry.backoff.ms = 100
    sasl.client.callback.handler.class = null
    sasl.jaas.config = null
    sasl.kerberos.kinit.cmd = /usr/bin/kinit
    sasl.kerberos.min.time.before.relogin = 60000
    sasl.kerberos.service.name = null
    sasl.kerberos.ticket.renew.jitter = 0.05
    sasl.kerberos.ticket.renew.window.factor = 0.8
    sasl.login.callback.handler.class = null
    sasl.login.class = null
    sasl.login.refresh.buffer.seconds = 300
    sasl.login.refresh.min.period.seconds = 60
    sasl.login.refresh.window.factor = 0.8
    sasl.login.refresh.window.jitter = 0.05
    sasl.mechanism = GSSAPI
    security.protocol = PLAINTEXT
    send.buffer.bytes = 131072
    ssl.cipher.suites = null
    ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
    ssl.endpoint.identification.algorithm = https
    ssl.key.password = null
    ssl.keymanager.algorithm = SunX509
    ssl.keystore.location = null
    ssl.keystore.password = null
    ssl.keystore.type = JKS
    ssl.protocol = TLS
    ssl.provider = null
    ssl.secure.random.implementation = null
    ssl.trustmanager.algorithm = PKIX
    ssl.truststore.location = null
    ssl.truststore.password = null
    ssl.truststore.type = JKS
    transaction.timeout.ms = 60000
    transactional.id = null
    value.serializer = class org.apache.kafka.common.serialization.StringSerializer

2020-05-17 19:53:06.143 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name bufferpool-wait-time
2020-05-17 19:53:06.148 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name buffer-exhausted-records
2020-05-17 19:53:06.153 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name errors
2020-05-17 19:53:06.158 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name produce-throttle-time
2020-05-17 19:53:06.163 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name connections-closed:
2020-05-17 19:53:06.164 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name connections-created:
2020-05-17 19:53:06.164 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name successful-authentication:
2020-05-17 19:53:06.164 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name successful-reauthentication:
2020-05-17 19:53:06.164 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name successful-authentication-no-reauth:
2020-05-17 19:53:06.165 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name failed-authentication:
2020-05-17 19:53:06.165 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name failed-reauthentication:
2020-05-17 19:53:06.165 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name reauthentication-latency:
2020-05-17 19:53:06.165 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name bytes-sent-received:
2020-05-17 19:53:06.166 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name bytes-sent:
2020-05-17 19:53:06.166 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name bytes-received:
2020-05-17 19:53:06.167 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name select-time:
2020-05-17 19:53:06.167 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name io-time:
2020-05-17 19:53:06.170 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name batch-size
2020-05-17 19:53:06.171 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name compression-rate
2020-05-17 19:53:06.171 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name queue-time
2020-05-17 19:53:06.171 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name request-time
2020-05-17 19:53:06.172 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name records-per-request
2020-05-17 19:53:06.172 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name record-retries
2020-05-17 19:53:06.172 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name record-size
2020-05-17 19:53:06.173 DEBUG 15739 --- [nio-8081-exec-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name batch-split-rate
2020-05-17 19:53:06.174 DEBUG 15739 --- [ad | producer-1] o.a.k.clients.producer.internals.Sender  : [Producer clientId=producer-1] Starting Kafka producer I/O thread.
2020-05-17 19:53:06.176  INFO 15739 --- [nio-8081-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka version: 2.3.1
2020-05-17 19:53:06.177  INFO 15739 --- [nio-8081-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka commitId: 18a913733fb71c01
2020-05-17 19:53:06.177  INFO 15739 --- [nio-8081-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka startTimeMs: 1589741586174
2020-05-17 19:53:06.178 DEBUG 15739 --- [nio-8081-exec-1] o.a.k.clients.producer.KafkaProducer     : [Producer clientId=producer-1] Kafka producer started
2020-05-17 19:53:06.179 DEBUG 15739 --- [nio-8081-exec-1] o.s.k.core.DefaultKafkaProducerFactory   : Created new Producer: CloseSafeProducer [delegate=org.apache.kafka.clients.producer.KafkaProducer@4f619fb3]
2020-05-17 19:53:06.185 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initialize connection to node 0.0.0.0:9092 (id: -1 rack: null) for sending metadata request
2020-05-17 19:53:06.187 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initiating connection to node 0.0.0.0:9092 (id: -1 rack: null) using address /0.0.0.0
2020-05-17 19:53:06.194 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name node--1.bytes-sent
2020-05-17 19:53:06.195 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name node--1.bytes-received
2020-05-17 19:53:06.195 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.common.metrics.Metrics  : Added sensor with name node--1.latency
2020-05-17 19:53:06.208 DEBUG 15739 --- [ad | producer-1] o.apache.kafka.common.network.Selector   : [Producer clientId=producer-1] Connection with /0.0.0.0 disconnected

java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_201]
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_201]
    at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:50) ~[kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:216) ~[kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:531) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.Selector.poll(Selector.java:483) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:539) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:335) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:244) [kafka-clients-2.3.1.jar:na]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

2020-05-17 19:53:06.210 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Node -1 disconnected.
2020-05-17 19:53:06.210  WARN 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Connection to node -1 (/0.0.0.0:9092) could not be established. Broker may not be available.
2020-05-17 19:53:06.210 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Give up sending metadata request since no node is available
2020-05-17 19:53:06.265 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Give up sending metadata request since no node is available
2020-05-17 19:53:06.319 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initialize connection to node 0.0.0.0:9092 (id: -1 rack: null) for sending metadata request
2020-05-17 19:53:06.320 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initiating connection to node 0.0.0.0:9092 (id: -1 rack: null) using address /0.0.0.0
2020-05-17 19:53:06.320 DEBUG 15739 --- [ad | producer-1] o.apache.kafka.common.network.Selector   : [Producer clientId=producer-1] Connection with /0.0.0.0 disconnected

java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_201]
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_201]
    at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:50) ~[kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:216) ~[kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:531) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.Selector.poll(Selector.java:483) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:539) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:335) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:244) [kafka-clients-2.3.1.jar:na]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

2020-05-17 19:53:06.320 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Node -1 disconnected.
2020-05-17 19:53:06.320  WARN 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Connection to node -1 (/0.0.0.0:9092) could not be established. Broker may not be available.
2020-05-17 19:53:06.320 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Give up sending metadata request since no node is available
2020-05-17 19:53:06.375 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Give up sending metadata request since no node is available
2020-05-17 19:53:06.427 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initialize connection to node 0.0.0.0:9092 (id: -1 rack: null) for sending metadata request
2020-05-17 19:53:06.427 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Initiating connection to node 0.0.0.0:9092 (id: -1 rack: null) using address /0.0.0.0
2020-05-17 19:53:06.427 DEBUG 15739 --- [ad | producer-1] o.apache.kafka.common.network.Selector   : [Producer clientId=producer-1] Connection with /0.0.0.0 disconnected

java.net.ConnectException: Connection refused
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_201]
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_201]
    at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:50) ~[kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:216) ~[kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:531) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.common.network.Selector.poll(Selector.java:483) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:539) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:335) [kafka-clients-2.3.1.jar:na]
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:244) [kafka-clients-2.3.1.jar:na]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

2020-05-17 19:53:06.427 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Node -1 disconnected.
2020-05-17 19:53:06.427  WARN 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Connection to node -1 (/0.0.0.0:9092) could not be established. Broker may not be available.
2020-05-17 19:53:06.427 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : [Producer clientId=producer-1] Give up sending metadata request since no node is available
2020-05-17 19:53:06.482 DEBUG 15739 --- [ad | producer-1] org.apache.kafka.clients.Netwo

【问题讨论】:

尝试在您的配置中将 0.0.0.0 更改为 localhost。我从不尝试使用元地址,但也许它会导致问题。我使用具有非常相似配置的 confluentinc kafka,它与 spring 配合得很好。或者如果这是您的地址,那么:10.200.10.1:这是我的 docker 主机 IP。 顺便说一句,Java 8 即将停产 【参考方案1】:

KAFKA_ADVERTISED_HOST_NAME替换为KAFKA_ADVERTISED_LISTENERS,添加KAFKA_LISTENERS并正确暴露端口:

kafka:
    image: wurstmeister/kafka
    ports:
      - 9092:9092
    environment:
      KAFKA_LISTENERS: PLAINTEXT://:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

连接到localhost:9092:

spring:
  kafka:
    producer:
      bootstrap-servers: localhost:9092

【讨论】:

这假定代码在主机上运行,​​而不是在另一个容器中【参考方案2】:

bootstrap-servers: 0.0.0.0:9092

0.0.0.0 是客户端的无效 IP 地址。

服务器端的0.0.0.0表示监听所有接口。

您必须使用实际地址;大概是10.200.10.1:9092

【讨论】:

以上是关于本地 docker 服务的 Spring Boot Kafka 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

无法从Spring Boot Docker容器连接到本地MySQL数据库服务器

无法通过 Spring Boot 将 Docker Desktop Kubernetes (Windows) 服务连接到本地 Postgres db

如何基于 docker compose 和 testcontainers 设置 Spring Boot 的本地开发环境属性?

如何从 IntelliJ 运行/部署 Spring Boot 微服务到本地 Kubernetes 集群?

Docker:无法连接到弹性搜索表单spring boot docker image

无法将 mysql docker 容器与 Spring Boot 应用程序链接 - 通信链接失败