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

今天在使用代码编写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 <- 1 to 100){
      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

<dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.0.0</version>
        </dependency>

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

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

 private Future<RecordMetadata> doSend(ProducerRecord<K, V> 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.

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

 <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>1.1.0</version>
        </dependency>

执行的时候不停的提示:

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

参考  https://blog.csdn.net/luozhonghua2014/article/details/80369469

https://www.jianshu.com/p/2db7abddb9e6

https://jingyan.baidu.com/article/86f4a73ed181b837d6526930.html

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

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

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

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

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

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

 

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/ouminzy/blog/4522931

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。