Kafka发送消息报Error while fetching metadata
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka发送消息报Error while fetching metadata相关的知识,希望对你有一定的参考价值。
参考技术A 搜了一下,大家都在说是server.properties的配置问题。但是查了一下我这边,这次并不是这个原因,而是服务的端口安全策略的问题。
后来负责的同学改了一下相关规则就ok了。
kafka producer batch 发送消息
1. 使用 KafkaProducer 发送消息,是按 batch 发送的,producer 首先把消息放入 ProducerBatch 中:
org.apache.kafka.clients.producer.internals.ProducerBatch
2. KafkaProduer 类中有一个 Thread 属性,负责 IO,发送和接收数据:
this.sender = new Sender(logContext, client, this.metadata, this.accumulator, maxInflightRequests == 1, config.getInt(ProducerConfig.MAX_REQUEST_SIZE_CONFIG), acks, retries, metricsRegistry.senderMetrics, Time.SYSTEM, this.requestTimeoutMs, config.getLong(ProducerConfig.RETRY_BACKOFF_MS_CONFIG), this.transactionManager, apiVersions); String ioThreadName = NETWORK_THREAD_PREFIX + " | " + clientId; this.ioThread = new KafkaThread(ioThreadName, this.sender, true); this.ioThread.start();
Sender 类实现了 Runnable 接口,封装了具体的逻辑,发送消息和接收响应都在这个类中。
// 发送消息 long pollTimeout = sendProducerData(now); // 接收响应 client.poll(pollTimeout, now);
3. 执行回调
org.apache.kafka.clients.producer.internals.Sender#completeBatch()
以上是关于Kafka发送消息报Error while fetching metadata的主要内容,如果未能解决你的问题,请参考以下文章