2017-01-22 1 views
1

나는 카프카와 개틀링을 사용하려고하지만, 모든 너무 자주이 오류를 얻을 :카프카 오류 : SLF4J : 실패 toString() 형식의 개체에 호출 [org.apache.kafka.common.Cluster]

01:32:53.933 [kafka-producer-network-thread | producer-1] DEBUG o.apache.kafka.clients.NetworkClient - Sending metadata request ClientRequest(expectResponse=true, payload=null, request=RequestSend(header={api_key=3,api_version=0,correlation_id=12,client_id=producer-1}, body={topics=[test]})) to node 1011 
SLF4J: Failed toString() invocation on an object of type [org.apache.kafka.common.Cluster] 
java.lang.NullPointerException 
at org.apache.kafka.common.PartitionInfo.toString(PartitionInfo.java:72) 
    at java.lang.String.valueOf(String.java:2994) 
    at java.lang.StringBuilder.append(StringBuilder.java:131) 
    at java.util.AbstractCollection.toString(AbstractCollection.java:462) 
    at java.lang.String.valueOf(String.java:2994) 
    at java.lang.StringBuilder.append(StringBuilder.java:131) 
    at org.apache.kafka.common.Cluster.toString(Cluster.java:151) 
    at org.slf4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:305) 
    at org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:277) 
    at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:231) 
    at ch.qos.logback.classic.spi.LoggingEvent.getFormattedMessage(LoggingEvent.java:298) 
    at ch.qos.logback.classic.spi.LoggingEvent.prepareForDeferredProcessing(LoggingEvent.java:208) 
    at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:212) 
    at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:103) 
    at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:88) 
    at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48) 
    at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:273) 
    at ch.qos.logback.classic.Logger.callAppenders(Logger.java:260) 
    at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:442) 
    at ch.qos.logback.classic.Logger.filterAndLog_2(Logger.java:433) 
    at ch.qos.logback.classic.Logger.debug(Logger.java:511) 
    at org.apache.kafka.clients.producer.internals.Metadata.update(Metadata.java:133) 
    at org.apache.kafka.clients.NetworkClient.handleMetadataResponse(NetworkClient.java:313) 
    at org.apache.kafka.clients.NetworkClient.handleCompletedReceives(NetworkClient.java:298) 
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:199) 
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:191) 
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:122) 
    at java.lang.Thread.run(Thread.java:745) 
01:32:53.937 [kafka-producer-network-thread | producer-1] DEBUG o.a.k.c.producer.internals.Metadata - Updated cluster metadata version 14 to [FAILED toString()] 

나는 오류가 코드에 관련이 있는지 모르겠지만, 여기 내 BasicSimulation.scala입니다 :

: 여기
class BasicSimulation extends Simulation { 

val kafkaConf = kafka 
    .topic("test") 
    .properties(
     Map(
     ProducerConfig.ACKS_CONFIG -> "1", 
     ProducerConfig.BOOTSTRAP_SERVERS_CONFIG -> "kafka:9092", 
     ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG -> 
      "org.apache.kafka.common.serialization.ByteArraySerializer", 
     ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG -> 
      "org.apache.kafka.common.serialization.ByteArraySerializer")) 

    val scn = scenario("Kafka Test") 
    .feed(csv("data.csv").circular) 
    .exec(kafka("request") 
    .send("${data}".getBytes: Array[Byte])) 

    setUp(
    scn 
     .inject(constantUsersPerSec(10) during(10 seconds))) 
    .protocols(kafkaConf) 
} 

내 고정 표시기 - compose.yml의 카프카 관련 세그먼트
zookeeper: 
    image: wurstmeister/zookeeper 
    ports: 
     - "2181:2181" 

    kafka: 
    image: wurstmeister/kafka 
    ports: 
     - "9092:9092" 
    depends_on: 
     - zookeeper 
    environment: 
     KAFKA_ADVERTISED_HOST_NAME: kafka 
     KAFKA_ADVERTISED_PORT: 9092 
     KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 
     KAFKA_CREATE_TOPICS: "test:1:1" 
     KAFKA_LOG_CLEANER_ENABLE: 'true' 
    volumes: 
     - /tmp/docker.sock:/var/run/docker.sock 

답변

0

도커 컨테이너를 중지하고 제거하면 문제가 해결 된 것으로 보입니다.

docker stop $(docker ps -a -q) 
docker rm $(docker ps -a -q) 
1

제 경우에는 버전 문제였습니다. 호환되지 않는 kafka 빌드 및 kafka 클라이언트 라이브러리를 사용하고있었습니다.

kafka_2.11-0.10.2.1 및 kafka-clients 0.10.2.0으로 전환하면 문제가 해결되었습니다.

0

카프카 종속 버젼입니다. 설치된 카프카 버전과 카프카 - 클라이언트 종속 버전이 일치하지 않습니다. 먼저 설치된 Kafaka 버전을 확인하고 POM에 Kafka-client 버전을 업데이트하십시오. 나는 같은 문제에 직면하고 kafka-client 버전을 수정하여 해결했습니다.

설치된 카프카 버전 :

Maven Dependency: 
     <dependency> 
      <groupId>org.apache.kafka</groupId> 
      <artifactId>kafka-clients</artifactId> 
      <version>0.11.0.0</version> 
     </dependency> 

0.11이 지금은 나를 위해 잘 작동합니다.

관련 문제