宇智波程序笔记2-kafka 生产发送消息失败无响应,
今天在使用代码编写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, www.lafei6d.cn V www.yifayuled.cn > record, Callback callback) www.tyyleapp.com{
TopicPartition tp =www.feihongyul.cn www.tianyueptgw.cn null;
try www.yachengyl.cn www.yixingylzc.cn www.qiaoheibpt.com www.baishenjzc.cn
throwIfProducerClosed( www.yixinpt2.cn;
// first make sure the metadata for the topic is available
ClusterAndWaitTime www.shengrenpt.com clusterAndWaitTime;
try {
clusterAndWaitTime = waitOnMetadata(record.topic(), record.partition(), maxBlockTimeMs);
} catch (KafkaException e) www.shengrenyp.cn{
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://www.yachengyl.cn blog.csdn.net/luozhonghua2014/ www.lecaixuangj.cn article/details/80369469
https://www.javachenglei.com /p/2db7abddb9e6
https://www.jujinyule.com www.hongtuuzhuc.cn ingyan.baidu.com/article/86f4a73ed181b837d6526930.html
并且测试过了 : telnet 192.168.0.205 9092 是没有问题的
在 服务器本地上面使用 命令生产消费消息是可以的。
这样就奇怪了。 于是我换成了 另一个 主题进行测试发现是没有问题的。。。
同时注意到了原来是 我写的 主题名称 后面带有空格
低级错误啊!但是后面的空格真的是空格?我自己测试手敲空格,经过测试没有问题的。也就是如果是 主题后面有空格是可以的。
那就是主题名称 后面带上了什么不可见内容。 我想起来了,我是通过复制这个主题名称 的,估计复制多了什么其他内容。
- ArrayList foreach 循环里进行元素的 remove add 操作有什么现象?
- 10个令人相见恨晚的R语言包
- 小心Windows旧版认证暴露你的系统帐户密码
- DNS Shell初体验
- 如何在Weka中加载CSV机器学习数据
- 老司机教你部署Cowrie蜜罐
- 时间序列预测如何变成有监督学习问题?
- 追踪溯源 | 希拉里邮箱泄露事件
- DNS Tunneling及相关实现
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇]
- 从Trace和Debug来看条件编译(Conditional Compilation)
- 解码针对工业工程领域的网络攻击 Operation Ghoul「食尸鬼行动」
- EndpointAddress——不只是一个Uri[上篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法