持续更新
前言
工作需要学习kafka,说实话之前有使用过各种的mq,对于入门来说都是简简单单,很块就能上手。但是这次的kafka入门真的是太心累了,使用window安装还有看启动先使用springboot测试,结果就是抛出一堆问题,就想着用java简单写下cs通信,依然失败,比如broken始终无法创建成功(结果是自己zookeeper问题),然后找各种解决问题的相关博客,结果都是改端口,但是没有一个对上点,都是无效方案,什么改listen,port,奇怪的是有些博客都不写明自己的版本,然后就对问题给出相关的方案,但是不同版本,有些配置都不一样啊,唉。。。。。
入门新技术
通过这次的入门,我总结了一个以后入门新技术的通用避免踩坑的入门流程。
-
官方下载对应的jar,以及运行依赖的软件都要用telnet测试下是不是通信正常,首先要保证环境正常。
-
然后先使用软件自带的一些命令工具走一遍,比如kafka自带的一些bat,当然linux是sh文件,完成一个基本的主题创建,发布消息和消费的过程。相比较集成到java或者其他语言开发中使用抛出异常,从软件本身抛出的异常,可以很块看出问题,这样走一遍可以避免软件本身一些很多的简单但是容易忽视的坑,比如一些配置。
-
然后使用java基本的或者其他语言的api进行一个简单dome,测试,可以避免一些语言层面会出现的一些坑。
-
然后在使用springboot或者其他的框架进行集成测试使用,这样提高很大的成功率。
问题记录
20200908
Error when sending message to topic XXX with key: null
对应的kafka版本是 kafka_2.11-1.0.0
源码位置
https://github.com/ishaveanyone/skill-pool/tree/master/kafka
https://github.com/ishaveanyone/springboot/tree/master/springboot-kafka
这次的问题发现是通过kafka 自带的提供者bat发送消息测试抛出的问题:
Error when sending message to topic XXX with key: null, value: 0 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test-xupp-0: 1532 ms has passed since batch creation plus linger time
乍一看好像发送超时,然后网上各种说是进行修改server.properties文件中的listeners 配置,但是压根没有用,最后自己通过修改配置文件中的 log.dirs 的文件路径分割符,from \ to / 竟然就可以了 (原来配置是log.dirs=H:\kafka 改成log.dirs=H:/kafka),真是爆炸。记录一波。。。。