今天在新机房部署kafka的时候,趁机使用了最新的1.0.0版本的kafka。但是安装部署完成后,在创建topic的时候,居然出错了:
$ bin/kafka-topics.sh --create --zookeeper 192.168.1.1:2685/kafka --replication-factor 2 --partitions 3 --topic innertest
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/svckafka/kafka/libs/KafkaYYMetricsReporter.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/svckafka/kafka/libs/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Error while executing topic command : Failed to parse the broker info from zookeeper: {"jmx_port":-1,"timestamp":"1511324917564","endpoints":["PLAINTEXT://192.168.1.1:9099","TRACE://192.168.1.1:9098"],"host":"192.168.1.1","version":3,"port":9099}
[2017-11-22 12:28:51,870] ERROR kafka.common.KafkaException: Failed to parse the broker info from zookeeper: {"jmx_port":-1,"timestamp":"1511324917564","endpoints":["PLAINTEXT://192.168.1.1:9099","TRACE://192.168.1.1:9098"],"host":"192.168.1.1","version":3,"port":9099}
at kafka.cluster.Broker$.createBroker(Broker.scala:126)
at kafka.utils.ZkUtils.getBrokerInfo(ZkUtils.scala:889)
at kafka.utils.ZkUtils$$anonfun$getAllBrokersInCluster$2.apply(ZkUtils.scala:327)
at kafka.utils.ZkUtils$$anonfun$getAllBrokersInCluster$2.apply(ZkUtils.scala:327)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at kafka.utils.ZkUtils.getAllBrokersInCluster(ZkUtils.scala:327)
at kafka.admin.AdminUtils$.getBrokerMetadatas(AdminUtils.scala:439)
at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:461)
at kafka.admin.TopicCommand$.createTopic(TopicCommand.scala:110)
at kafka.admin.TopicCommand$.main(TopicCommand.scala:63)
at kafka.admin.TopicCommand.main(TopicCommand.scala)
Caused by: java.lang.IllegalArgumentException: No security protocol defined for listener TRACE
at kafka.cluster.EndPoint$$anonfun$securityProtocol$1$1.apply(EndPoint.scala:48)
at kafka.cluster.EndPoint$$anonfun$securityProtocol$1$1.apply(EndPoint.scala:48)
at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
at scala.collection.AbstractMap.getOrElse(Map.scala:59)
at kafka.cluster.EndPoint$.securityProtocol$1(EndPoint.scala:47)
at kafka.cluster.EndPoint$.createEndPoint(EndPoint.scala:56)
at kafka.cluster.Broker$$anonfun$2.apply(Broker.scala:116)
at kafka.cluster.Broker$$anonfun$2.apply(Broker.scala:116)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.AbstractTraversable.map(Traversable.scala:104)
at kafka.cluster.Broker$.createBroker(Broker.scala:116)
... 15 more
(kafka.admin.TopicCommand$)
关键错误应该是”TRACE”协议不被识别:
Caused by: java.lang.IllegalArgumentException: No security protocol defined for listener TRACE
于是,试着在配置文件中,把
advertised.listeners=PLAINTEXT://192.168.1.1:9099, TRACE://192.168.1.1:9098
改成
advertised.listeners=PLAINTEXT://192.168.1.1:9099
然后重启kafka,再尝试创建topic,就好了。
总结:
在1.0.0版本的kafka中,不再支持”TRACE”协议,这个在之前的版本中应该只是测试用。