启动kafka无反应_kafka 生产发送消息失败无响应,或者Error while fetching metadata with correlation id...

在尝试使用Kafka 2.0客户端发送消息时遇到问题,程序卡在doSend方法中,提示'Failed to update metadata after 60000 ms.'。降低客户端版本到1.1.0后,收到'Error while fetching metadata with correlation id'错误。经检查,问题出在主题名称后可能存在的不可见字符,可能是复制粘贴时引入的额外内容导致。解决方法是确保主题名称无误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在使用代码编写kafka 生产者发送消息的时候,因为我的手误出现的搞笑的事情。

同样的代码和kafka 在不久前执行过,是没有问题的。 代码如下

package streaming.utils

import java.util

import java.util.{Date, Properties, UUID}

import com.alibaba.fastjson.JSONObject

import org.apache.commons.lang3.time.FastDateFormat

import org.apache.kafka.clients.producer.{KafkaProducer, ProducerRecord}

import scala.util.Random

/**

* Author: Michael PK QQ: 1990218038

*

* Kafka数据生产者

*/

object ProducerApp {

def main(args: Array[String]): Unit = {

val props = new Properties

props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")

props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")

props.put("bootstrap.servers", ParamsConf.brokers)

props.put("request.required.acks","1")

val topic = ParamsConf.topic

val producer = new KafkaProducer[String,String](props)

val random = new Random()

val dateFormat = FastDateFormat.getInstance("yyyyMMddHHmmss")

for(i

val time = dateFormat.format(new Date())+""

val userid = random.nextInt(1000)+""

val courseid = random.nextInt(500)+""

val fee = random.nextInt(400)+""

val result = Array("0","1") // 0未成功支付,1成功支付

val flag = result(random.nextInt(2))

var orderid = UUID.randomUUID().toString

val map = new util.HashMap[String, Object]()

map.put("time", time)

map.put("userid",userid)

map.put("courseid",courseid)

map.put("fee", fee)

map.put("flag", flag)

map.put("orderid",orderid)

val json = new JSONObject(map)

producer.send(new ProducerRecord[String,String](topic(0),json.toJSONString))

}

println("PK Kafka生产者生产数据完毕...")

}

}

代码很简单。只是用来模拟生产数据而已。

一直以来的使用的 都是 2.0 版本的 kafka client

org.apache.kafka

kafka-clients

2.0.0

但是今天执行的上面的代码的时候。 就 不能发生消息了,也没有错误的提示。 程序也没有关闭。

通过 debug 发现卡在  doSend 代码里面了

private Future doSend(ProducerRecord record, Callback callback) {

TopicPartition tp = null;

try {

throwIfProducerClosed();

// first make sure the metadata for the topic is available

ClusterAndWaitTime clusterAndWaitTime;

try {

clusterAndWaitTime = waitOnMetadata(record.topic(), record.partition(), maxBlockTimeMs);

} catch (KafkaException e) {

if (metadata.isClosed())

throw new KafkaException("Producer closed while send in progress", e);

throw e;

}

虽然它抛出了异常,但是 不能进入

if(metadata.isClosed()) 逻辑里面

外层并没有捕获它的异常。通过debug 这个 异常 e 是    Failed to update metadata after 60000 ms.

考虑到它的版本也服务器版本不一样 就试着 减低版本看看

org.apache.kafka

kafka-clients

1.1.0

执行的时候不停的提示:

lientId=producer-1] Error while fetching metadata with correlation id

并且测试过了 : telnet 192.168.0.205 9092  是没有问题的

在 服务器本地上面使用 命令生产消费消息是可以的。

这样就奇怪了。 于是我换成了 另一个 主题进行测试发现是没有问题的。。。

同时注意到了原来是 我写的 主题名称 后面带有空格

低级错误啊!但是后面的空格真的是空格?我自己测试手敲空格,经过测试没有问题的。也就是如果是 主题后面有空格是可以的。

那就是主题名称 后面带上了什么不可内容。 我想起来了,我是通过复制这个主题名称 的,估计复制多了什么其他内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值