修改kafka源码,编译kafka 0.8.2.2,解决bug kafka.common.InvalidTopicException
2017-10-30 15:09
851 查看
编译kafka 0.8.2.2,解决bug kafka.common.InvalidTopicException: topic name kafka:h5_send_msg is illegal, contains a character other than ASCII alphanumerics, '.', '_' and '-'
一: 背景说明
异常信息:
[2017-10-23 10:41:32,793] ERROR [KafkaApi-2] error when handling request Name: TopicMetadataRequest; Version: 0; CorrelationId: 1167300213; ClientId: producer-1; Topics: h5_page_action_new,game_brain_gc_community_data,basic_log,friend_pay_new,r_talk_new,active_log_new,pay_log_new,one_key_login_device_new,player_location_new,report_module_log,download_game_log,sdk_function_log_new,mchannel_player_behavior_new,php_api_log_new,wap_h5_pay_new,kafka:h5_send_msg,game_action_interface_log_new,game_log-mm_lrs_xdksgq
(kafka.server.KafkaApis)
kafka.common.InvalidTopicException: topic name kafka:h5_send_msg is illegal, contains a character other than ASCII alphanumerics, '.', '_' and '-'
at kafka.common.Topic$.validate(Topic.scala:42)
at kafka.admin.AdminUtils$.createOrUpdateTopicPartitionAssignmentPathInZK(AdminUtils.scala:181)
at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:172)
at kafka.server.KafkaApis$$anonfun$19.apply(KafkaApis.scala:520)
at kafka.server.KafkaApis$$anonfun$19.apply(KafkaApis.scala:503)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.immutable.HashSet$HashSet1.foreach(HashSet.scala:322)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
at scala.collection.AbstractSet.scala$collection$SetLike$$super$map(Set.scala:47)
at scala.collection.SetLike$class.map(SetLike.scala:92)
at scala.collection.AbstractSet.map(Set.scala:47)
at kafka.server.KafkaApis.getTopicMetadata(KafkaApis.scala:503)
at kafka.server.KafkaApis.handleTopicMetadataRequest(KafkaApis.scala:542)
at kafka.server.KafkaApis.handle(KafkaApis.scala:62)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:59)
at java.lang.Thread.run(Thread.java:724)
apache官方bug说明:
https://issues.apache.org/jira/browse/KAFKA-1884
github源码:
https://github.com/apache/kafka/tree/0.8.2.2/clients/src/main/java/org/apache/kafka/clients https://github.com/apache/kafka/blob/0.8.2.2/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java
patch:
https://issues.apache.org/jira/secure/attachment/12701885/KAFKA-1884.patch
二:Gradle安装配置
Kafka代码自0.8.x之后就使用Gradle来进行编译和构建了,因此首先需要安装Gradle。Gradle集成并吸收了Maven主要优点的同时还克服了Maven自身的一些局限性——你可以访问https://www.gradle.org/downloads/ 下载最新的Gradle版本。下载解压到一个目录,然后创建一个环境变量GRADLE_HOME指向解压的目录,再将%GRADLE_HOME%\bin加到PATH环境变量中,Gradle就安装配置好了。打开一个cmd输入gradle
-v 验证一下:
三:
github 处下载源代码包。下载之后解压缩到一个目录,目录结构如下图所示:
重要目录的作用如下:
bin目录: Windows和Unix平台下的执行脚本,比如kafka-server-start,console-producer,console-consumer等
clients目录: Kafka客户端代码
config目录: Kafka配置文件,其中比较重要的是server.properties,启动Kafkabroker需要直接加载这个文件
contrib目录: Kafka与hadoop集成的代码,包括hadoop-consumer和hadoop-producer
core目录: Kafka的核心代码,也是作者后面重点要学习的部分
examples目录: Kafka样例代码,例如如何使用Java编写简单的producer和consumer
system_test: 系统测试脚本,主要用python编写
其他的目录和配置文件大多和gradle配置有关,就不赘述了。
四:生成IDEA工程文件并导入到IDEA中
上述准备工作一切就绪后,我们现在可以生成IDEA工程文件。具体做法为打开一个cmd窗口,切换到kafka源代码根路径下,运行gradle
idea,如果是第一次运行,可能会花费一些时间去下载必要的jar包,在等待了一段时间之后,终于看到了BUILDSUCCESSFUL的字样表示项目工程文件生成成功:
问题:
执行gradle idea时,报错
添加如下行
[plain] view
plain copy
ScalaCompileOptions.metaClass.daemonServer = true
ScalaCompileOptions.metaClass.fork = true
ScalaCompileOptions.metaClass.useAnt = false
ScalaCompileOptions.metaClass.useCompileDaemon = false
如图:
源码目录:
五:执行编译
进入kafka目录:
cd /Users/rolin/IdeaProjects/kafka-0.8.2.2
执行编译命令:
gradle build -x test
其中的-x test表示跳过unit test
结果成功:
六:替换对应jar包目录
编译完成对应的jar包:
替换原来的kafka-client-0.8.2.2.jar即可
一: 背景说明
异常信息:
[2017-10-23 10:41:32,793] ERROR [KafkaApi-2] error when handling request Name: TopicMetadataRequest; Version: 0; CorrelationId: 1167300213; ClientId: producer-1; Topics: h5_page_action_new,game_brain_gc_community_data,basic_log,friend_pay_new,r_talk_new,active_log_new,pay_log_new,one_key_login_device_new,player_location_new,report_module_log,download_game_log,sdk_function_log_new,mchannel_player_behavior_new,php_api_log_new,wap_h5_pay_new,kafka:h5_send_msg,game_action_interface_log_new,game_log-mm_lrs_xdksgq
(kafka.server.KafkaApis)
kafka.common.InvalidTopicException: topic name kafka:h5_send_msg is illegal, contains a character other than ASCII alphanumerics, '.', '_' and '-'
at kafka.common.Topic$.validate(Topic.scala:42)
at kafka.admin.AdminUtils$.createOrUpdateTopicPartitionAssignmentPathInZK(AdminUtils.scala:181)
at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:172)
at kafka.server.KafkaApis$$anonfun$19.apply(KafkaApis.scala:520)
at kafka.server.KafkaApis$$anonfun$19.apply(KafkaApis.scala:503)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
at scala.collection.immutable.HashSet$HashSet1.foreach(HashSet.scala:322)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
at scala.collection.AbstractSet.scala$collection$SetLike$$super$map(Set.scala:47)
at scala.collection.SetLike$class.map(SetLike.scala:92)
at scala.collection.AbstractSet.map(Set.scala:47)
at kafka.server.KafkaApis.getTopicMetadata(KafkaApis.scala:503)
at kafka.server.KafkaApis.handleTopicMetadataRequest(KafkaApis.scala:542)
at kafka.server.KafkaApis.handle(KafkaApis.scala:62)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:59)
at java.lang.Thread.run(Thread.java:724)
apache官方bug说明:
https://issues.apache.org/jira/browse/KAFKA-1884
github源码:
https://github.com/apache/kafka/tree/0.8.2.2/clients/src/main/java/org/apache/kafka/clients https://github.com/apache/kafka/blob/0.8.2.2/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java
patch:
https://issues.apache.org/jira/secure/attachment/12701885/KAFKA-1884.patch
二:Gradle安装配置
Kafka代码自0.8.x之后就使用Gradle来进行编译和构建了,因此首先需要安装Gradle。Gradle集成并吸收了Maven主要优点的同时还克服了Maven自身的一些局限性——你可以访问https://www.gradle.org/downloads/ 下载最新的Gradle版本。下载解压到一个目录,然后创建一个环境变量GRADLE_HOME指向解压的目录,再将%GRADLE_HOME%\bin加到PATH环境变量中,Gradle就安装配置好了。打开一个cmd输入gradle
-v 验证一下:
三:
Kafka源代码下载
安装好Gradle之后我们开始下载Kafka的源代码,当前最新的稳定版本是0.10.0.1,目前我们使用的是0.9.0.1版本,你可以从http://kafka.apache.org/downloads.html 或者github 处下载源代码包。下载之后解压缩到一个目录,目录结构如下图所示:
重要目录的作用如下:
bin目录: Windows和Unix平台下的执行脚本,比如kafka-server-start,console-producer,console-consumer等
clients目录: Kafka客户端代码
config目录: Kafka配置文件,其中比较重要的是server.properties,启动Kafkabroker需要直接加载这个文件
contrib目录: Kafka与hadoop集成的代码,包括hadoop-consumer和hadoop-producer
core目录: Kafka的核心代码,也是作者后面重点要学习的部分
examples目录: Kafka样例代码,例如如何使用Java编写简单的producer和consumer
system_test: 系统测试脚本,主要用python编写
其他的目录和配置文件大多和gradle配置有关,就不赘述了。
四:生成IDEA工程文件并导入到IDEA中
上述准备工作一切就绪后,我们现在可以生成IDEA工程文件。具体做法为打开一个cmd窗口,切换到kafka源代码根路径下,运行gradle
idea,如果是第一次运行,可能会花费一些时间去下载必要的jar包,在等待了一段时间之后,终于看到了BUILDSUCCESSFUL的字样表示项目工程文件生成成功:
执行gradle idea时,报错
gradle idea Starting a Gradle Daemon (subsequent builds will be faster) Building project 'core' with Scala version 2.10.6 FAILURE: Build failed with an exception. * Where: Build file '/opt/bigdata/kafka/kafka-0.10.0.0-src/build.gradle' line: 230 * What went wrong: A problem occurred evaluating root project 'kafka-0.10.0.0-src'. > Failed to apply plugin [class 'org.gradle.api.plugins.scala.ScalaBasePlugin'] > No such property: useAnt for class: org.gradle.api.tasks.scala.ScalaCompileOptions * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED解决方法:vim kafka-0.10.0.0-src/build.gradle文件
添加如下行
[plain] view
plain copy
ScalaCompileOptions.metaClass.daemonServer = true
ScalaCompileOptions.metaClass.fork = true
ScalaCompileOptions.metaClass.useAnt = false
ScalaCompileOptions.metaClass.useCompileDaemon = false
如图:
项目导入到IDEA工程中
File-->Open源码目录:
五:执行编译
进入kafka目录:
cd /Users/rolin/IdeaProjects/kafka-0.8.2.2
执行编译命令:
gradle build -x test
其中的-x test表示跳过unit test
结果成功:
六:替换对应jar包目录
编译完成对应的jar包:
替换原来的kafka-client-0.8.2.2.jar即可
相关文章推荐
- 【问题】kafka.common.KafkaException: fetching topic metadata for topics
- ubuntu10.04下audacious2.4源码编译过程(解决2.3cue的bug)
- apache kafka系列之kafka.common.ConsumerRebalanceFailedException异常解决办法
- kafka集群中常见错误的解决方法:kafka.common.KafkaException: Should not set log end offset on partition
- No partition metadata for topic test due to kafka.common.LeaderNotAvailableException
- Kafka错误1_kafka中 FailedToSendMessageException解决_修改host.name
- 源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题(修改PATH路径)
- 第91课:SparkStreaming基于Kafka Direct案例实战和内幕源码解密 java.lang.ClassNotFoundException 踩坑解决问题详细内幕版本
- [异常处理]class kafka.common.UnknownTopicOrPartitionException (kafka.server.ReplicaFetcherThread)
- error[No partition metadata for topic test-1 due to kafka.common.LeaderNotAvailableException]
- Android 4.0 framework源码修改编译,模拟器运行不起来——解决
- [异常处理]class kafka.common.UnknownTopicOrPartitionException (kafka.server.ReplicaFetcherThread)
- 解决Eclipse修改目录或删除目录后,编译提示invalid project path
- apache kafka系列之kafka.common.ConsumerRebalanceFailedException异常解决办法
- 解决weebox的一个Bug(IE9下exception : SCRIPT5022: DOM Exception: INVALID_CHARACTER_ERR (5))
- 成功解决RecyclerView Bug:IndexOutOfBoundsException: Inconsistency detected. Invalid item position
- apache kafka系列之kafka.common.ConsumerRebalanceFailedException异常解决办法
- Android 4.0 framework源码修改编译,模拟器运行不起来——解决
- kafka.common.ConsumerRebalanceFailedException异常解决
- apache kafka系列之kafka.common.ConsumerRebalanceFailedException异常解决办法